一、什麼是隊列【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