什么是链表?
链表是一种常见的基础数据结构(数组也是基础数据结构),它是一种递归的数据结构,由一系列节点(Node)组成,节点含有一个存储数据的数据域和一个指向下一个节点地址位置的引用.
链表是线性表的一种,但是它的物理存储结构是非连续、 非顺序的,元素的逻辑顺序是通过节点之间的链接确定的.
数据结构与数据类型的区别
数据类型是一组数据和一组对这些值进行操作的集合.
数据结构强调的是数据的存储和组织方式.
常见的数据结构有:数组、栈、队列、链表、树、图、堆、散列表.
链表是否可以替代数组?
由于创建数组需要预先知道数组的大小,所以想要动态的扩容需要不断地创建新数组,而链表则可以充分利用内存空间,实现较为灵活的动态扩展.
使用链表替代数组有优点也有缺点:
优点
- 在链表中进行插入操作或是删除操作都更加方便快速.
- 链表所需的空间总是和集合的大小成正比.
- 链表操作所需的时间总是和集合的大小无关.
缺点
- 无法像数组一样可以通过索引来进行随机访问.
- 由于每一个元素节点都是一个对象,所以需要的空间开销比较大.
Stack
栈是一种基于后进先出(LIFO)的数据结构,其中的元素除了头尾之外,每个元素都有一个前驱和一个后继.
使用链表来表示栈内部的数据时,栈顶就是链表的头部,当push元素时将元素添加在表头,当pop元素时将元素从表头删除.
代码实现
|
|
Queue
队列是一种基于先进先出(FIFO)的数据结构,元素的处理顺序就是它们被添加到队列中的顺序.
可以使用实例变量first指向队列的队头,实例变量last指向队列的队尾,当将一个元素入列时,就将这个元素添加到队尾,当要将一个元素出列时,就删除队头的节点.
代码实现
|
|
end
- Author: SylvanasSun
- GitHub: https://github.com/SylvanasSun
- Email: sylvanassun_xtz@163.com
- Reference: 《Algorithms 4th edition》& wiki