下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、资料收集于网络如有侵权请联系网站删除谢谢链表1 定义链表( Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度, 比另一种线性表顺序表快得多, 但是查找一个节点或者访问特定编号的节点则需要O(n)的时间, 而顺序表相应的时间复杂度分别是O(logn)和 O(1)。使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结
2、点的指针域,空间开销比较大。在计算机科学中,链表作为一种基础的数据结构可以用来生成其它类型的数据结构。链表通常由一连串节点组成,每个节点包含任意的实例数据( data fields)和一或两个用来指向明上一个或下一个节点的位置的链接("links" )。链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序, 数据的访问往往要在不同的排列顺序中转换。而链表是一种自我指示数据类型,因为它包含指向另一个相同类型的数据的指针(链接)。链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。链表有很多种不同的类型:单向链表,双向链表以及循环链
3、表。2 结构2.1单向链表链表中最简单的一种是单向链表, 它包含两个域, 一个信息域和一个指针域。 这个链接指向列表中的下一个节点,而最后一个节点则指向一个空值。一个单向链表的节点被分成两个部分。第一个部分保存或者显示关于节点的信息,第二个部分存储下一个节点的地址。单向链表只可向一个方向遍历。链表最基本的结构是在每个节点保存数据和到下一个节点的地址,在最后一个节点保存一个特殊的结束标记,另外在一个固定的位置保存指向第一个节点的指针,有的时候也会同时储存指向最后一个节点的指针。一般查找一个节点的时候需要从第一个节点开始每次访问下一个节点,一直访问到需要的位置。2.2双向链表每个节点有两个连接:一
4、个指向前一个节点,(当此“连接”为第一个“连接”时,指向空值或者空列表) ;而另一个指向下一个节点, (当此“连接”为最后一个“连接”时,指向空值或者空列表)双向链表可以从任何一个节点访问前一个节点, 当然也可以访问后一个节点, 以至整个链表。一般是在需要大批量的另外储存数据在链表中的位置的时候用。2.3循环链表在一个循环链表中 , 首节点和末节点被连接在一起。 这种方式在单向和双向链表中皆可实现。要转换一个循环链表, 你开始于任意一个节点然后沿着列表的任一方向直到返回开始的节点。指向整个列表的指针可以被称作访问指针。精品文档资料收集于网络如有侵权请联系网站删除谢谢循环链表中第一个节点之前就是
5、最后一个节点,反之亦然。3 链表常见用途常用于组织删除、检索较少,而添加、遍历较多的数据。4 链表和数组的区别1数组在内存中是逐个存放的,也就是说倘若数组的第一个元素在地址A,则数组第二个元素就在地址 A+1。而链表则不是,链表每个节点没有相对固定的位置关系。某个节点在地址 A 其后的节点不一定是 A+1,而在内存的其他空闲区域,呈现一种随机的状态。2数组一旦显式的被申明后,其大小就固定了,不能动态进行扩充。而链表则可以,可以动态生成节点并且添加到已有的链表中。3链表灵活,但是空间和时间额外耗费较大;数组大小固定,元素位置固定,但是操作不灵活, 且容易浪费空间,但是时间耗费较小, 尤其是元素变
6、化不大的时候效率很高。双向链表比单向的更灵活,但是空间耗费也更大。4从内存存储来看, (静态 )数组从栈中分配空间 , 对于程序员方便快速 ,但是自由度小;链表从堆中分配空间 , 自由度大但是申请管理比较麻烦。精品文档资料收集于网络如有侵权请联系网站删除谢谢附录:(链表的部分常见操作 )1 单向链表/* 线性表的单链表存储结构 */typedefstructLNode ElemType data;structLNode* next ; LNode ,* LinkList;/* 带有头结点的单链表的基本操作 (12个)*/voidInitList( LinkList* L ) /* 操作结果:构
7、造一个空的线性表 L */* L =( LinkList) malloc( sizeof( structLNode ) ; /* 产生头结点,并使 L 指向此头结点 */if( !*L) /*存储分配失败 */exit( OVERFLOW) ;( * L) -> next=NULL; /*指针域为空 */voidDestroyList( LinkList* L) /*初始條件:线性表 L 已存在。操作结果:销毁线性表 L */LinkList q;while(*L) q =( * L) -> next ;free(*L);* L=q;voidClearList( LinkList
8、L)/*不改变 L */ /* 初始条件:线性表 L 已存在。操作结果:将 L 重置为空表 */LinkList p, q;p =L-> next ;/* p指向第一个结点 */while( p)/*没到表尾 */ q =p-> next ; free ( p) ;p =q;L -> next =NULL;/*头结点指针域为空 */Status ListEmpty( LinkList L) /* 初始条件:线性表 L 已存在。操作结果:若 L 为空表,则返回 TRUE,否则返回 FALSE */returnL -> next= NULL ;精品文档资料收集于网络如有侵权
9、请联系网站删除谢谢intListLength( LinkList L) /* 初始条件:线性表 L 已存在。操作结果:返回 L 中数据元素个数 */ int i =0;LinkList p=L-> next ; /* p 指向第一个结点 */while ( p)/* 没到表尾 */i +;p =p-> next ;return i ;Status GetElem( LinkList L, inti, ElemType* e) /* L 为带头结点的单链表的头指针。当第 i 个元素存在时,其值赋给 e 并返回OK,否则返回 ERROR */intj=1;/* j为计数器 */Link
10、List p=L-> next ;/* p指向第一个结点 */while( p&&j< i)/*顺指针向后查找,直到 p 指向第 i 个元素或 p 为空*/p=p-> next ;j+;if( ! p|j >i )/*第 i 个元素不存在 */returnERROR;* e =p-> data ;/*取第 i 个元素 */returnOK ;intLocateElem( LinkList L, ElemTypee, Status( * compare )( ElemType , ElemType )/*初始条件 :线性表 L 已存在, compar
11、e()是数据元素判定函数 ( 满足为 1 ,否则为 0) */*操作结果 :返回 L 中第 1 个与 e 满足关系 compare()的数据元素的位序。*/*若这样的数据元素不存在,则返回值为0 */inti=0;LinkList p=L-> next ;while( p)i+;if( compare ( p-> data , e)/*找到这样的数据元素 */精品文档资料收集于网络如有侵权请联系网站删除谢谢returni;p =p-> next ;return0 ;Status PriorElem( LinkList L, ElemType cur_e, ElemType*
12、pre_e )/*初始条件 :线性表 L 已存在 */*操作结果 :若 cur_e是 L 的数据元素,且不是第一个,则用 pre_e返回它的前驱, */*返回 OK;否则操作失败, pre_e无定义,返回 INFEASIBLE*/LinkList q, p=L -> next ;/* p指向第一个结点 */while( p-> next )/* p所指结点有后继 */q=p-> next ;/* q为 p 的后继 */if( q-> data =cur_e)* pre_e =p-> data ; return OK ;p=q;/* p向后移 */returnINFEASIBLE;Status NextElem( LinkList L, ElemType cur_e, ElemType* next_e) /* 初始条件:线性表 L 已存在 */* 操作结果:若 cur_e 是 L 的数据元素,且不是最后一个,则用 next_e 返回它的后继, */*返回 OK; 否则操作失败, next_e无定
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年十五五数据流通交易核心攻关与新质生产力投资主线
- 海南省省直辖县2025-2026学年初三4月仿真训练生物试题试卷含解析
- 2026年浦东新区国际航运中心核心区建设专项资金实施细则
- 2026年全国首个嵌入式模块化医院项目平移钢构模块技术解析
- 2026年分子特征环境安全食用安全评价标准技术要求
- 2026年加拿大北极超视距雷达项目基础设施交付案例
- 2026年工业巡检无人机细分领域需求分析
- 供应商物流配送合作协议
- 文化传媒行业创意总监面试全攻略
- 汽车零部件研发工程师面试技巧
- (正式版)JBT 106-2024 阀门的标志和涂装
- 《人类行为与社会环境》课件
- (高清版)DZT 0205-1999 地面γ能谱测量技术规程
- 中国石油天然气集团公司井下作业工程术语
- 标志桩安装质量评定表
- 企业通用全面预算表格模板
- 装配式支吊架试验方法标准
- 服装设计的程序灵感来源思维方式
- 初中数学教师高级职称考试试题(含解析)
- JJF 1015-2014计量器具型式评价通用规范
- 教育与社会发展试题
评论
0/150
提交评论