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