標籤:capacity virtual 方法 time system 表示 枚舉 實現 namespace
棧
棧與隊列是一個非常類似的容器,他們的區別在於隊列是先進先出,而棧是後進先出.
Stack與Stack<T>,像隊列一樣,棧也提供了泛型與非泛型版本.
Stack的方法:
方法 |
說明 |
Pop() |
從棧頂讀棧並刪除元素 |
Push() |
存放資料,存在棧頂 |
Peek() |
從棧頂讀,但不刪除 |
案例:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 棧
{
class Program
{
static void Main(string[] args)
{
Stack<string> stack = new Stack<string>();
stack.Push("A");
stack.Push("B");
stack.Push("C");
foreach (var item in stack)
{
Console.WriteLine(item);
}
//因為棧是後進先出的,所以結果是CBA
//以上我們使用列舉程式,是不會改變元素的,不可以刪除
//現在我們用Pop來讀取輸出
Console.WriteLine("使用Pop方法讀取元素");
while (stack.Count!=0)
{
Console.WriteLine(stack.Pop());
}
Console.WriteLine("Pop之後的棧大小: {0}", stack.Count);
Console.ReadKey();
}
}
}
一.建立棧
Stack類的建構函式提供了三種重載形式:
建構函式 |
說明 |
public Stack() |
使用預設的初始哈容器建立Stack的新執行個體 |
public Stack(ICollection col) |
使用ICollection集合複製的元素來建立Stack的執行個體,並具有與集合元素數目相同的初始容量 |
public Stack(int initialCapacity) |
通過自定初始容量來建立Stack類的執行個體 |
案例:
Stack sack = new Stack();//使用預設容量
Stack sack1 = new Stack(new string[5] { "堆棧元素一", "堆棧元素二", "堆棧元素三", "堆棧元素四", "堆棧元素五" });//使用由string數組中的幾何元素初始化棧對象
Stack sack2 = new Stack(20);//建立棧對象並指定20個元素
二.元素入棧
為了將元素壓入棧中,可以調用Stack類的Push方法.這個方法的聲明如下:
public virtual void Push(object obj)
這個方法需要一個object類型的參數obj,表示要被壓入到棧中的對象.案例:
Stack sk = new Stack();
sk.Push("1");
sk.Push("2");
sk.Push("3");
sk.Push("4");
sk.Push("5");
//顯示棧中內容
foreach (var item in sk)
{
Console.WriteLine(item);
}
//可以看到元素額排列順序是後入棧的排列在最前面,符合後進先出的規範
Console.ReadKey();
三.元素出棧
元素出棧是指:移除Stack頂部的元素,並返回這個元素的引用.可以通過調用Pop方法實現元素出棧.另外Stack還提供了Peek方法,用於擷取頂部元素對象,這個方法並不移除頂部元素.這兩個方法的聲明如下:
public virtual object Peek();
public virtual object Pop();
案例:
Stack sk = new Stack();
sk.Push("1");
sk.Push("2");
sk.Push("3");
sk.Push("4");
sk.Push("5");
//顯示棧中內容
foreach (var item in sk)
{
Console.WriteLine(item);
}
//可以看到元素額排列順序是後入棧的排列在最前面,符合後進先出的規範
Console.WriteLine("棧頂元素是: {0}", sk.Peek()); ;
Console.WriteLine("移除頂部的元素: {0}",sk.Pop());
//顯示棧中內容
foreach (var item in sk)
{
Console.WriteLine(item);
}
Console.ReadKey();
C#編程(五十)----------棧