棧是vector的乙個子類,它實現了乙個標準的後進先出的棧。堆疊只定義了預設建構函式,用來建立乙個空棧。 堆疊除了包括由vector定義的所有方法,也定義了自己的一些方法。
boolean empty() //判斷棧是否為空
object peek() //檢視堆疊頂部的物件,但不從堆疊中移除它。
object pop() //移除堆疊頂部的物件,並作為此函式的值返回該物件。
object push(e element) //把項壓入堆疊頂部。
int search(object element) //返回物件在堆疊中的位置,以 1 為基數。
下面的**演示了棧的基本用法
public static void main(string args)
}
輸出結果為
stack中棧頂的元素: d
stack中b的元素索引: 3
d c b a
佇列是一種特殊的線性表,它只允許在表的前端進行刪除操作,而在表的後端進行插入操作。linkedlist類實現了queue介面,因此我們可以把linkedlist當成queue來用。
queue的主要方法如下
boolean add(object element) //向隊的末尾新增元素,如果佇列已滿,會丟擲異常
boolean offer(object element) //相隊的末尾新增元素,如果佇列已滿,返回false,推薦使用
object remove() //刪除並返回佇列頭部的元素,如果隊列為空丟擲異常
object poll() //刪除並返回佇列頭部的元素,如果隊列為空返回null,推薦使用
object element() //返回佇列頭部的元素,如果隊列為空丟擲異常
object peek() //返回佇列頭部的元素,如果隊列為空返回null,推薦使用
一般佇列 queue
一般佇列的示例**如下
public static void main(string args)
system.out
.println( "\n隊列為空 poll " + queuelist.poll());
system.out
.println( "隊列為空 peek " + queuelist.peek());
//使用add方法
queuelist.add("a");
queuelist.add("b");
queuelist.add("c");
queuelist.add("d");
system.out
.println("queuelist element 棧頂元素: " + queuelist.element());
while(!queuelist.isempty())
try catch(nosuchelementexception e)
try catch(nosuchelementexception e)
}
輸出結果為
queuelist peek 棧頂元素: a
a b c d
隊列為空 poll null
隊列為空 peek null
queuelist element 棧頂元素: a
a b c d
隊列為空 remove 捕獲異常
隊列為空 element 捕獲異常
雙向佇列 deque
queue介面是單向佇列,它有乙個子介面deque,表示雙向佇列。雙向佇列的特點是在佇列的頭部和尾部都可以新增或刪除元素。它可以使用new arraydeque<>()來初始化,同時linkedlist實現了它的介面,也可使用new linkedlist<>()來初始化。
主要方法如下
//向佇列的頭部或者尾部新增元素,如果佇列已滿會丟擲異常
void addfirst(object element)
void addlast(object element)
//向佇列的頭部或者尾部新增元素,如果佇列已滿返回false
boolean offerfirst(object element)
boolean offerlast(object element)
//從頭部或尾部刪除元素,如果隊列為空丟擲異常
object removefirst()
object removelast()
//從頭部或尾部刪除元素,如果隊列為空返回nul
object pollfirst()
object polllast()
//從佇列頭部或者尾部獲取元素,如果隊列為空丟擲異常
object getfirst()
object getlast()
//從佇列頭部或者尾部獲取元素,如果隊列為空返回null
object peekfirst()
object peeklast()
示例**
public
static
void main(string args)
}
輸出結果
遍歷雙向佇列
a b c d
優先順序佇列 priorityqueue
優先順序佇列會按照排序的方式對佇列中的元素進行排序和檢索。因此加入到priorityqueue中的物件必須實現comparable介面,提供對元素排序時兩個元素之間的比較規則。
示例**
public static void main(string args)
system.out
.println("\n依次刪除優先順序佇列中的元素");
while(!priorityqueue.isempty())
}
注意的是,用foreach語句遍歷優先順序佇列時,獲得元素並沒有排序,而在通過poll()或者remove()方法刪除元素時,該方法總會刪除當前佇列中最小的元素。
以上**輸出結果為
遍歷優先順序佇列
a b d c
依次刪除優先順序佇列中的元素
a b c d
linkedlist在實現中採用了鍊錶的資料結構,對順序訪問進行了優化,向lsit中插入和刪除元素的速度較快,隨機訪問則相對較慢。而且linkedlist實現了實現了較多的介面,它可以作為棧、佇列和雙向佇列使用。
示例**如下
public static void main(string args)
system.out
.println();
system.out
.println("linklist queue offer方法: ");
linklist.offer("a");
linklist.offer("b");
linklist.offer("c");
linklist.offer("d");
while(!linklist.isempty())
system.out
.println();
system.out
.println("linklist queue add方法: ");
linklist.add("a");
linklist.add("b");
linklist.add("c");
linklist.add("d");
while(!linklist.isempty())
}
輸出結果如下
linklist stack:
d c b a
linklist queue offer方法:
a b c d
linklist queue add方法:
a b c d
C 學習筆記之棧和佇列
使用棧,要先包含標頭檔案 include stack stack int s 定義 int item 0 s.push item 將item壓入棧頂 s.pop 刪除棧頂的元素,但不會返回 s.top 返回棧頂的元素,但不會刪除 s.size 返回棧中元素的個數 s.empty 檢查棧是否為空,如果...
Java集合之佇列
jdk兩套佇列 為什麼要使用阻塞佇列?消費者和生產者不會保持相同的速度,如生產者快時候,佇列會越來越大,相比之下,阻塞佇列只允許生產者的速度在一定速度上超過消費者的速度,但不會超過很多。linkedblockingqueue 基於鍊錶的無界阻塞佇列,但也可以指定長度,不指定無界,內部維護了乙個鍊錶快...
java成神之 集合框架之佇列,棧,集合併發
棧 集合併發 結語此佇列第乙個元素永遠是最小的,先進先出 priorityqueuequeue new priorityqueue 雙端佇列 dequedequea new linkedlist dequea.add element 1 dequea.addfirst element 2 deque...