隊列的特點是先進先出,如同日常生活中的排隊。隊列有加入隊尾,從隊頭刪除元素,取得隊尾元素 ,取得隊頭元素,取得隊列長度,判斷隊列是否為空等操作。
隊列也可以可以用順序表、鏈表實現,但隊列最好不要用順序表實現,因為元素加入隊列和刪除元素 中的一種操作總會引起全部元素的移動,效率極低(循環隊列除外)。
隊列的實現非常簡單,下面用前面介紹的單鏈表實現。
代碼:
/*
* File : Queue.cs
* Author : Zhenxing Zhou
* Date : 2008-12-07
* Blog : http://www.xianfen.net/
*/
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();
}
}
}
2.應用示例
也是一個非常無聊的演示程序:顯示隨機生成整數的奇偶數對。
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