C# Stack(堆棧)

Stack是一種特殊的集合類型,以LIFO方式(后進(jìn)先出)存儲(chǔ)元素。C#包括泛型Stack<T>和非泛型Stack集合類。建議使用泛型Stack<T>集合。

堆棧對(duì)于以LIFO形式存儲(chǔ)臨時(shí)數(shù)據(jù)很有用,并且您可能希望在檢索元素的值后將其刪除。

Stack <T>特性

  • Stack<T> 是后進(jìn)先出集合。  

  • 它在System.Collection.Generic命名空間下。

  • Stack<T>可以包含指定類型的元素。它提供編譯時(shí)類型檢查,并且不執(zhí)行裝箱/拆箱,因?yàn)樗欠盒偷摹?/p>

  • 可以使用Push()方法添加元素。不能使用集合初始化(collection-initializer)語(yǔ)法。

  • 可以使用Pop()和Peek()方法檢索元素。它不支持索引器。

創(chuàng)建堆棧

您可以通過(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,

Stack <T> 屬性和方法:

屬性用法
Count返回堆棧中元素的總數(shù)。
方法用法
Push(T)在堆棧頂部插入一個(gè)項(xiàng)目。
Peek()返回堆棧頂部的項(xiàng)目。
Pop()從堆棧頂部刪除并返回項(xiàng)目。
Contains(T)檢查堆棧中是否存在項(xiàng)目。
Clear()從堆棧中刪除所有項(xiàng)目。

Pop()

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()

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()

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
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清