(資料結構)線性表_多項式相加1_模仿
阿新 • • 發佈:2019-02-08
#include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef int ElemType; typedef struct Node *PloyNode; typedef struct Node *PloyList; /*結構體*/ struct Node { int coef; int expn; PloyNode next; }; /*帶表頭的單向連結串列*/ void CreatePloy(PloyList &L ,int n) { int i; PloyNode p,q; L=(PloyList)malloc(sizeof(struct Node)); //生成頭結點 L->coef=0; L->expn=0; L->next=NULL; //初始化頭結點 printf("輸入多項式每項係數和冪\n"); q=L; for(i=0;i<n;i++) { p=(PloyList)malloc(sizeof(struct Node)); scanf("%d%d",&p->coef,&p->expn); q->next=p; q=q->next; } q->next=NULL; } /* 輸出多項式*/ void PolyShow(PloyList L, void(*vi)(ElemType ,ElemType )) { PloyList p=L->next; while(p) { vi(p->coef ,p->expn); if(p->next) { printf("+"); } p=p->next; } printf("\n"); } void visit(ElemType coef, ElemType expn) { if(coef!=0) { printf("%dX^%d",coef,expn); } } PloyList AddPloy(PloyList La,PloyList Lb) { PloyList Lc; PloyNode Pa,Pb,Pc; Pa=La->next; Pb=Lb->next; Lc=(PloyList)malloc(sizeof(struct Node)); //生成頭結點 Lc->coef=0; Lc->expn=0; Lc->next=NULL; Pc=Lc; while(Pa!=NULL&&Pb!=NULL) { if(Pa->expn > Pb->expn) //取係數小的那一項 { Pc->next=Pb; Pb=Pb->next; } else if(Pa->expn < Pb->expn) //取係數小的那一項 { Pc->next=Pa; Pa=Pa->next; } else { Pa->coef=Pa->coef+Pb->coef; Pc->next=Pa; Pb=Pb->next; Pa=Pa->next; } Pc=Pc->next; } //while end while(Pa!=NULL) { Pc->next=Pa; Pc=Pc->next; Pa=Pa->next; } while(Pb!=NULL) { Pc->next=Pb; Pc=Pc->next; Pb=Pb->next; } return Lc; } int main() { PloyList a, b, c; //因為a,b,c只是宣告,沒有一個地址指向,所以前面需要用到引用 printf("輸入多項式a, "); CreatePloy(a,5); printf("輸入多項式b, "); CreatePloy(b,5); printf("多項式a :"); PolyShow(a, visit); printf("\n"); printf("多項式b :"); PolyShow(b, visit); printf("\n"); c = AddPloy(a,b); PolyShow(c, visit); return 0; }