- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单链表-编程达人
1.线性表的链式存储结构 2.单链表的读取 3.单链表的插入 4.单链表的删除 5.单链表的整表创建 6.单链表的整表删除 7.单链表与顺序链表存储结构优缺点 昆山爱达人信息技术有限公司 QQ:254830010 本节内容 定义 链式存储:用一组任意的存储单元存储线性表中的数据元素。 线性链表:用这种方法存储的线性表简称线性链表。 特点:结点在存储器中的位置是随意的,即在逻辑上相邻的数据元素在物理上不一定相邻。 实现:为了正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其直接后继结点的地址(或位置),称为指针或链,这两部分组成了链表中的结点结构 数据域:存放数据元素信息的域 指针域:存放直接后继的域 昆山爱达人信息技术有限公司 QQ:254830010 线性表的链式存储结构 图形表示 昆山爱达人信息技术有限公司 QQ:254830010 线性表的链式存储结构 单链表 每一个结点只包含一个指针域的链表称为单链表 第一个结点:存储线性表中第一个数据元素a1的结点 头指针:指向链表中第一个结点 头结点:在链表的第一个结点前附设的一个结点;数据域内只放空表标志和表长等信息,不计入表长度。 昆山爱达人信息技术有限公司 QQ:254830010 线性表的链式存储结构 单链表 示意图如下: 昆山爱达人信息技术有限公司 QQ:254830010 线性表的链式存储结构 不带头结点 带头结点 头指针与头节点的异同 头指针是指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针 头指针具有标识作用,所以常用头指针冠以链表的名字。 无论链表是否为空,头指针均要存在。头指针是链表的必要元素。 头结点是未来操作的统一和方便而设立的,放在第一元素的结点之前,其数据域一般无意义(也可以放链表的长度) 有了头结点,对在第一元素结点前插入结点和删除第一结点,其操作域其它结点的操作就统一了 头结点不一定是链表必须要素。 昆山爱达人信息技术有限公司 QQ:254830010 线性表的链式存储结构 单链表存储结构代码描述 typedef struct Node { ElemType data; // 数据域 struct Node *next; // 指针域 }Node; typedef struct Node *LinkList; /* 定义LinkList */ 昆山爱达人信息技术有限公司 QQ:254830010 线性表的链式存储结构 思路 获取链表第i个元素的思路: 1.声明一个指针P指向链表第一个结点,初始化j从1开始。 2.当ji时,就遍历链表,让p的指针向后移动,不断指向下一个结点,j累加1; 3.若到链表末尾p为空,则说明第i个结点不存在 4.否则查找成功。 昆山爱达人信息技术有限公司 QQ:254830010 单链表的读取 代码 /* 操作结果:用e返回L中第i个数据元素的值 */ Status GetElem(LinkList L,int i,ElemType *e) { int j; LinkList p; /* 声明一指针p */ p = L-next; /* 让p指向链表L的第一个结点 */ j = 1; /* j为计数器 */ 昆山爱达人信息技术有限公司 QQ:254830010 单链表的读取 代码 /* 操作结果:用e返回L中第i个数据元素的值 */ while (p ji) /* p不为空或者计数器j还没有等于i时,循环继续 */ { p = p-next; /* 让p指向下一个结点 */ ++j; } if ( !p || ji ) return ERROR; /* 第i个元素不存在 */ *e = p-data; /* 取第i个元素的数据 */ return OK; } 昆山爱达人信息技术有限公司 QQ:254830010 单链表的读取 思路 昆山爱达人信息技术有限公司 QQ:254830010 单链表的插入 核心步骤: 1.s-next = p-next; 2.p-next = s; 代码 /* 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 */ Status ListInsert(LinkList *L,int i,ElemType e) { int j; LinkList p,s; p = *L; j = 1; while (p j i) /* 寻找第i-1个结点 */ { p = p-next; ++j; } 昆山爱达人信息技术有限公司 QQ:254830010 单链表的插入 代码
文档评论(0)