在C语言实现的一元多项式的相加操作中,怎样同时实现合并一个多项式中的同类项?

[复制链接]
查看11 | 回复1 | 2011-9-5 08:05:39 | 显示全部楼层 |阅读模式
abcddd_123406:50:38#includestdio.h#includemalloc.htypedefstructPolynode{intcoef;intexp;structPolynode*next;}Polynode;Polynode*polycreate(/*Polynode*head*/){Polynode*h,*rear,*s,*temp;intc,e;h=(Polynode*)malloc(sizeof(Polynode));/*建立多项式的头结点*/h-next=NULL;scanf(\"%d%d\",/*键入多项式的系数和指数项*/while(c!=0)/*若c=0,则代表多项式的输入结束*/{s=(Polynode*)malloc(sizeof(Polynode));/*申请新的结点*/s-coef=c;s-exp=e;rear=h;//rear不再指向尾节点,而是从头结点开始遍历temp=rear-next;while(temp!=NULLexpe){//循环到rear-expe,temp-expe,否则直到链表结尾if(rear-exp==temp-exp){rear-coeftemp-coef;}//此句为合并同类项else{rear=temp;temp=rear-next;}}s-next=temp;//插入rear-next=s;scanf(\"%d%d\",}return(h);}voidpolylist_add(Polynode*head1,Polynode*head2){intsum;Polynode*temp;Polynode*p=head1-next,*q=head2-next,*r=head1;while(p!=NULLexpq-exp){r-next=p;r=r-next;p=p-next;}elseif(p-expq-exp){r-next=q;r=r-next;q=q-next;}else{sum=(p-coef)(q-coef);if(sum!=0){p-coef=sum;r-next=p;r=r-next;p=p-next;temp=q;q=q-next;free(temp);}else{temp=p-next;free(p);p=temp;temp=q-next;free(q);q=temp;}}if(p!=NULL)r-next=p;elser-next=q;}}voidprintf_list(Polynode*head){Polynode*p=head-next;while(p){printf(\"%dx^%d\",p-coef,p-exp);if(p-next)printf(\"\");p=p-next;}}intmain(){Polynode*head1,*head2;//clrscr();head1=polycreate(/*head1*/);head2=polycreate(/*head2*/);printf_list(head1);printf(\"\\n\");printf_list(head2);printf(\"\\n\");polylist_add(head1,head2);printf_list(head1);getchar();getchar();return0;}为什么没有实现合并一个多项式中同类项的操作啊?本人忒穷,没分啊,高手帮帮忙吧,谢谢啦!
回复

使用道具 举报

千问 | 2011-9-5 08:05:39 | 显示全部楼层
Polynode*polycreate(/*Polynode*head*/){Polynode*h,*rear,*s,*temp;intc,e;h=(Polynode*)malloc(sizeof(Polynode));/*建立多项式的头结点*/h-next=NULL;scanf(\"%d%d\",/*键入多项式的系数和指数项*/while(c!=0)/*若c=0,则代表多项式的输入结束*/{rear=h;//rear不再指向尾节点,而是从头结点开始遍历temp=rear-next;while(temp!=NULLexpe){rear=temp;temp=rear-next;}if(temp!=NULLexp==e)/*如果上面寻找退出时,temp不为空且它的指数和输入指数相同*/{temp-coef=c;}else/*这是一个当前多项式没有出现的指数项,新建节点保存*/{s=(Polynode*)malloc(sizeof(Polynode));/*申请新的结点*/s-coef=c;s-exp=e;s-next=rear-next;//插入rear-next=s;}scanf(\"%d%d\",}return(h);}建议scanf(\"%d%d\",这里分成2句,如果c==0,直接退出录入
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行