一、什么是队列【queue】前端
队列是一种特殊的线性表,特殊之处在于它只容许在表的前端(front)进行删除操做,而在表的后端(rear)进行插入操做,和栈同样,队列是一种操做受限制的线性表。java
关于队列的基本操做方法:编程
add():添加一个元素,若超出了度列的长度会直接抛出异常。后端
put():添加一个元素,若向队尾添加元素的时候发现队列已经满了会发生阻塞一直等待空间,以加入元素。数组
offer():添加一个元素,若是在添加时发现队列已满没法添加的话,则返回false。编程语言
take():移除并返回这个元素,若队列为空,则发生阻塞,等待有元素。有点相似于生产者消费者模型,只有元素的时候take才被唤醒.net
poll():移除并返回这个元素,若队列为空,返回null。指针
remove():移除并返回这个元素,若队列为空,抛出NoSuchElementException异常。blog
element():返回队列的头部元素,若队列为空,则抛出NoSuchElementException异常。队列
peek():返回队列头部元素,若队列为空,则返回null
二、什么是链表【forward_list,list..】
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是经过链表中的指针连接次序实现的。
链表由一系列结点(链表中每个元素称为结点)组成,结点能够在运行时动态生成。每一个结点包括两个部分:一个是存储元素的数据,另外一个就是指向下一个节点的指针
特色:
相比于线性表顺序结构,操做复杂。因为没必要须按顺序存储,链表在插入的时候能够达到O(1)的复杂度,比另外一种线性表顺序表快得多
可是查找一个节点或者访问特定编号的节点则须要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。
使用链表结构能够克服数组链表须要预先知道数据大小的缺点,链表结构能够充分利用计算机内存空间,实现灵活的内存动态管理。
可是链表失去了数组随机读取的优势,同时链表因为增长告终点的指针,空间开销比较大。
链表最明显的好处就是,常规数组排列关联项目的方式可能不一样于这些数据项目在记忆体或磁盘上顺序,数据的存取每每要在不一样的排列顺序中转换。
链表容许插入和移除表上任意位置上的节点,可是不容许随机存取。链表有不少种不一样的类型:
单向链表,双向链表以及循环链表。链表能够在多种编程语言中实现。如c+,java等
原文:https://blog.csdn.net/lidai352710967/article/details/81119047