C# 隊列(Queue) 和堆棧(Stack)


隊列 (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)是限定只能在表的一端進行插入和在另一端進行刪除操作的線性表。
  • 順序棧能夠實現多棧空間共享,而順序隊列不能

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM