隊列 (Queue)
隊列(Queue)代表了一個先進先出的對象集合。當您需要對各項進行先進先出的訪問時,則可使用隊列。當能在列表中添加一項,稱為入列,當您從列表中移除一項時,稱為出列。
屬性
屬性 | 描述 |
Count | 獲取 Queue 中包含的元素個數。 |
方法
方法 | 描述 |
public virtual void Clear(); | 從 Queue 中移除所有的元素。 |
public virtual bool Contains( object obj ); | 判斷某個元素是否在 Queue 中。 |
public virtual object Dequeue(); | 移除並返回在 Queue 的開頭的對象。 |
public virtual void Enqueue( object obj ); | 向 Queue 的末尾添加一個對象。 |
public virtual object[] ToArray(); | 復制 Queue 到一個新的數組中。 |
public virtual void TrimToSize(); | 設置容量為 Queue 中元素的實際個數。 |
實例
static void Main(string[] args)
{
Queue q = new Queue();
q.Enqueue("A");
q.Enqueue("B");
q.Enqueue("C");
q.Enqueue("D");
Console.WriteLine("當前所有隊列: ");
foreach (string c in q)
{
Console.Write(c + " ");
}
Console.WriteLine();
q.Enqueue("K");
q.Enqueue("P");
Console.WriteLine("當前所有隊列: ");
foreach (string c in q)
{
Console.Write(c + " ");
}
Console.WriteLine();
Console.WriteLine("開始移除部分元素: ");
string str = (string)q.Dequeue();
Console.WriteLine("當前移除的元素為:{0}", str);
str= (string)q.Dequeue();
Console.WriteLine("當前移除的元素為:{0}", str);
object[] obj = q.ToArray();
q.Clear();
Console.ReadKey();
}
上面的代碼被編譯執行后,輸出結果如下:
當前所有隊列: A B C D
當前所有隊列: A B C D K P
開始移除部分元素:
當前移除的元素為:A
當前移除的元素為:B
棧 (Stack)
堆棧(Stack) 代表了一個后進先出的對象集合。當您需要對各項進行后進先出訪問時,則使用堆棧。當您在列表中添加一項,稱為推入元素,當您從列表中移除一項時,稱為彈出元素。
屬性
屬性 | 描述 |
Count | 獲取 Stack 中包含的元素個數。 |
方法
方法 | 描述 |
public virtual void Clear(); | 從 Stack 中移除所有的元素。 |
public virtual bool Contains( object obj ); | 判斷某個元素是否在 Stack 中。 |
public virtual object Peek(); | 返回在 Stack 的頂部的對象,但不移除它。 |
public virtual object Pop(); | 移除並返回在 Stack 的頂部的對象。 |
public virtual void Push( object obj ); | 向 Stack 的頂部添加一個對象。 |
public virtual object[] ToArray(); | 復制 Stack 到一個新的數組中。 |
實例
static void Main(string[] args)
{
Stack st = new Stack();
st.Push('A');
st.Push('B');
st.Push('C');
st.Push('D');
Console.WriteLine("當前所有堆棧: ");
foreach (char c in st)
{
Console.Write(c + " ");
}
Console.WriteLine();
st.Push('V');
st.Push('H');
Console.WriteLine("堆棧中下一個可能執行的值: {0}",st.Peek());
Console.WriteLine("當前所有堆棧: ");
foreach (char c in st)
{
Console.Write(c + " ");
}
Console.WriteLine();
Console.WriteLine("移除堆棧中頂部的值:{0}", st.Pop());
//判斷是否包含 ‘V’
bool isContain = st.Contains('V');
Console.WriteLine("當前所有堆棧: ");
foreach (char c in st)
{
Console.Write(c + " ");
}
st.Clear();
Console.ReadKey();
}
上面的代碼被編譯執行后,輸出結果如下:
當前所有堆棧: D C B A
堆棧中下一個可能執行的值: H
當前所有堆棧: H V D C B A
移除堆棧中頂部的值:H
當前所有堆棧: V D C B A
隊列(Queue)和棧 (Stack)區別
相同點
- 都是線性結構
- 插入操作都是限定在表尾進行
- 都可以通過順序結構和鏈式結構實現
- 多鏈棧和多鏈隊列的管理模式可以相同
不同點
- 刪除數據元素的位置不同,棧(Stack)的刪除操作在表尾進行(先進后出),隊列(Queue)的刪除操作在表頭進行(先進先出)
- 棧(Stack)是限定只能在表的一端進行插入和刪除操作的線性表,隊列(Queue)是限定只能在表的一端進行插入和在另一端進行刪除操作的線性表。
- 順序棧能夠實現多棧空間共享,而順序隊列不能