您的位置:首页 > 理论基础 > 数据结构算法

数据结构之线性表 -- 链表(总括)

2017-09-29 19:14 253 查看
今天来总结一下链表。

 首先,

 
什么是链表?

    就是采去链式存储结构的线性表,所谓链式存储就好比火车的车厢一样,一节一节的连接起来,成为一个线性表。这种方式采用动态存储分配方式,即程序在运行时根据实际需要申请内存空间,不需要时将内存空间释放掉

 
链表的优点和缺点分别有什么?

       优点:实现灵活的内存动态分配

       缺点:不能随机读取;由于增加了指针域,所以增加了空间开销;

 
链表的分类?

    链表粗略的可以分为四类:单链表,双链表,循环链表和静态链表;但如果将其柔和又可分出几个门类来,总共是;单链表,单循环链表,双链表,双循环链表,循环链表和静态链表,每种的详解见后面的几篇文章;

  如何判定某种情况下用什么类型的指针?

 首先,搞明白每个类型的概念:

         1.单向链表:

单向链表,它包含两个域,一个信息域和一个指针域。这个链接指向表中的下一个节点,而最后一个节点则      指向一个空值NULL。
单向链表只可向一个方向遍历。
查找一个节点的时候需要从第一个节点开始每次访问下一个节点,一直访问到需要的位置。也可以提前把一个节点的位置另外保存起来,然后直接访问。



	2.双向链表:
双向链表中不仅有指向后一个节点的指针,还有指向前一个节点的指针。第一个节点的"前连接"指向NULL,最后一个节点的"后连接"指向NULL。
这样可以从任何一个节点访问前一个节点,也可以访问后一个节点,以至整个链表。一般是在需要大批量的另外储存数据在链表中的位置的时候用。
	3.循环链表:
在一个循环链表中, 首节点和末节点被连接在一起。这种方式在单向和双向链表中皆可实现。要转换一个循环链表,你开始于任意一个节点然后沿着列表的任一方向直到返回开始的节点。循环链表可以被视为"无头无尾"。
循环链表中第一个节点之前就是最后一个节点,反之亦然。循环链表的无边界使得在这样的链表上设计算法会比普通链表更加容易。对于新加入的节点应该是在第一个节点之前还是最后一个节点之后可以根据实际要求灵活处理,区别不大。


常见情况:

a.在最后一个节点后面插入元素和删除第一个元素 ----- 单循环链表;
b.在最后一个节点插入和删除最后一个节点
----- 带头结点的双循环链表
c.将线性表La和Lb头尾连接,要求时间复杂度为O(1),且占用辅助空间尽量小。应该使用哪种结构?------
带尾指针的单循环链表


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: