C语言 数据结构实训2(链表实现多项式相加)

♂写了个多项式相加,有不完美的地方,欢迎交流♂~

 1 #include <stdio.h>
 2 #include <stdlib.h> 
 3 #define null 0
 4 typedef struct node{
 5     int coef;//系数 
 6     int exp;//指数 
 7     struct node *next;
 8 }lnode;
 9 lnode *Createlnode(int n){
10     lnode *head,*q,*p;
11     head=(lnode *)malloc(sizeof(lnode));
12     q=head;
13     int i,j,coef,exp;
14     j=1;
15     for(i=0;i<n;i++){
16         printf("输入第%d个结点的系数与指数:",j);
17         scanf("%d%d",&coef,&exp);
18         p=(lnode *)malloc(sizeof(lnode));
19         p->coef=coef;
20         p->exp=exp;
21         q->next=p;
22         q=p;
23         j++;
24     }
25     q->next=null;//链表尾指针指向null
26     return head;
27 }
28 void Displnode(lnode *p){
29     lnode *q;
30     q=p->next;
31     while(q!=null){
32         if(q->coef!=1)printf("(%d",q->coef);
33         else printf("%(");
34         if(q->next==null)printf("x^%d)",q->exp);
35         else printf("x^%d)+",q->exp);
36         q=q->next;
37     }
38     printf("\n");
39 }
40 void lnodeTailAdd(lnode *q,lnode *p){//如果所加项的指数不在被加链表里则添加到尾部
41     lnode *l,*t;
42     l=q;
43     t=(lnode *)malloc(sizeof(lnode));
44     t->exp=p->exp;
45     t->coef=p->coef;
46     while(l->next!=null)l=l->next;
47     l->next=t;
48     t->next=null;    
49 }
50 void lnodeAdd(lnode *q,lnode*p){//把指数相同的两项的系数相加
51     lnode *l;
52     l=q->next;
53     while(l->exp!=p->exp)l=l->next;
54     l->coef=l->coef+p->coef;
55 }
56 void lnodeDelete(lnode *q,int n){//如果指数相同的两项系数和为0,则删除该结点
57     lnode *p,*t;
58     p=q;
59     while(p->next->exp!=n)p=p->next;
60     t=p->next;
61     p->next=t->next;
62     free(t);
63 }
64 int main(){
65     lnode *q,*p;
66     printf("创建链表:\n");
67     q=Createlnode(3);
68     printf("创建链表:\n");
69     p=Createlnode(4);
70     printf("第一个多项式:\n");
71     Displnode(q);
72     printf("第一个多项式:\n");
73     Displnode(p);
74     int flag;
75     lnode *r,*s,*t;
76     t=p->next;
77     while(t!=null){
78         s=q->next;
79         while(s!=null){
80             if(s->exp==t->exp){
81                 if(s->coef+t->coef==0){
82                     lnodeDelete(q,s->exp);
83                     break;
84                 }else{
85                     lnodeAdd(q,t);
86                     break; 
87                 }
88             }
89             if(s->next==null){
90                 lnodeTailAdd(q,t);
91                 break;
92             }
93             s=s->next;
94         }
95         t=t->next;
96     }
97     printf("多项式合并得:");
98     Displnode(q);
99 } 

 

测试结果:

       

 

 

 

 

posted @ 2021-09-27 21:49  旺旺哈  阅读(256)  评论(0)    收藏  举报