猿教程 Logo

C# 堆栈 (Stack)

C#包括一种特殊类型的集合,用于存储LIFO样式的元素(Last In First Out)。 C#包括一个通用和非通用的堆栈。 在这里,你将了解非泛型堆栈。

堆栈允许空值和重复值。 它提供了一个用于添加值的Push()方法,以及用于检索值的Pop()或Peek()方法。


堆栈的重要属性和方法:

属性描述
Count返回堆栈中元素的总数。


方法描述
Push在堆栈顶部插入项目。
Peek返回堆栈中的顶部项。
Pop从堆栈的顶部删除和返回项目。
Contains检查项目是否存在于堆栈中。
Clear从堆栈中删除所有项目。

向Stack添加元素

Push()方法将值添加到堆栈中。 它允许任何数据类型的值。

Push()方法签名:void Push(object obj);

Push方法案例:

Stack myStack = new Stack();
myStack.Push("Hello!!");
myStack.Push(null);
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
myStack.Push(4);
myStack.Push(5);

访问Stack

您可以通过各种方式检索堆栈元素。 使用foreach语句来迭代Stack集合,并获取LIFO样式中的所有元素。

访问Stack案例:

Stack myStack = new Stack();
myStack.Push("Hello!!");
myStack.Push(null);
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
myStack.Push(4);
myStack.Push(5);
foreach (var itm in myStack)
Console.Write(itm);

运行结果:

5
4
3
2
1
Hello!!

Peek()

Peek()方法从堆栈中返回最后一个(最上面的)值。 在空栈上调用Peek()方法将抛出InvalidOperationException。 因此,在使用Peek()方法检索元素之前,始终检查堆栈中的元素。

Peek()方法签名:object Peek();

Peek()方法案例:

Stack myStack = new Stack();
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
myStack.Push(4);
myStack.Push(5);
Console.WriteLine(myStack.Peek());
Console.WriteLine(myStack.Peek());
Console.WriteLine(myStack.Peek());

运行结果:

5
5
5

Pop()

您还可以使用Pop()方法检索值。 Pop()方法删除并返回最后添加到堆栈的值。 对一个空栈的Pop()方法调用将引发一个InvalidOperationException。 因此,在调用Pop()方法之前,必须检查堆栈中的元素数是否必须大于0。

Pop()签名:object Pop();

Stack myStack = new Stack();
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
myStack.Push(4);
myStack.Push(5);
Console.Write("Number of elements in Stack: {0}", myStack.Count);
while (myStack.Count > 0)
Console.WriteLine(myStack.Pop());
Console.Write("Number of elements in Stack: {0}", myStack.Count);

运行结果:

Number of elements in Stack: 5
5
4
3
2
1
Number of elements in Stack: 0

Contains

Contains()方法检查指定的项目是否存在于Stack集合中。 如果存在,则返回true; 否则返回false。

Contains()方法签名:bool Contains(object obj);

Stack myStack = new Stack();
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
myStack.Push(4);
myStack.Push(5);
myStack.Contains(2); // returns true
myStack.Contains(10); // returns false

Clear()

Clear() 方法从堆栈中移除所有值。

Clear() 签名︰ void Clear();

Stack myStack = new Stack();
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
myStack.Push(4);
myStack.Push(5);
myStack.Clear(); // removes all elements
Console.Write("Number of elements in Stack: {0}", myStack.Count);

运行结果:

Number of elements in Stack: 0


有关堆栈成员属性和方法的详细信息,请访问MSDN。

要点
  1. Stack以LIFO(Last In First out)样式存储值。 最后添加的元素将是首先出现的元素。

  2. 使用Push()方法将元素添加到Stack。

  3. Pop()方法返回并从堆栈顶部删除元素。 在空栈上调用Pop()方法会抛出异常。

  4. Peek()方法总是返回堆栈中最顶层的元素。


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/CSharp/Csharp-stack.html