C語言:用連結串列實現一元多項式的加法
阿新 • • 發佈:2019-01-30
/* 一元多多項式的加法 1.先建立連結串列,儲存多項式 2.輸出多項式 3.兩個多項式相加 4.輸出多項式 */ # include <stdio.h> # include <malloc.h> typedef struct dxs //多項式節點 { float coe; //係數 int exp; //指數 struct dxs * pNext; //指標域 }DXS, * PDXS; PDXS creat_dxs(); //建立多項式 void traverse(PDXS pHead); //遍歷多項式連結串列 PDXS add(PDXS Da, PDXS Db); //多項式求和 int main(void) { //用連結串列結構,建立兩個多項式 PDXS Da = creat_dxs(); traverse(Da); PDXS Db = creat_dxs(); traverse(Db); //求兩個多項式的加法 PDXS Dj = add(Da, Db); traverse(Dj); return 0; } PDXS creat_dxs() { PDXS pHead = (PDXS)malloc(sizeof(DXS)); //建立頭結點 pHead->pNext = NULL; //尾指標 PDXS pTail = pHead; PDXS pNew = NULL; int len; float c; int e; int i; printf("輸入多項式的項數:len = "); scanf("%d", &len); for(i = 0; i < len; i++) { printf("分別輸入第%d項的係數c、指數e:", i+1); scanf("%f%d", &c, &e); pNew = (PDXS)malloc(sizeof(DXS)); //多項式項,係數、指數 pNew->coe = c; pNew->exp = e; pNew->pNext = NULL; pTail->pNext = pNew; pTail = pNew; } return pHead; } //遍歷連結串列 void traverse(PDXS pHead) { PDXS p = pHead->pNext; //首節點 while(p != NULL) { printf("(%.2f %d), ", p->coe, p->exp); p = p->pNext; } printf("\n"); } //多項式相加 PDXS add(PDXS Da, PDXS Db) { PDXS Dj = (PDXS)malloc(sizeof(DXS)); //和的頭結點 Dj->pNext = NULL; PDXS pTail = Dj; //和的尾節點 PDXS Dah = Da->pNext; //指向多項式的首節點 PDXS Dbh = Db->pNext; //迴圈遍歷多項式A,B while(Dah && Dbh) { //比較當前兩節點的指數 //當前 A項節點指數 < B項節點指數 if(Dah->exp < Dbh->exp) { pTail->pNext = Dah; //將此A項加入和連結串列中 pTail = Dah; Dah = Dah->pNext; //A多項式向後遍歷 } //當前 A項節點指數 < B項節點指數 else if(Dah->exp > Dbh->exp) { pTail->pNext = Dbh; //將此B項加入和連結串列中 pTail = Dbh; Dbh = Dbh->pNext; // //B多項式向後遍歷 } //如果兩節點的指數相等 else { //當前指數的係數和不為0 //A項中儲存係數和,把此A項加入和連結串列中 if(0 != (Dah->coe + Dbh->coe)) { Dah->coe = Dah->coe + Dbh->coe; pTail->pNext = Dah; pTail = Dah; } //A,B都向後遍歷 Dah = Dah->pNext; Dbh = Dbh->pNext; } } //插入剩餘段 if(Dah != NULL) { pTail->pNext = Dah; } if(Dbh != NULL) { pTail->pNext = Dbh; } return Dj; }