C# 在系統集合泛型(System.Collections.Generic) 還包含 佇列(Queue)及堆疊(Stack)
這裡先簡單總結一下兩者的差異
佇列(Queue) 屬於先進先出(FIFO)的集合,例如: 一群人在排隊等公車,先來的就可以先上車。
堆疊(Stack) 屬於後進先出 (LIFO)的集合,例如: 將大箱子放入貨車櫃,最後放進去的,到時會最先取出來; 將子彈裝進彈匣,最後裝進去的會先擊發。
接下來,兩者說明如下:
佇列(Queue)
佇列(Queue) 屬於先進先出(FIFO)的集合 例如: 一群人在排隊等公車,先來的就可以先上車。
Queue<型別參數T> 變數名稱 = new Queue<型別參數T>();
常用的 Queue 方法與屬性 (假設,變數名稱為 myQueue)
方法/屬性 | 說明 | 用法 |
---|---|---|
Enqueue | 增加一個元素 | myQueue.Enqueue(值) |
Dequeue | 取出並移除第一個元素 | myQueue.Dequeue() |
Count | 取得元素總數 | myQueue.Count |
Peek | 取出第一個元素,但不移除 | myQueue.Peek() |
Clear | 移除所有元素 | myQueue.Clear() |
ToArray | 將 Queue 項目建立新的陣列 | myQueue.ToArray() |
TrimExcess() | 如果元素已經少於一開始的90%,就調整 Queue 容量大小 | myQueue.TrimExcess() |
(完整Queue方法/屬性可以參考官方文件
範例:
using System;
using System.Collections.Generic;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
//初始化 Queue 類別
Queue<string> mydemoQueue = new Queue<string>();
//Enqueue 將物件加入至 Queue 的末端
mydemoQueue.Enqueue("Adam");
mydemoQueue.Enqueue("Brown");
mydemoQueue.Enqueue("Candy");
mydemoQueue.Enqueue("Denny");
while(mydemoQueue.Count >0)
{
//移除並傳回在 Queue 開頭的物件。
Console.WriteLine(mydemoQueue.Dequeue());
}
mydemoQueue.Clear();
/*
結果: 先進先出(FIFO)
Adam
Brown
Candy
Denny
*/
}
}
}
堆疊(Stack)
堆疊(Stack) 屬於後進先出(LIFO)的集合 例如: 將大箱子放入貨車櫃,最後放進去的,到時會最先取出來; 將子彈裝進彈匣,最後裝進去的會先擊發。
Stack<型別參數T> 變數名稱 = new Stack<型別參數T>();
常用的 Stack 方法與屬性 (假設,變數名稱為 mydemoStack)
方法/屬性 | 說明 | 用法 |
---|---|---|
Push | 頂端(最後面)增加一個元素 | mydemoStack.Push(值) |
Pop | 取出頂端(最後面)第一個元素,並移除 | mydemoStack.Pop() |
Count | 取得元素總數 | mydemoStack.Count |
Peek | 取出頂端(最後面)第一個元素,但不移除 | mydemoStack.Peek() |
Clear | 移除所有元素 | mydemoStack.Clear() |
ToArray | 將 Stack 項目建立新的陣列 | mydemoStack.ToArray() |
TrimExcess() | 如果元素已經少於一開始的90%,就調整 Stack 容量大小 | mydemoStack.TrimExcess() |
(完整Stack方法/屬性可以參考官方文件
範例:
using System;
using System.Collections.Generic;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
//初始化 Stack 類別
Stack<string> mydemoStack = new Stack<string>();
//Push 將物件插入 Stack<T> 的頂端。
mydemoStack.Push("Adam");
mydemoStack.Push("Brown");
mydemoStack.Push("Candy");
mydemoStack.Push("Denny");
while (mydemoStack.Count > 0)
{
//移除並傳回頂端的物件 Stack<T>。
Console.WriteLine(mydemoStack.Pop());
}
mydemoStack.Clear();
}
}
}