2012年1月16日 星期一

Stack、Queue 集合

ArrayList 中,我們可以直接存取集合中任何一個資料項目,但有時候我們並不需要如此功能,只需要可以循序存取集合中的項目即可。 在 .Net 裡,提供了二個循序串列 (sequential list) 物件:QueueStack 。 這二個物件的特色是,可以在一個步驟中,由集合中取出資料項目,並同時將該資料項目由集合中移除。

Queue

表示先進先出 (FIFO) 集合。

//Queue 類別的組成成員
public interface Queue : ICollection, IEnumerable, ICloneable
{  
    public virtual int Count { get; }

    public virtual Object <strong class="fcOrange">Dequeue</strong>()         //移除並傳回在 Queue 前端的物件。
    public virtual void <strong class="fcOrange">Enqueue</strong>(Object obj) //將物件加入 Queue 的末端。
    public virtual Object <strong class="fcOrange">Peek</strong>()            //傳回 Queue 前端的物件而不需移除它。
}
Queue q = new Queue();
q.Enqueue("First");
q.Enqueue("Second");
q.Enqueue("Third");
q.Enqueue("Fourth");
while (q.Count > 0)
{
    Console.WriteLine(q.Dequeue());
}

若要取出一個item,但不想將其移除,這時候可以利用Peek方法來解決

if (q.Peek() is String)
{
    Console.WriteLine(q.Dequeue());
}

Stack

表示後進先出 (LIFO) 集合。

//Stack 類別的組成成員
public class Stack : ICollection, IEnumerable, ICloneable
{  
    public virtual int Count { get; }

    public virtual Object <strong class="fcOrange">Pop</strong>()             //移除並傳回在 Stack 頂端的物件。
    public virtual void <strong class="fcOrange">Push(Object obj)</strong>    //將物件插入 Stack 的頂端。
    public virtual Object <strong class="fcOrange">Peek</strong>()            //傳回 Stack 頂端的物件而不需移除它。
}
Stack s = new Stack();
s.Push("First");
s.Push("Second");
s.Push("Third");
s.Push("Fourth");
while (s.Count > 0)
{
    Console.WriteLine(s.Pop());
}

沒有留言:

張貼留言