## 初學C/C++者的筆記——使用鏈表進行多項式的合併 ##
進行代碼的調試與運行並且最後成功是很有成就感的事情
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct PolyNode{
//這是鏈表的自定義數據類型
int coef; //係數
int expon; //指數
struct PolyNode* link; //指向下一個指針
}*Polynomial; //*Polynomial 就是指 Polynomial指針所指向的單元的值
Polynomial p1,p2;
Polynomial Attach(int coef,int expon, Polynomial *PtrRear){
/*由於本函數要改變的是當前結果表達式尾項的值
所以函數傳遞進來的是節點的指針地址 *PtrRear 指向尾項*/
Polynomial p;
p=(Polynomial)malloc(sizeof(PolyNode));//創建一個新節點p 並進行賦值 初始化
p->coef= coef;
p->expon= expon;
//將 p 指向的新節點插入到尾項之後
(*PtrRear)->link=p;
*PtrRear= p;
return p;
}
int Compare(int a,int b){
if(a> b)
return 1;
if(a< b)
return -1;
return 0;
}
Polynomial PolyAdd( Polynomial p1,Polynomial p2){
Polynomial front, rear, temp;
int sum;
rear= (Polynomial)malloc(sizeof(PolyNode));
front = rear;
while(p1&&p2) //這
switch(Compare(p1->expon,p2->expon)){ //個
case 1: //循
Attach(p1->coef,p1->expon,&rear); //環
p1= p1->link; //完
break; //成
case -1: //多
Attach(p2->coef,p2->expon,&rear); //項
p2= p2->link; //式
break; //的
case 0: //相
sum= p1->coef+ p2->coef; //加
if(sum) //比
Attach(sum,p1->expon,&rear); //較
p1= p1->link; //p1
p2= p2->link; //和
break; //p2
} //值
/* 將未處理完的那個多項式拷貝到新的多項式的後面*/
for(;p1;p1= p1->link) Attach(p1->coef,p1->expon,&rear);//p1不爲空就拷p1
for(;p2;p2= p2->link) Attach(p2->coef,p2->expon,&rear);//p2不爲空就拷p2
rear->link=NULL;
temp=front;
front= front->link;
free(temp);
return front;
}
//主函數
int main(void){
PolyNode a1,b1,c1,d1,a2,b2,c2,d2,e;//創建鏈表,初始化,賦值,初始化多項式
Polynomial q1, q2,NewP;
a1.coef=2;a1.expon=4;
b1.coef=1;b1.expon=3;
c1.coef=2;c1.expon=2;
d1.coef=1;d1.expon=1;
p1=&a1;
a1.link=&b1;
b1.link=&c1;
c1.link=&d1;
d1.link=NULL;
q1=p1;
cout<<"原多項式p1爲:";
do{
cout<<q1->coef<<"x^"<<q1->expon;
if(q1->link)
cout<<"+";
else
cout<<" "<<endl;
q1=q1->link;
}while(q1!=NULL);
a2.coef=3;a2.expon=5;
b2.coef=4;b2.expon=3;
c2.coef=1;c2.expon=2;
d2.coef=2;d2.expon=1;
e.coef=-1;e.expon=0;
p2=&a2;
a2.link=&b2;
b2.link=&c2;
c2.link=&d2;
d2.link=&e;
e.link=NULL;
q2=p2;
cout<<"原多項式p2爲:";
do{
cout<<q2->coef<<"x^"<<q2->expon;
if(q2->link)
cout<<"+";
else
cout<<endl<<endl;
q2=q2->link;
}while(q2!=NULL);
NewP= PolyAdd( p1, p2);
cout<<"新的多項式爲:"<<endl;
do{
cout<<NewP->coef<<"x^"<<NewP->expon;
if(NewP->link)
cout<<"+";
else
cout<<endl<<endl;
NewP=NewP->link;
}while(NewP!=NULL);
return 0;
}
通過這次調試,加深了自己對於鏈表的理解和運用:
—–>出現了指針的運用上的問題;
—–>出現了鏈表的初始化賦值的問題;
—–>出現了函數的調用與使用的問題;
—–>等等··· ···
—–>—–>問題一一解決,收穫頗豐
第一次發博客,記錄自己的學習歷程,良好的開端!繼續努力吧!