Stack是一種特殊的集合類型,以LIFO方式(后進(jìn)先出)存儲(chǔ)元素。C#包括泛型Stack<T>和非泛型Stack集合類。建議使用泛型Stack<T>集合。
堆棧對(duì)于以LIFO形式存儲(chǔ)臨時(shí)數(shù)據(jù)很有用,并且您可能希望在檢索元素的值后將其刪除。
Stack<T> 是后進(jìn)先出集合。
它在System.Collection.Generic命名空間下。
Stack<T>可以包含指定類型的元素。它提供編譯時(shí)類型檢查,并且不執(zhí)行裝箱/拆箱,因?yàn)樗欠盒偷摹?/p>
可以使用Push()方法添加元素。不能使用集合初始化(collection-initializer)語(yǔ)法。
可以使用Pop()和Peek()方法檢索元素。它不支持索引器。
您可以通過(guò)為 Stack<T> 其存儲(chǔ)的元素類型指定類型參數(shù)來(lái)創(chuàng)建的對(duì)象。下面的示例使用 Push ()方法在 Stack <T> 中創(chuàng)建和添加元素。堆棧允許 null (對(duì)于引用類型)和重復(fù)值。
Stack<int> myStack = new Stack<int>(); myStack.Push(1); myStack.Push(2); myStack.Push(3); myStack.Push(4); foreach (var item in myStack) Console.Write(item + ","); //打印4,3,2,1,
您還可以從數(shù)組創(chuàng)建堆棧,如下所示。
int[] arr = new int[]{ 1, 2, 3, 4}; Stack<int> myStack = new Stack<int>(arr); foreach (var item in myStack) Console.Write(item + ","); //打印4,3,2,1,
屬性 | 用法 |
---|---|
Count | 返回堆棧中元素的總數(shù)。 |
方法 | 用法 |
---|---|
Push(T) | 在堆棧頂部插入一個(gè)項(xiàng)目。 |
Peek() | 返回堆棧頂部的項(xiàng)目。 |
Pop() | 從堆棧頂部刪除并返回項(xiàng)目。 |
Contains(T) | 檢查堆棧中是否存在項(xiàng)目。 |
Clear() | 從堆棧中刪除所有項(xiàng)目。 |
Pop() 方法返回最后一個(gè)元素,并將其從堆棧中刪除。如果堆棧為空,則將拋出 InvalidOperationException。因此,在調(diào)用Pop()方法之前,請(qǐng)始終檢查堆棧中的元素?cái)?shù)。
Stack<int> myStack = new Stack<int>(); myStack.Push(1); myStack.Push(2); myStack.Push(3); myStack.Push(4); Console.Write("堆棧中的元素?cái)?shù): {0}", myStack.Count); while (myStack.Count > 0) Console.Write(myStack.Pop() + ","); Console.Write("堆棧中的元素?cái)?shù): {0}", myStack.Count);
堆棧中的元素?cái)?shù):4 4,3,2,1, 堆棧中的元素?cái)?shù):0
Peek()方法從堆棧中返回最后添加的值,但不會(huì)將其刪除。在空堆棧上調(diào)用 Peek() 方法將拋出 InvalidOperationException。因此,在使用Peek()方法檢索元素之前,請(qǐng)始終檢查堆棧中的元素。
Stack<int> myStack = new Stack<int>(); myStack.Push(1); myStack.Push(2); myStack.Push(3); myStack.Push(4); Console.Write("Number of elements in Stack: {0}", myStack.Count);// 輸出 4 if(myStack.Count > 0){ Console.WriteLine(myStack.Peek()); // 輸出 4 Console.WriteLine(myStack.Peek()); // 輸出 4 } Console.Write("Number of elements in Stack: {0}", myStack.Count);// 輸出 4
Contains()方法檢查指定元素在Stack集合中是否存在。如果存在,則返回true,否則返回false。
Stack<int> myStack = new Stack<int>(); myStack.Push(1); myStack.Push(2); myStack.Push(3); myStack.Push(4); myStack.Contains(2); // 返回true myStack.Contains(10); // 返回false