• 用循环链表对多项式进行求和算法


    cofe(多项式的系数) exp(多项式的指数) next(指向下一个结点的指针)


    Node *A,*B;{Node *NODE(A,B)//A和B是两个多项式;

    int i,j,k;

    Node *p,*q,*q1,*q2;

    float x;

    q1=A;q2=B;

    q=malloc(sizeof(Node));    //生成一个新节点p,用于存储A与B的和;

    q->cofe=0;    q->exp=-1;q->next=q;    //假设多项式的头节点的系数为0,指数为-1,建立一个循环链表;

    p=q;    //设一个p指针用于保存头节//点,以便之后能找到该链表;

    q1=q1->next;    q2=q2->next;    //将A和B分别指向第一个节点

    while(q1!=A&&q2!=B){    //当q1和q2都没有遍历完的时候;

    if(q1->exp==q2->exp){    //如果q1的指数等于q2的指数则将q1的系数与q2的系数相加之后存入x;

    x=q1->cofe+q2->cofe;

    if(x!=0)            //如果x不为0,则将和x插入到p的尾部;

    {

    q->next=malloc(sizeof(Node));

    q=q->next;

    q->cofe=x;q->exp=q1->exp;

    }

    q1=q1->next;    q2=q2->next;    

    }

    else{                    

    q->next=malloc(sizeof(Node))

    q=q->next;

    if(q1->exp<=q2->exp){            //q1的指数与q2的指数不想等,且q1的指数小于q2的指数,则将q1插入到p的尾部;

    q->cofe=q1->cofe;    q->exp=q1->exp;

    q1=q1->next;                //q1指向下一个节点后在与q2进行比较;

    }    

    else{

    q->cofe=q2->cofe;    q->exp=q2->exp;        //反之,如果q2的指数比q1的指数小,则将q2的节点插入到p的尾部;

    q2=q2->next

    }

    while(q1!=A){                //如果q1还有元素而q2没有了,则将剩下的q1的所有节点插入到p当中;

    q->next=malloc(sizeof(Node));

    q=q->next;

    q->cofe=q1->cofe;    q->exp=q1->exp;

    q1=q1->next;

    }

    while(q2!=B){                //如果q2还有元素而q1没有了,则将剩下的q2插入到p中;

    q->next=malloc(sizeof(Node));

    q=q->next;

    q->cofe=q2->cofe;    q->exp=q2->exp;

    q2=q2->next;

    }

    return p;                    //执行完所有操作后将p的头节点返回。

    }

  • 相关阅读:
    ros 录制
    shell 截取字符串
    Linux 关机
    shell获取字符串长度
    ubuntu14.04 设置开机自启动脚本
    获取本机ip的shell脚本
    shell 杀掉指定进程的服务
    html 绘制矩形轨迹,选中区域
    shell模拟ctrl c停止
    shell 字符串提取数字
  • 原文地址:https://www.cnblogs.com/332hh/p/8865860.html
Copyright © 2020-2023  润新知