码迷,mamicode.com
首页 > 其他好文 > 详细

17、蛤蟆的数据结构笔记之十七链表实现多项式

时间:2015-06-27 09:59:17      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

17、蛤蟆的数据结构笔记之十七链表实现多项式

         本篇名言:“人生不是一种享乐,而是一桩十分沉重的工作。”列夫托尔斯泰。

         栈的应用在上面中基本覆盖了很多,接下去我们来补充下链表在多项式实现中的例子。

  欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/46653857

1.  多项式

这个问题是符号多项式的处理问题,已经成为表处理中的一个经典例子。把每项表示为一个结点,该结点包括系数域、指数域和指向下一项的指针。类型申明如下:

typedefstruct linklist

{

         intcoef;//系数

         intexp; //指数

         struct linklist*next;

}nodelink;

2.  基本算法

从两个链表开始比较多项式的各个项,如果相同则相加,如果不相同,则备份高指数的,以此类推。

3.  Main函数

主函数如下,创建两个多项式,得到如下图所示:

void main()

{

         nodelink*heada,*headb,*headc;

         heada=create();

         printhead(heada);

         headb=create();

         printhead(headb);

         headc=ADD(heada,headb);

         printf("相加后的的链表为:\n");

         printhead(headc);

}

 

 

如下图1所示:

技术分享


4.  源码

#include<stdio.h>

#include<malloc.h>

typedefstruct linklist

{

         intcoef;//系数

         intexp; //指数

         struct linklist*next;

}nodelink;

nodelink *create()//创建单链表

{

         nodelink*head,*s,*t;

         intc,e;

         head=(nodelink*)malloc(sizeof(nodelink));//哨兵头结点

         head->next=NULL;

         t=head;//始终指向单链表的尾部

         printf("请输入ce的值,当系数e等于-1为结束条件:\n");

         scanf("%d%d",&c,&e);

         while(e!=-1)

         {

                   s=(nodelink*)malloc(sizeof(nodelink));

                   s->coef=c;

                   s->exp=e;

                   s->next=NULL;

                   t->next=s;

                   t=s;

                   printf("请继续输入ce的值,当系数e等于-1为结束条件:\n");

                   scanf("%d%d",&c,&e);

         }

         returnhead;

}

void printhead(nodelink *head)//输出连表数据

{

         nodelink*phead;

         intpcount=1;//结点计数器

         phead=head->next;//指向第一个元素结点

        

         while(phead!=NULL)

         {

                   printf("%d个结点的系数和指数分别为:",pcount);

                   printf("%2d%4d\n",phead->coef,phead->exp);

                   phead=phead->next;

                   pcount++;

         }

         printf("\n");

}

nodelink *ADD(nodelink *heada,nodelink *headb)//实现多项式相加

{

 

         nodelink*p,*q,*prea,*preb,*temp;

         intsum;

         p=heada->next;//分别使pq指向第一个元素结点

         q=headb->next;

         prea=heada;

         free(headb);//释放headb链表的头结点

         while(p!=NULL&&q!=NULL)

         {

                   if(p->exp>q->exp)

                   {

                            prea=p;

                            p=p->next;

                   }

                   else if(p->exp==q->exp)

                   {

                            sum=p->coef+q->coef;

                            if(sum!=0)

                            {

                                     p->coef=sum;

                                     preb=q;

                                     prea=p;

                                     p=p->next;

                                     q=q->next;

                                     free(preb);

                            }

                            else//如果和为零

                            {

                                     temp=p;

                                     p=p->next;

                                     prea->next=p;

                                     free(temp);

                                     preb=q;

                                     q=q->next;

                                     free(preb);

                            }

                   }

                   else //p->exp大于q->exp

                   {

                            temp= q->next;                          

                            prea->next=q;

                            q->next=p;      

                            q= temp;

                           

                   }

         }

         if(q!=NULL)

                   prea->next=q;

         return heada;

}

void main()

{

         nodelink*heada,*headb,*headc;

         heada=create();

         printhead(heada);

         headb=create();

         printhead(headb);

         headc=ADD(heada,headb);

         printf("相加后的的链表为:\n");

         printhead(headc);

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

17、蛤蟆的数据结构笔记之十七链表实现多项式

标签:

原文地址:http://blog.csdn.net/notbaron/article/details/46653857

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!