网站大量收购闲置独家精品文档,联系QQ:2885784924

电子科技大学软件技术基础课件 链表.ppt

电子科技大学软件技术基础课件 链表.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
链接存储的线性表 1.2、 链接存储的线性表(链表)的定义 1.2.1、 链表的引入 数组结构的缺点: 1、在插入、删除时要移动大量的节点 2、表的大小固定。 预先在申明数组时指定,无法更改 原因: 存放的连续性 突破 离散存放 用指针来表示元素之间的关系。 链接存储的线性表 用链表实现线性表(非连续存储) 链表的定义 1.2.2 链表的定义 链点 链表的定义 链表 链表的定义 定义 链表的定义 链表组织: 链表的基本操作 1.2.3 链表的基本操作 访问 插入 删除 链表的基本操作 访问操作 问题描述:访问链表的第i个节点 问题分析: 输入:链表,i 输出:链点——指向链点的指针 算法实现分析: 访问操作 注意 插入操作 链表插入操作 问题描述: 在元素ai前插入新的元素new_node ; 问题分析: 输入:链表,location,x 输出:插入新元素后的链表。 算法实现分析 插入操作 插入操作 插入操作 插入操作 插入操作 插入操作 插入操作 表首插入 插入操作 表尾插入 插入操作 从插入算法中对链表操作的体会 1、链表操作往往从表头开始,逐个找到需要的链点 2、链表操作的有向性 不能回退; 3、链表指针小心使用,谨防丢失。 4、插入过程没有进行链点内容进行搬移。 链表的创建 链表的创建 删除操作 链表的删除操作 问题描述:删除元素ai ; 问题分析: 输入:链表,location 输出:删除元素后的链表。 算法实现分析 删除操作 删除操作 删除操作 注意: 对删除链点的处理 往往需要要free( ) 链表的特点 1.2.4 链表的特点 1、操作的顺序性 有平均N/2次查找过程。 2、离散存放 不受链表大小限制 不进行链点内容的搬移 查找操作:数组效率优于链表 插入、删除操作:链表效率优于数组 作业 教材70页第9题、第10题 段景山 * * 段景山 软件技术基础 制作 主讲 段景山 段景山 线性结构 线性表元素:a1、a2、a3、a4.... 链表链点 线性关系: a1 a2 a3 a4 指针域,指针关系 data link 元素域 链接域 元素域(数据元素域):存放一个数据元素。 链接域(关系域):存放指向下一个元素的指针 ——元素间的关系。 元素域 + 链接域 = 结点(链点) a1 a2 an …… 由链点及链点相互间的链接构成 head 链表头 链表尾 链表长度(节点数目) tail length typedef struct node_type{ elemtype data; struct node_type * next; }node_type ; typedef struct list_type{ node_type *head; node_type *tail; int length; }list_type; 链点的定义 链表的定义 data next 元素值的类型,如: int 整形 char 字符型 long 长整形 …… list_type *list; list-head = a1; a1-next = a2; a2-next = a3; …… an-next = NULL list-tail = an; list-length = n; a1 a2 an …… head tail NULL,表示指针的值为“空”,即指针指向空处 a1 a2 an …… head tail 只能从链表头开始,一个一个“数”下去,直到第i个。 temp temp temp node_type *get_node( list, i ){ } while(counter i p != NULL){ counter = counter +1; p = p - next; } int counter ; node_type * p; return p; if( p = = NULL) return NULL; p = list-head; counter = 1; a1 next ai ai+1 an p a2 逐个“数”的动作 counter: 1 2 3 设i = 3 当in时算法结果怎样? 思考 1、p = p-next ; 沿链表前进 2、循环结束条件 counter = = i 或 node = = NULL counter list-length 思考 如果希望获得值为x的元素,如何实现? while( p-data == x p != NULL) a1 ai an head tail ai-1 ... ... anew a1 ai an head tail ai-1 ... ... anew 两个步骤: ai-1-next =

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档