SUN数据结构第2节线性表(第3讲).ppt

  1. 1、本文档共70页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.1 线性表的逻辑结构 2.1 线性表的逻辑结构 线性表举例 线性表举例 线性表的基本运算 2.2线性表的顺序存储及运算实现 线性表的顺序存储结构 线性表的顺序存储结构 线性表的顺序存储结构 顺序表上基本运算的实现 顺序表上基本运算的实现 顺序表上基本运算的实现 顺序表上基本运算的实现 顺序表上基本运算的实现 线性表在顺序存储结构下的运算实现 ——顺序表的插入算法InsertList(L,i,x)的实现 线性表在顺序存储结构下的运算实现 ——顺序表的插入算法InsertList(L,i,x)的实现 void InsertList(SeqList *L,int i,Datatype x) { if (i1 || iL-length+1) { printf(“Error!”) ; //插入位置出错 exit(1); } if(L-length==MaxLen) { printf(“overflow!”) ;   //表已满 exit(1); } for(j=L-length-1;j=i-1;j--) L-data[j+1]=L-data[j]; //数据元素后移 L-data[i-1]=x; //插入x L-length++; //表长度加1 } 线性表在顺序存储结构下的运算实现 ——顺序表的删除运算DeleteList(L,i)的实现 线性表在顺序存储结构下的运算实现 ——顺序表的删除运算DeleteList(L,i)的实现 链表的分类 单链表:只设置一个指向后继结点地址的指针域; 循环链表:链表首尾相接构成一个环状结构; 双向链表:单链表中增加一个指向前驱的指针。 本章小结 【例2-3】 利用线性表的基本运算,编写将线性表A和B中公共元素生成线性表C的算法。 void commelem(SeqList *A, SeqList *B, SeqList *C) { int i,k,j=1; DataType x; Initlist(C); for(i=1;i=Getlen(A);i++) { x=Getelem(A,i); //依次获取线性表A中的元素,存放在x中 k=Locate(B,x); //在线性表B中查找x if(kO){ InsetrList(C,j,x);j++; } //若在线性表B中找到了,将其插入到C中 } } 线性表的顺序存储结构的特点 优点:顺序表中的任意数据元素的存储地址可由公式直接导出,因此顺序表可以随机存取其中的任意元素。 不足: (1)需预先分配相应的存储空间 ——预分配空间过小,存储空间不便于扩充;预分配空间过大,容易造成空间浪费。 (2)插入与删除运算的效率很低,插入、删除操作时需移动大量数据。 课后作业: 创建顺序表,在顺序表的第i个位置插入一个元素。 例:创建线性表20 56 89 45 67 在该线性表的第3个位置插入一个元素97 程序运行结果能够输出20 56 97 89 45 67 2.3 线性表的链式存储及运算实现 线性表的链式存储结构就是用一组任意的存储单元(可以是不连续的)存储线性表的数据元素。 采用链式存储结构的表示的线性表简称链表。 链式存储方式可用于表示线性结构,也可用于表示非线性结构。 由于线性表中各元素间存在着线性关系,每一个元素有一个直接前驱和一个直接后继。 用链式存储结构表示线性表中的一个元素时至少需要两部分信息,一部分用于存放数据元素值,称为数据域;另一部分用于存放直接前驱或直接后继结点的地址(指针),称为指针域,称这种存储单元为结点。 链表的存储结构 链表的存储结构 数据域(存储数据元素本身信息 ) + 指针域 (指示后继元素存储位置) = 结点 (表示数据元素的存储映象) next data 结点的结构如下所示: 以“结点的序列”表示线性表 ?? 称作链表 头结点的作用:带头结点的单链表使得对“第一个结点”的插入删除操作与其他结点一致,且使“空表”与“非空表”的处理一致。 后述单链表一般都指带头结点的单链表。 由于链表中第一个结点没有直接前驱,所以必须设置一个头指针head存储第一个结点的地址。最后一个结点没有直接后继,其指针域应为空指针,C语言用NULL或0表示,在图中表示为“∧”。 不带头结点的单链表 带头结点的单链表 由于链表中第一个结点没有直接前驱,所以必须设置一个头指针head存储第一

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档