武汉软件工程职业学院《数据结构讲义》第06讲 线性表的应用.docVIP

武汉软件工程职业学院《数据结构讲义》第06讲 线性表的应用.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1.巩固线性表的概念及操作。 2.了解并熟悉线性表的典型应用——多项式相加。 教学重点: 线性表的概念及操作 教学难点: 多项式相加 授课内容 2.5 线性表的应用—— 一元多项式相加问题 多项式的相加操作是线性表处理的典型例子。在数学上,一个多项式可写成下列形式: P(x)=anxn+an-1x n-1+ … +a1x+a0 其中ai为xi的非零系数。 在多项式相加时,至少有两个或两个以上的多项式同时并存,而且在实现运算的过程中所产生的中间多项式和结果多项式的项数和次数都是难以预料的。因此计算机实现时,可采用单链表来表示。多项式中的每一项为单链表中的一个结点,每个结点包含三个域:系数域、指数域和指针域,其形式如下: 现在设有两个多项式: A(x)=5x9+8x7+3x2-12? B(x)=6x12+10x9 -3x2 它们的链表结构见图2-5-1。 图2-5-1 多项式的单链表结构 多项式相加的运算规则为:两个多项式中所有指数相同的项,对应系数相加,若和不为零,则构成“和多项式”中的一项;所有指数不同的项均复制到“和多项式”中。实现时,可采用另建多项式的方法,也可采用把一个多项式归并到另一个多项式中去的方法。这里介绍后一种方法。 下面是一个完整的C程序,包含三个算法:PolyAdd、Creat_Linkst和Print_Linkst。 核心算法PolyAdd是把分别由pa和pb所指的两个多项式相加,结果为pa所指的多项式。相加时,首先设两个指针变量qa和qb分别从多项式的首项开始扫描(见图2-5-1),比较qa和qb所指结点指数域的值,可能出现下列三种情况之一: (1)qa-exp大于qb-exp,则qa继续向后扫描。 (2)qa-exp等于qb-exp,则将其系数相加。若相加结果不为零,将结果放入qa-coef中,并删除qb所指结点,否则同时删除qa和qb所指结点。然后qa、qb继续向后扫描。 (3)qa-exp小于qb-exp,则将qb所指结点插入qa所指结点之前,然后qa、qb继续向后扫描。 扫描过程一直进行到qa或qb有一个为空为止,然后将有剩余结点的链表接在结果链表上。所得pa指向的链表即为两个多项式之和。 算法 Creat_Linkst是建立表示多项式的单链表。建立链表的过程是一个动态生成的过程,即从“空表”的初始状态起,依次输入数据元素,每输入一个就生成一个新结点并插入到表尾。为了方便新结点的插入,算法中设置一个指针pre使其始终指向当前链表的表尾结点,初始指向pa(见图2-5-1)。 算法Print_Linkst是输出多项式的单链表。 C语言源程序如下: #include stdio.h #include stdlib.h typedef struct polynode { /*结点结构描述*/ int coef; /*系数域*/ int exp ; /*指数域*/ struct polynode *next; /* 指针域*/ }PNode;   PNode *Creat_Linkst ( int n ); void PolyAdd (PNode *pa, PNode *pb ); void Print_Linkst( PNode *H); main() { PNode *HA,*HB; /* 多项式链表的头指针*/ int la,lb; printf(enter la,lb:); scanf(%d,%d,la,lb); /* 输入多项式A和B的项数*/ printf(\ncreat HA\n); HA=Creat_Linkst(la); /*建立多项式A*/ printf(A(x)=); Print_Linkst(HA); /*输出多项式A */ printf(\ncreat HB\n); HB=Creat_Linkst(lb); /*建立多项式B*/ printf(B(x)=); Print_Linkst(HB); /*输出多项式B */ PolyAdd(HA,HB); /*多项式相加*/ printf(\nA(x)+B(x)=); Print_Linkst(HA); /*输出和多项式 */ }   PNode * Creat_Linkst ( int n ) /* 顺序输入n个元素的值,建立带表头结点的单链表 */ { PNode *head,*p,*s; int i; head=( PNode *) malloc(sizeof(PNode )); /* head为表头指针 */ head-next=NULL; /* 先建立一个带表头结点的空表*/ p=head; printf(enter coef,exp:\n); for (i=1; i=n; ++i ) { s=( PNod

文档评论(0)

白领文档(原创) + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档