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万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览