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 }
测试结果:


浙公网安备 33010602011771号