1、什么是隊列【queue】
隊列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。
關於隊列的基本操作方法:
add():添加一個元素,若超出了度列的長度會直接拋出異常。
put():添加一個元素,若向隊尾添加元素的時候發現隊列已經滿了會發生阻塞一直等待空間,以加入元素。
offer():添加一個元素,如果在添加時發現隊列已滿無法添加的話,則返回false。
take():移除並返回這個元素,若隊列為空,則發生阻塞,等待有元素。有點類似於生產者消費者模型,只有元素的時候take才被喚醒
poll():移除並返回這個元素,若隊列為空,返回null。
remove():移除並返回這個元素,若隊列為空,拋出NoSuchElementException異常。
element():返回隊列的頭部元素,若隊列為空,則拋出NoSuchElementException異常。
peek():返回隊列頭部元素,若隊列為空,則返回null
2、什么是鏈表【forward_list,list..】
鏈表是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。
鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲元素的數據,另一個就是指向下一個節點的指針
特點:
相比於線性表順序結構,操作復雜。由於不必須按順序存儲,鏈表在插入的時候可以達到O(1)的復雜度,比另一種線性表順序表快得多
但是查找一個節點或者訪問特定編號的節點則需要O(n)的時間,而線性表和順序表相應的時間復雜度分別是O(logn)和O(1)。
使用鏈表結構可以克服數組鏈表需要預先知道數據大小的缺點,鏈表結構可以充分利用計算機內存空間,實現靈活的內存動態管理。
但是鏈表失去了數組隨機讀取的優點,同時鏈表由於增加了結點的指針,空間開銷比較大。
鏈表最明顯的好處就是,常規數組排列關聯項目的方式可能不同於這些數據項目在記憶體或磁盤上順序,數據的存取往往要在不同的排列順序中轉換。
鏈表允許插入和移除表上任意位置上的節點,但是不允許隨機存取。鏈表有很多種不同的類型:
單向鏈表,雙向鏈表以及循環鏈表。鏈表可以在多種編程語言中實現。如c+,java等
原文:https://blog.csdn.net/lidai352710967/article/details/81119047