软技术基础--多种链表.ppt

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * 段景山 段景山 软件技术基础 制作 主讲 段景山 段景山 线性结构 多种形式的链表 链表的典型形态 请用5分钟快速阅读教材第9页至第12页。回答以下问题: 什么是头结点? 教材中的单链表插入算法与教案中的插入算法有什么大的区别——即头结点有什么用? 链表的典型形态 1.2.5 链表的典型形态 1、单链表 如前所述 2、带头节点的单链表 头节点:是一个特殊的链点, 数据内容无效 链点指针指向链表头 ///// a1 ... 头节点 ai an ... a1 an ... ... ai 头指针 链表的典型形态 带头节点的单链表 几个容易混淆的概念 第一个元素节点、头指针、头节点、链表头 a1 ai+1 an head tail ai-1 ... ... ai ///// a1 ... ai an ... 第一个元素节点、链表头 第一个元素节点 头指针 头节点 head 链表的典型形态 带头节点单链表的操作特点 插入和删除算法不必考虑在表首进行时,需要更改头指针的特殊处理 ///// a1 ... ai an ... head p = head; p-next = p-next-next; while(location 1 p != NULL ){ … } 如果location为1, 表首节点将被删除 p 为什么教材中使用**而教案中没有使用? 链表的定义不同 教材中仅定义了链点,没有定义链表结构,一个链表仅由一个头指针开始 教案中还定义了链表结构 在结构中除了有链表头指针,还有…… typedef struct list_type{ node_type *head; node_type *tail; int length; }list_type; head tail length a1 a2 为什么教材中使用**而教案中没有使用? 教材 void main() { node *head; createsl( head ); …… } void createsl( node **h) { *h = first node; …… } 教案 void main() { list_type list; create_l( list ); …… } void create_l( list_type *l) { l-head = first node; …… } head head head tail length head tail length a1 为什么教材中使用**而教案中没有使用? 本质是一样的:要在调用的子函数中改变头指针的指向 改变指针的指向,即改变指针变量的内容 要改变指针的内容,必须将指针变量的地址传入 教材中是将指针的地址传入--指针的指针 教案中将地址所在的结构的地址传入 其它常用的链表形式 请用1分钟的时间快速阅读教材第12页至15页,回答问题: 链表还有哪些形式,有什么特点? 双向链表 1.3双向链表 特点:每一个链点包含两个指针, 前趋指针 后继指针 a1 …… head tail N a2 N P an P a1 N P P:prior N:next 双向链表 1.3.1双向链表的定义 typedef struct double_link_node_type{ struct double_link_node_type * prior; struct double_link_node_type * next; elemtype data; }dl_node_type ; typedef struct double_link_list_type{ dl_node_type *head; dl_node_type *tail; int length; }dl_list_type; 链点的定义 链表的定义 双向链表插入 1.3.2 双向链表的插入操作 问题描述:在第i个元素前插入新元素 试试小纸片的方法能不能帮助思考 ai-1 N P ai N P anew N P 50 55 a1 61 66 70 61 66 70 50 NULL 44 anew NULL NULL 双向链表插入 1.3.2 双向链表的插入操作 ai-1 N P ai N P 问题描述:在第i个元素前插入新元素 anew N P 1、 anew-next = ai 2、 ai-1 -next = anew 3、 anew-prior = ai-1 4、 ai-prior = anew p anew-next = p; p-prior-next = anew; anew-prior = p-pr

文档评论(0)

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

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

1亿VIP精品文档

相关文档