zoukankan      html  css  js  c++  java
  • 数据结构——链表实现一元多项式的表示和加法

    一元多项式的链式结构:

    Typedef  struct  Lnode
    {
        float coef;///系数
        int  expn;///指数
        struct  Lnode  *next;
    }  PLnode, *PLinkList;


    基本思想:

    (1)若pa->expn小于pb->expn,则pa继续向前扫描;
      (2)若pa->expn等于pb->expn,将其系数相加,若相加结果不为0,将结果放入pa->coef中,并删除pb所指的结点,否则同时删除pa和pb所指的结点,然后pa和pb继续向前扫描;

    (3)若pa->expn大于pb->expn,则将pb所指的结点插入pa所指的结点之前,然后pb继续向前扫描;
    (4)重复上述过程直到pa或pb有一个为空为止,最后将剩余结点的链表接在结果链表上。

    PLinklist Add(PLinklist pa,PLinklist pb)
    {
        PLinklist p,q,r,s; /*两个多项式相加*/
        int cmp,x;
        p=pa->next;  /*指向pa的第一个元素*/
        q=pb->next; /*指向pb的第一个元素*/
        s=pa; /*s作为P的跟踪指针*/
        r=pb;/*r作为q的跟踪指针*/
        while(p!=NULL&&q!=NULL)
        {
            if(p->exp<q->exp)
            {
                cmp=-1;
            }
            else if(p->exp>q->exp)
            {
                cmp=1;
            }
            else///指数相等
            {
                cmp=0;
            }
            switch(cmp)
            {
            /*根据指数的比较情况进行不同的处理*/
            case -1:
            {
                s=p;
                p=p->next;///pa表指针后移,没有插入
                break;
            }
            case 0:
            {
                x=p->coef+q->coef;///指数相等,系数相加
                if(x!=0) /*系数不为0*/
                {
                    p->coef=x;
                    s=p;
                    p=p->next;
                }/*if*/
                else///系数为0,在pa表中删除该结点
                {
                    s->next=p->next;
                    free(p);
                    p=s->next;
                }/*else*/
                r->next=q->next;///在pb表中删除该结点
                free(q);
                q=r->next;
                break;
                } /*case0*/
            case 1:
            {
                q->next=s->next;
                s->next=q;///将pb表中的q插入到pa表中的s的后面
                r->next=q->next;
                s=q;
                q=r->next;
                break;
                } /*case1*/
            }/*switch*/
        }/*while*/
        if(q!=NULL)///当pb连表还有剩余时接入到pa连表的尾部
        {
            s->next=q;
        }
        free(pb);
        return pa;
    }/* Add*/
  • 相关阅读:
    订单超时30分钟自动取消
    获取网络时间
    aspose.words通过域导出word文件
    Excel导入时,解析日期类型单元格的办法。
    ALTER TABLE 报1062
    mysql快速生成测试数据
    GP 源码编译安装
    Kafka 集群群起/关闭脚本
    Zookeeper 常用命令
    OGG 同步无主键表且目标表多一个隐藏字段
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/10132260.html
Copyright © 2011-2022 走看看