首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

資料結構 (C#):佇列實作與奇偶數配對應用

     編輯:關於C#

C# 佇列 (Queue) 實作:以單向鏈結串列為底層、先進先出 (FIFO) 語意封裝

佇列特性:僅允許尾端加入 (EnQueue)、頭端刪除 (DeQueue),生活排隊即典型例子。底層用單向鏈結串列實作可避免順序表搬移元素的低效。

一、Queue 類別完整程式碼


namespace Xianfen.Net.DataStructure
{
    public class Queue<T>
    {
        protected SingleLinkedList<T> m_List;

        public bool IsEmpty { get { return m_List.IsEmpty; } }
        public int Count { get { return m_List.Count; } }

        public Queue() { m_List = new SingleLinkedList<T>(); }
        public Queue(T t) { m_List = new SingleLinkedList<T>(t); }

        // 出佇列:取得並移除尾端 (對應單向鏈結串列尾端)
        public T DeQueue()
        {
            T t = m_List.GetTail();
            m_List.RemoveTail();
            return t;
        }

        // 進佇列:加入頭端 (對應單向鏈結串列頭端)
        public void EnQueue(T t)
        {
            m_List.AddHead(t);
        }

        public T GetFront() { return m_List.GetTail(); } // 隊頭
        public T GetRear() { return m_List.GetHead(); }  // 隊尾
    }
}

二、應用範例:隨機奇偶數配對


Queue<int> q1 = new Queue<int>(); // 奇數隊列
Queue<int> q2 = new Queue<int>(); // 偶數隊列
Random rnd = new Random();

for (int i = 0; i < 20; i++)
{
    int value = rnd.Next();
    if (value % 2 != 0) q1.EnQueue(value);
    else q2.EnQueue(value);
}

while (!q1.IsEmpty && !q2.IsEmpty)
{
    Console.WriteLine("奇偶數對:{0},{1}", q1.DeQueue(), q2.DeQueue());
}

三、某次執行結果

奇偶數對:1001667163,570500228
奇偶數對:703882551,1134267770
奇偶數對:1938115369,486438246
奇偶數對:1471693833,717831946
奇偶數對:429728181,678751398
奇偶數對:1894142101,2052360200
奇偶數對:1289719185,1630602020

四、設計說明

  • 以 SingleLinkedList 為內部儲存,AddHead 入隊、RemoveTail 出隊,符合 FIFO。
  • 若改用順序表,每次出隊或入隊必搬移所有元素,效能極差 (除非用循環陣列)。
  • 介面極簡:EnQueue、DeQueue、GetFront、GetRear、Count、IsEmpty。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved