- 1、本文档共45页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[理学]DS02_线性表
单链表 (Singly Linked List) 特点 每个元素(表项)由结点(Node)构成。 线性结构 结点可以不连续存储 表可扩充 三、链接存储的线性表插入 第二种情况:在链表中间插入 newnode→link = p→link; p→link = newnode; 第三种情况:在链表末尾插入 newnode→link = p→link; p→link = last = newnode; 带表头结点的单链表 表头结点位于表的最前端,本身不带数据,仅标志表头。 设置表头结点的目的是统一空表与非空表的操作,简化链表操作的实现。 循环链表 (Circular List) 循环链表是单链表的变形。 循环链表最后一个结点的link指针不为 0 (NULL),而是指向了表的前端。 为简化操作,在循环链表中往往加入表头结点。 循环链表的特点是:只要知道表中某一结点的地址,就可搜寻到所有其他结点的地址。 循环链表的示例 带表头结点的循环链表 用循环链表求解约瑟夫问题 约瑟夫问题的提法 n 个人围成一个圆圈,首先第2个人从1开始一个人一个人顺时针报数, 报到第m个人,令其出列。然后再从下一个人开始,从1顺时针报数,报到第m个人,再令其出列,…,如此下去, 直到圆圈中只剩一个人为止。此人即为优胜者。 例如 n = 3 m = 8 例如 n = 3 m = 8 多项式的链接存储及其相加 在多项式的链表表示中每个结点包含两个数据成员coef和exp,一个链接指针link,共三个域。 优点是: 多项式的项数可以动态地增长,不存在存储溢出问题。 插入、删除方便,不移动元素。 非空表 空表 在带表头结点的单链表 第一个结点前插入新结点 newnode→link = p→link; if ( p→link ==NULL ) last = newnode; p→link = newnode; q = p→link; p→link = q→link; delete q; if ( p→link == NULL ) last = p; 从带表头结点的单链表中删除第一个结点 2.4 线性表的应用举例:一、一元多项式的线性表示 一般的n次多项式A(x)按降幂排列,记为:A(x)=anxn+ an-1xn-1+….+ a1x1 +a0,当an≠0j时称A(x)为n阶多项式。 在数据结构中,一个n阶多项式可用一个线性表A表示:A=( an, an-1 , an-2,…., a1, a0 ) 由于多项式中系数不为零的很少,例如: A(x)=8x3000+ 3为了节约存储空间,应用中只需将多项式中不为零的系数与对应的幂次数用两个数据项进行描述,并表示成线性表,则有: A=(( am, em), ( am-1, em-1),...,( a1, e1),( a0, e0)) 二、多项式的加法: 一元多项加法运算原则:两个多项式中所有指数相同的项对应系数相加,若和不为零,则构成“和多项式”中的一项,而所有指数不相同的那些项,均应复制到“和多项式中”。 多项式加法的算法描述:设A、B分别表示两个线性表,A和B相加的结果构成线性表C,其操作步骤如下:⑴线性表C置空;⑵各取线性表A和B的第一个元素分别作为各自线性表当前处理的元素⑶比较当前处理的两个元素的指数值,若指数相等且它们相加后的系数和不为零,则把系数和与指数值构成一个数据元素加到线性表C中,各取A和B的下一个元素进行处理,若指数不等,则把指数大的数据元素追加到C中,再取该元素所在表的下一元素,另一表的当前处理元素不变;⑷重复步骤 2.4.2 多项式加法的顺序存储实现方法一、数据元素的定义: # define MAXN 100 typedef struct term{ float coef; int exp; }TERM;TERM poly[MAXN]; A(x) =4x80 + 7x60 +9x5+5 B(x) =2x80 - 7x60 +3x12 例:多项式顺序存储的相加 A(x) =4x80 + 7x60 +9x5+5 B(x) =2x80 - 7x60 +3x12 两多项式系数与指数在结构数组poly中的存储表示为 …. 12 60 80 0 5 60 80 …. 3 -7 2 5 9 7 4 0
文档评论(0)