数据结构实验报告—链表及其多项式相加.docVIP

  • 977
  • 0
  • 约5.76千字
  • 约 7页
  • 2017-05-18 发布于江西
  • 举报

数据结构实验报告—链表及其多项式相加.doc

数据结构实验报告—链表及其多项式相加

数据结构实验报告——链表及其多项式相加 一、实验目的 1.了解线性表的链式存储结构,熟练掌握链表。 2.了解作为链表的多项式存贮方式。 3.熟悉掌握多项式加法的算法。 二、实验原理 Ⅰ.算法分析与设计 对于一个一元多项式构成的线性空间,其系数、次数向量构成的线性空间,有如下关系: 是一个一一映射,即由p唯一确定。 基于此,利用单链表的数据域存取系数向量p和对应的次数,不同的多项式对应不同的单链表,从而多项式间的加减运算等价于对单链表的相应操作。这样便可以很方便的对稀疏多项式进行操作而节省大量空间。下面简单概括对单链表的操作。 需要说明的是本实验中,对每个单链表赋予了头结点。 假设多项式A=,多项式B=,其中、均为非零常数。 则其对应的单链表、的存取结构图如下: 因此多项式A、B相加减操作等价于两链表根据下面原则合并操作: 1.对次数相同的结点,对其系数相加减,若操作后系数为0,则删除改次数对应的结点。 2.次数较低的结点在次数较高的结点前。 3.按照上述1,2原则,将结点依次连接组成链表Lc。 因此链表Lc对应的多项式即为所求。 Ⅱ.算法伪代码描述 该实验中的各函数及伪代码如下: 1.定义结构体,将多项式模型转化为能被计算机描述的模型 结构体{ 次数expn; 系数ceof; next指针} 2.链表的建立与初始化 LinkList Create_List(int n); 逆序输入n个有效结点。 3.排序函数实现对链表中多项式次数对应的结点排序 LinkList SortPoly(LinkList w); 通过两个指针Pa、Pb控制 Pa=第一个位置 While(Pa指向内容不空) {初始Pb=当前Pa所指下一个元素位置 While(Pb指向内容不空) {if(Pb指向结点的次数Pb指向结点的次数) 交换Pa和Pb所指向结点的次数和系数,即交换数据域; Pb指向下一个位置; } Pa指向下一个位置; } 返回心得链表w 4.次数高低比较函数 int cmp(a,b); //当a结点的次数大于b结点的次数,返回1,相当返回0,否则返回-1 5.连个多项式相加函数 LinkList AddPoly(LinkList A,LinkList B); 返回一个多项式C 算法类似于两个链表的合并 6.打印多项式 void Print_List(LinkList L); 7.主函数 void main (void); 三、C源程序代码 //第一次实验:用单链表的存储模式编写程序实现两个一元多项式的相加 //written by Jie Dai //2008-11-2 #includestdio.h #includestdlib.h #includemalloc.h ///////////////////////////////////////////////////////////////////////// //结构体 typedef struct LNode { float ceof;//系数 int expn;//次数 struct LNode *next; } LNode,*LinkList; ///////////////////////////////////////////////////////////////////////// //创建多项式链表 //逆序输入多项式! LinkList Create_List(int n) //n为链表的长度 { LinkList L; LinkList pointer; int b,i; float a; L=(LinkList)malloc(sizeof(LNode)); //申请一个结点 if(!L) exit(0); L-next=NULL; //头结点 for(i=n;i0;--i) { pointer=(LinkList)malloc(sizeof(LNode)); if(!pointer) exit(0); print

文档评论(0)

1亿VIP精品文档

相关文档