- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
通信工程学院 第二章 线性表 线性表:由n(n≥0)个a1,a2,…an组成的有限序列。其逻辑结构是线性结构。 线性表上常用的运算 顺序存储的线性表 线性表的顺序分配是指:用一组连续编号的存储单元依次存放各个数据元素。 根据一个数据元素占据m个存储单元,有: LOC(ai)=LOC(a1)+(i-1)×m 用一维数组来实现线性表顺序存储结构 数组元素: a[0]、a[1]、a[2]、a[3] 线性表元素:a1、a2、 a3、 a4.... 顺序表的基本运算 二、插入运算(算法 2.2) 线性表的插入运算是指在线性表的第i个数据元素之前插入一个新的数据元素,使长度为n的线性表 (a1, …, ai-1, ai, …, an)变为长度为n+1的线性表 (a1, …, ai-1, X ,ai, …, an) 插入运算 从ai开始,到an开始向后逐个移动 从an开始,向前的每个元素向后移一格 插入运算 插入运算程序 出错处理 删除运算 三、删除运算(将第i个数据元素删去) 删除运算 从an开始向前逐个元素向前移动 从ai+1开始向后逐个元素向前移动 删除运算 出错处理 顺序存储的线性表 数组顺序存储结构的特点 任意元素获取容易实现,定位简单 存取时间短,存取时间与元素位置无关 元素更动(比如:插入和删除)时的搬移性 需要移动大量的节点,平均N/2次的搬移 线性表的大小在声明数组时固定,无法更改。 ——————因此引入链表形式的存储结构: (离散存放,用指针来表示元素之间的关系) 链式存储的线性表 分配一些任意的存储单元来存储线性表中的数据元素,这些单元可以是连续的,也可以是离散的。这样的存储单元(称为结点)包括两个域:数据域和指针域。 链式存储的线性表 链表的定义 单链表使用注意 链表的基本操作 创建链表 求链表长度 插入链点 删除链点 查找链点 链表的创建(算法2.5/2.6) 尾插法建立单链表算法 求单链表的长度(算法2.7) 插入操作 单链表的特点 1、操作的顺序性 2、离散存放,动态结构 不受链表大小限制 不进行链点内容的搬移 查找操作:数组效率优于链表 插入、删除操作:链表效率优于数组 循环链表 循环链表是指在单链表中最后一个结点的链域值不是NULL,而是指向头结点,整个表形成一环。 特点:是从表中任意结点出发均可以找到表中其它的结点。 操作与单链表基本一致,循环的条件不同: 单链表p或p-next=NULL 循环链表p或p-next=H 循环链表按值查找算法 Lnode *get( Lnode *h, elemtype x) {Lnode *p; p=h-next; while (p!=h x!=p-data) /*循环扫描查找,直到 p 指向头结点 h 或找到x结束*/ p=p-next; return (P); } 双向链表 每一个结点中有两个指针域,其一指向直接后继,另一指向直接前趋的链表叫双向链表。 双向链表的结点描述为: typedef struct dulnode {elemtype data; struct dulnode *next, *prior; }dulnode; 双向链表 线性表的顺序存储和链式存储在操作上的比较: 本节学习要点 1. 了解顺序表、链表的概念、含义、区别。 2. 熟练掌握这两类存储结构的描述方法。 3. 熟练掌握线性表在顺序存储结构上实现基本操作:查找、插入和删除的算法。 4. 熟练掌握在各种链表结构中实现线性表操作的基本方法,能在实际应用中选用适当的链表结构。 5. 能够从时间和空间复杂度的角度综合比较线性表两种存储结构的不同特点及其适用场合。 数组的定义 数组 数组是线性表的一个推广。一维数组是一种顺序表结构,多维数组是一种特殊的线性结构。 数组:由(下标,数值)组成的序对的有限集合。二维数组中的每个元素A [i, j]对应二维空间的一个数值A(i,j),二维数组的每一行、每一列都是一个线性表。 数组的主要操作有: Create 建立 Value 存取元素 Assign 修改元素值 二维数组 次序约定 以行序为主序 以列序为主序 稀疏矩阵的三元组表示法 稀疏矩阵的十字链表表示法 线性表的应用示例 线性表 教材P59习题2.3 上机做习题2.5 链表部分修改—— 创建链表并根据菜单选择需要进行的插入、删除操作 void main() { creat(); while (k) { printf (“1:insert 2:delete 3:end ”); scanf (“%d\n”
原创力文档


文档评论(0)