For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
链表我们在前几期的文章中给大家简单介绍了链表的概念与应用方法等内容,而本文我们就通过案例分析来继续学习一下,链表的常见类型都有哪些。
单向链表
单向链表是简单的链表结构,它包含两个域,一个信息域和一个指针域。
信息域存储实际的数据,指针域存储下一个结点位置。
在实际编码中,为了方便,会使用哨兵结点占据头结点的位置,其信息域是空的,指针域存储实际的头结点所在位置,尾结点的指针域一般会是NULL地址。
双向链表
双向链表在单向链表的基础上多增加了一个指针域,这个新增加的指针域会存储上一个结点所在位置。
也就是说,在双向链表中,除头结点外,任意结点都可以访问到上一个结点,因此称为双向链表。
双端链表
双端链表与双向链表是完全不同的两个概念。
双端链表是在单向链表的基础上,增加了尾结点的引用。拥有这个引用的双端链表在尾部插入结点时特别方便,因此常被用作实现链式队列。
虽然双端链表可以很方便地在尾部插入结点,但由于无法快捷地获取倒数二个结点,因此仍然不能方便地删除尾结点,若需要此功能可以靠双向链表实现。
循环链表
循环链表是一个头结点和尾结点连接在一起的特殊链表,通过单向链表或双向链表都能够实现。
循环链表的优点就是从链表的尾结点到头结点非常方便,也方便处理具有环形结构特点的数据,如约瑟夫问题。
块状链表
快状链表本身是一个链表,但是链式存储的并不是一般的数据,而是由一些数据组成的顺序表结点,这些结点也被称作块。
块状链表通过使用可变的顺序表的长度和特殊的插入、删除的方式,可以达到O(N)的时间复杂度。
块状链表的另一个特点是相对普通链表来说更节省内存,因为不用保存指向每一个数据结点的指针。
数组和链表
仅特性和效率而言,数组拥有高效随机存取的特性,链表在插入、删除结点时效率更高。因此,经常利用下标访问元素可以使用数组,经常插入、删除元素可以使用链表。
但是,不能仅仅只用复杂度分析决定使用哪种数据结构。数组简单易用,而且能够借助CPU缓存机制预读数组中的数据;而链表在内存中不是连续存储的,对CPU缓存不友好,没办法有效预读。
数组的缺点是数据大小固定,而且一经声明要占用整块连续内存空间,如果声明的数组过大,系统可能没有足够的连续内存空间分配给它。即使是在Java中使用可以动态扩容的ArrayList类型,也存在扩容耗时的问题。而链表本身没有这样的限制,天生支持动态扩容。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。