您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 一个一元稀疏多项式简单计算器
//设计一个一元稀疏多项式简单计算器#includestdio.h#includestdlib.hstructtagNode{intcoef;//多项式的系数intexp;//多项式的指数structtagNode*next;};typedefstructtagNodeNode;//重新定义结点名称typedefstructtagNode*pNode;//重新定义指针名称voidTrailInsertList(pNode,int,int);//在链表表尾部插入结点voidAddPolynomial(pNode,pNode);//将两个多项式相加voidPrintPolynomial(pNode);//打印多项式intmain(void){pNodepa,pb;//定义两个头指针pNodepFree;//定义一个释放指针pa=pb=NULL;Nodeheada,headb;//定义两个头结点heada.coef=headb.coef=0;//头结点的coef作为结点的个数heada.exp=headb.exp=-1;//头结点的exp无意义故赋给其-1的值heada.next=headb.next=NULL;//让头指针指向头结点pa=&heada;pb=&headb;intcoef=0;//系数intexp=0;//指数//第一个多项式的输入printf(请分别输入第一个多项式的系数和指数,并以输入系数为0作为结束标志!\n);do{printf(系数:);scanf(%d,&coef);printf(指数:);scanf(%d,&exp);printf(\n);if(coef!=0)TrailInsertList(pa,coef,exp);}while(coef!=0);//第二个多项式的输入printf(请分别输入第二个多项式的系数和指数,并以输入系数为0作为结束标志!\n);do{printf(系数:);scanf(%d,&coef);printf(指数:);scanf(%d,&exp);printf(\n);if(coef!=0)TrailInsertList(pb,coef,exp);}while(coef!=0);AddPolynomial(pa,pb);//将两个多项式相加PrintPolynomial(pa);//打印出相加后的多项式pFree=pa-next;free(pFree);//释放动态申请的内存空间return0;}voidTrailInsertList(pNodepHead,intcoef,intexp){pNodetrail=NULL;//定义一个指向链表尾部的指针pNodenewnode=NULL;//定义一个指向新结点的指针//让trail指针指向尾部的结点trail=pHead;while(trail-next!=NULL){trail=trail-next;}newnode=(structtagNode*)malloc(sizeof(Node));//申请一块大小为Node的内存空间if(!newnode)//如果申请失败{printf(Alloctememoryfailure!\n);exit(1);//退出}//初始化申请的新结点newnode-coef=coef;newnode-exp=exp;newnode-next=NULL;trail-next=newnode;//插入新结点pHead-coef++;//头结点的计算器加一}voidAddPolynomial(pNodep1,pNodep2){pNodecur1=p1-next;//链表1,结果存放的地方pNodecur2=p2-next;//链表2pNodepre1=p1;pNodetemp=NULL;//临时指针while(cur1!=NULL&&cur2!=NULL)//当前两个链表都不为空{if(cur1-expcur2-exp)//比较链表1与链表2当前指数大小{pre1=cur1;cur1=cur1-next;//cur1指向下一个结点}elseif(cur1-exp==cur2-exp)//链表1与链表2指数相等时{cur1-coef+=cur2-coef;if(cur1-coef!=0){pre1=cur1;}else{pre1-next=cur1-next;//保持链表1的连续性free(cur1);}cur1=pre1-next;//cur1指向要比较的下一个结点//下面是删除指针cur2指向的结点,因为结果已经存放在链表1的结点中temp=cur2;cur2=cur2-next;free(temp);}else//链表1当前结点的指数比链表2的大时{p2-next=cur2-next;cur2-next=cur1;pre1-next=cur2;pre1=cur2;cur2=p2-next;}}if(cur2)//如果链表2比链表1长{pre1-next=cur2;}p2-next=NULL;}voidPrintPolynomial(pNodepHead){pNodep;//定义头指针p=pHead;p=p-next;while(p){printf(%dX(%d),p-coef,p-exp);if(p-next){printf(+);}p=p-next;}printf(\n);}
本文标题:一个一元稀疏多项式简单计算器
链接地址:https://www.777doc.com/doc-7872044 .html