C/C++(链表应用)笔记——使用链表进行多项式的合并

来源:互联网 发布:js中hasclass 编辑:程序博客网 时间:2024/06/05 03:56

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

通过这次调试,加深了自己对于链表的理解和运用:
—–>出现了指针的运用上的问题;
—–>出现了链表的初始化赋值的问题;
—–>出现了函数的调用与使用的问题;
—–>等等··· ···
—–>—–>问题一一解决,收获颇丰

第一次发博客,记录自己的学习历程,良好的开端!继续努力吧!

0 0