目录

  • 1 绪论
    • 1.1 数据结构的定义和基本术语
    • 1.2 数据的逻辑结构和存储结构
    • 1.3 算法和算法分析
  • 2 线性表
    • 2.1 线性表的定义及逻辑结构
    • 2.2 顺序存储结构
    • 2.3 链式存储结构
    • 2.4 应用:一元多项式的表示和相加
  • 3 栈和队列
    • 3.1 栈
    • 3.2 队列
  • 4 串
    • 4.1 资源
  • 5 数组
    • 5.1 数组
    • 5.2 广义表
  • 6 树和二叉树
    • 6.1 树的定义和基本术语
    • 6.2 二叉树
    • 6.3 遍历二叉树和线索二叉树
    • 6.4 树和森林
    • 6.5 哈夫曼树及其应用
  • 7 图
    • 7.1 图的定义和基本术语
    • 7.2 图的存储结构
    • 7.3 图的遍历
    • 7.4 图的应用
  • 8 查找
    • 8.1 查找的基本概念
    • 8.2 基于线性表的查找
    • 8.3 基于树的查找
    • 8.4 哈希表
  • 9 内部排序
    • 9.1 排序的定义和种类
    • 9.2 插入排序
    • 9.3 B-树和B+树
    • 9.4 交换排序
    • 9.5 选择排序
    • 9.6 归并排序和基数排序
  • 10 实验
    • 10.1 目的要求
      • 10.1.1 参考代码
应用:一元多项式的表示和相加
  • 1
  • 2

一元多项式 ,在计算机中,可以用一个线性表来表示: P = (p0, p1, …pn)

但是对于形如 S(x) = 1 + 3x10000 – 2x20000 的多项式,上述表示方法就不合适 

一般情况下的一元稀疏多项式可写成 Pn(x) = p1xe1 + p2xe2 +  + pmxem其中,pi 是指数为ei 的项的非零系数,0≤ e1 < e2 <  < em = n。可以下列线性表表示:

 

((p1, e1, (p2, e2), , (pm,em)

 

例如: P999(x) = 7x3 - 2x12 - 8x999 可用线性表( (7, 3), (-2, 12), (-8, 999) ) 表示。

 

显然,实现稀疏的一元多项式,应该采用链式存储结构。可以利用在2.3.1中链表的存储结构,将ElemType类型定义成多项式的系数和指数就可以了。

 

typedef  struct           //一元多项式结点数据域的类型

{

    float coef;           //系数

    int  exp;            //指数

} ElemType;

typedef  struct node

{

    ElemType data;        //数据域 

    struct node *next;     //链指针域指向后继

 }*Link;

【算法一元多项式相加

void addploy(Link Pa,Link Pb,Link,*Pc)       //A,B为带头结点的链表

{

*Pc=P=Pa;qa=Pa->next;qb=Pb->next;

while((qa&&qb)&&(!qa->next)&&(!qb->next))    //循环条件A,B链表都没结束

 {  a=qa->exp;b=qb->exp;

switch(compare(a,b))                //比较两个多项式中各个结点的幂的大小

{ case -1:                         //A链表中结点的指数小,链入结果中

P->next=qa; P=qa;

qa=qa->next; break;

      case 0:                          //AB链表中结点的指数相等

              qa->coef + =qb->coef;     //将两个系数相加

              if (qa->coef==0)

                    {  u=qa; v=qb;       //系数相加为零

                    qa=qa->next;qb=qb->next;

free(u,v);}        //释放结点

else {  P->next=qa;P=qa;v=qb;

qa=qa->next;qb=qb->next;

                    free(v);}

             break;

      case 1:                         //B链表中结点的指数小,链入结果中

P->next=qb; P=qb;

qb=qb->next; break;

        }

     }

 free(Pb)                              //释放头结点

 }