数据结构-2004-02-02线性表-副本.ppt

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构 第二章 线 性 表 2.1 线性表的定义及操作 2.2 线性表的顺序存储及操作实现 2.3 线性表的链式存储及操作实现 2.4 顺序表与链表的比较 二. 线性表的基本运算 2.2 线性表的顺序存储结构及操作实现 1. 在线性表的第i个位置上插入一个新的数据元素 算法思路: 算法框架: 算法: 时间复杂度分析 时间复杂度的分析 四. 线性表的顺序存储结构的特点 三. 单链表的有关操作 求线性表的长度。 建立一个线性链表。 在线性链表中插入一个新的结点。 从线性链表中删除一个结点。 从线性链表中检索一个结点。 将两个线性链表合并为一个线性链表。 …… 插入过程: 一. 双向链表的构造 二. 双向链表的插入 算法框架 算法 三. 双向链表的删除 算法 思考 q list 3 . 在线性链表中由指针q 指的链结点之后 插入一个数据信息为item 的链结点 被插入链结点 item p p-link = q-link; q-link = p; 算 法 Void InsertLink(struct node *list, struct node *q, char ch ) { p=(struct node *)malloc(sizeof(struct node)); //申请一个新结点 p-data=ch; //将ch 送新结点的数据域 if (list==NULL) { //若原链表为空// list=p; p-link=NULL; } else { //若原链表为非空 p-link=q-link; q-link=p; } } r q ^ list 4. 从非空线性链表中删除q指的链结点 q ^ list 循找q的前趋:r?link(r) r r 修改链域:r-link = q-link 说明:1此时需要释放q所占的空间,free(q)。 2 对于q处于链表头时,需要单独处理。 Void DeleteNode (struct node *list, struct node *q ) { if (q 是头结点) // 当删除链表的第一个结点 // 直接修改 else { //不是头结点 //查找q的直接前趋结点 // 如果查找不成功 // 报告出错 // 否则,证明查找成功,那么修改链域 } free(q); // 释放被删除结点的存储空间 } 算 法框架 Void DeleteNode (struct node *list, struct node *q ) { if (q == list) // 当删除链表的第一个结点 list = q-link; else { r = list; while ( r-link != q r-link != Null) r=r-link; // 移向下一个链结点 // 寻找q结点的直接前驱r if (r-link = Null) { printf(“There is no this node !” ); return; } else r-link = q-link; } free(q); // 释放被删除结点的存储空间 } 算 法 所谓双向链表是

文档评论(0)

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

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

1亿VIP精品文档

相关文档