資料結構實驗:線性表操作(一元多項式的運算)
阿新 • • 發佈:2018-12-17
title: 線性表操作(一元多項式的運算)
date: 2018-10-26 11:22:37
tags: 資料結構
categories: 資料結構
線性表操作(一元多項式的運算)
實驗目的
1、定義線性表的鏈式儲存
2、實現對線性表的一些基本操作和具體函式定義
實驗要求
1、定義線性表的鏈式儲存;
2、實現對線性表的一些基本操作和具體函式定義。
3、定義輸出一元多項式的函式;
4、編寫主程式呼叫上面的函式實現一元多項式的加減。
資料輸入輸出要求
輸入示例
3
2 3
3 4
5 7
5
2 1
3 3
-3 4
4 6
5 7
(說明:第一個資料3表示該第一個一元多項式的項數為3,後面的2 3 表示第一項的係數為2 指數為3;按指數遞增的次序輸入)
輸出示例
一元多項式1: 2x(3)+3x(4)+5x(7)
一元多項式2: 2x(1)+3x(3)-3x(4)+4x(6)+5x(7)
加的結果:2x(1)+5x(3) +4x(6)+10x(7)
減的結果:-2x(1)-1x(3)+6x(4)-4x(6)
程式碼
#include<bits/stdc++.h> typedef struct polynode { float coef; //係數 int expn; //指數 struct polynode *next; }polynode,*polylist; int s=1; void poly_create(polylist &L) //多項式連結串列建立 { int m; printf("請輸入第 %d 個一元多項式項數:",s); scanf("%d",&m); L=(polylist)malloc(sizeof(polynode)); //申請頭節點指標 polylist p; p=L; for(int i=1;i<=m;i++) { p->next=(polylist)malloc(sizeof(polynode)); //不斷申請 p=p->next; printf("請輸入第 %d 項的係數:",i); scanf("%f",&p->coef); printf("請輸入第 %d 項的指數:",i); scanf("%d",&p->expn); } p->next=NULL; } void display(polylist L) //列印多項式 { polylist p; p=L->next; printf("%.0fx(%d)",p->coef,p->expn); p=p->next; while(p!=NULL) { if(p->coef>0) { printf("+%.0fx(%d)",p->coef,p->expn); } else { printf("%.0fx(%d)",p->coef,p->expn); } p=p->next; } printf("\n"); } void add(polylist La, polylist Lb, polylist &Lc) { polylist pa,pb,pc; pc=(polylist)malloc(sizeof(polynode)); Lc=pc; pa=La->next; pb=Lb->next; float x; while (pa&&pb) { //int EXPN; if(pa->expn==pb->expn) //指數相同 { //EXPN=pa->expn; x=pa->coef+pb->coef; if(x) { pc->next=(polylist)malloc(sizeof(polynode)); pc=pc->next; pc->coef=x; pc->expn=pa->expn; } pa=pa->next; pb=pb->next; } else { pc->next=(polylist)malloc(sizeof(polynode)); pc=pc->next; if(pa->expn<pb->expn) { pc->coef=pa->coef; pc->expn=pa->expn; pa=pa->next; } else { pc->coef=pb->coef; pc->expn=pb->expn; pb=pb->next; } } } while(pa) { pc->next=(polylist)malloc(sizeof(polynode)); pc=pc->next; pc->coef=pa->coef; pc->expn=pa->expn; pa=pa->next; } while(pb) { pc->next=(polylist)malloc(sizeof(polynode)); pc=pc->next; pc->coef=pb->coef; pc->expn=pb->expn; pb=pb->next; } pc->next=NULL; } void subtract(polylist La,polylist Lb,polylist &Lc) { polylist pa,pb,pc; pc=(polylist)malloc(sizeof(polynode)); Lc=pc; pa=La->next; pb=Lb->next; float x; while (pa&&pb) { //int EXPN; if(pa->expn==pb->expn) //指數相同 { //EXPN=pa->expn; x=pa->coef-pb->coef; if(x) { pc->next=(polylist)malloc(sizeof(polynode)); pc=pc->next; pc->coef=x; pc->expn=pa->expn; } pa=pa->next; pb=pb->next; } else { pc->next=(polylist)malloc(sizeof(polynode)); pc=pc->next; if(pa->expn<pb->expn) { pc->coef=pa->coef; pc->expn=pa->expn; pa=pa->next; } else { pc->coef=pb->coef; pc->expn=pb->expn; pb=pb->next; } } } while(pa) { pc->next=(polylist)malloc(sizeof(polynode)); pc=pc->next; pc->coef=-pa->coef; pc->expn=pa->expn; pa=pa->next; } while(pb) { pc->next=(polylist)malloc(sizeof(polynode)); pc=pc->next; pc->coef=-pb->coef; pc->expn=pb->expn; pb=pb->next; } pc->next=NULL; } int main() { polylist La,Lb,Lc,Ld; poly_create(La); s++; poly_create(Lb); printf("一元多項式1:"); display(La); printf("一元多項式2:"); display(Lb); add(La,Lb,Lc); printf("加的結果:"); display(Lc); subtract(La,Lb,Ld); printf("減的結果: "); display(Ld); return 0; }