C/C++(鏈表應用)筆記——使用鏈表進行多項式的合併

## 初學C/C++者的筆記——使用鏈表進行多項式的合併 ##
進行代碼的調試與運行並且最後成功是很有成就感的事情
這是運行完成的控制檯顯示,完成了p1和p2兩個多項式的合併


#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;
}

通過這次調試,加深了自己對於鏈表的理解和運用:
—–>出現了指針的運用上的問題;
—–>出現了鏈表的初始化賦值的問題;
—–>出現了函數的調用與使用的問題;
—–>等等··· ···
—–>—–>問題一一解決,收穫頗豐

第一次發博客,記錄自己的學習歷程,良好的開端!繼續努力吧!

發佈了31 篇原創文章 · 獲贊 17 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章