- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二章线性表-链表
第2章 线性表 本次课教学内容说明 2.3.1 链接存储的概念 2.3.2 线性表的链接存储 2.3.2 线性表的链接存储 2.3.2 线性表的链接存储 2.3.3 单链表上的简单操作 2.3.4 单链表中结点类型 后面再讨论 2.4 线性表操作在单链表上的实现 2.4 线性表操作在单链表上的实现 2.4 线性表操作在单链表上的实现 思 考 题 (2)在单链表的尾部插入结点建立单链表 头插入建立单链表简单,但读入的数据元素的顺序与生成的链表中元素的顺序是相反的,若希望次序一致,则用尾插入的方法。因为每次是将新结点插入到链表的尾部,所以需加入一个指针 r 用来始终指向链表中的尾结点,以便能够将新结点插入到链表的尾部,如图2.11展现了在链表的尾部插入结点建立链表的过程 。 * * 2.1 线性表的定义和操作 2.2线性表的顺序存储结构及其操作算法 2.3 线性表的链接存储结构 2.4 线性表操作在单链表上的实现 本课主题: 线性表的链接存储结构表示与操作实现 教学目的: 掌握线性链表、单链表、表示及实现方法 教学重点: 线性链表之单链表的表示及实现方法 教学难点: 线性链表的概念 在链式存储中,每个存储结点不仅包含有所存元素本身的信息(称之为数据域),而且包含有元素之间逻辑关系的信息,即前驱结点包含有后继结点的地址信息,这称为指针域,这样可以通过前驱结点的指针域方便地找到后继结点的位置,提高数据查找速度。 一般地,每个结点有一个或多个这样的指针域。若一个结点中的某个指针域不指向任何结点,则仅它的值为空,用常量NULL表示。 data p1 p2 … pm data p p1 data p2 单链表? 双向链表? 线性表L=(a1,a2,……,an)的单链表示意图(不带头结点的) : 线性表L=(a1,a2,……,an)的单链表存储结构(带头结点的): 线性表L=(a1,a2,……,an)的多链表的结构形式——一个双向链表结构示例图 线性表的双向链表存储结构中,有什么特征呢? 与单链表比较呢? 插入操作 删除操作 图2-8 从单链表中删除结点的示意图 2.3.4 单链表中结点类型的定义 struct sNode { ElemType data; struct sNode * next; }; data next 单链表的结点结构示例图 关于指针变量和结构体类型变量的单元空间大小问题 struct snode { int data; struct snode *next; }; main() { struct snode a; printf(%o,%d,a,sizeof(a));} 构建单链表的简单例子(p.34-35) 如何建立一个具有n个结点的单链表呢? 2.3.5 双向链表中的结点类型和插入与删除操作 说明:每一个单链表(不带头结点)都有一个表头指针,从而表头指针代表了一个单链表或链表 1 初始化操作 void InitList(struct sNode** HL) { *HL=NULL; } 其实初始化操作就是设置一个struct sNode 类型的空值指针变量。 如 struct sNode *p; InitList(p)就是使得p=NULL. 可不可以将操作函数写成 void InitList(struct sNode* HL) { HL=NULL; } ? 2 清除线性表L中的所有元素,使之成为一个空表 void ClearList(struct sNode **HL) { struct sNode *cp,*np; cp=*HL; while(cp!=NULL) { np=cp-next; free(cp); cp=np; } *HL=NULL; } 3 返回线性表L的长度,即单链表的长度 int SizeList(struct sNode *HL) { int i=0; while(HL!=NULL) { i++; HL=HL-nxet; } return i; } 类似的算法操作还有P.42的算法6:遍历一个单链表 5 返回单链表中第pos个结点中的元素,若pos超出范围,则停止程序运行 ElemType GetElem(struct sNode* HL, int pos) { int i=0; /*统计已遍历的结点数*/ if(pos1) { printf(pos值非法,退出运行!\n
文档评论(0)