C#數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列淺析
C#數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列是一種特殊的線性表,它只允許在表的前端(front)進(jìn)行刪除操作,而在表的后端(back)進(jìn)行插入操作。進(jìn)行插入操作的端稱為隊(duì)尾,進(jìn)行刪除操作的端稱為隊(duì)頭。這也就是我們平常經(jīng)常用說(shuō)到的先進(jìn)先出法則(FIFO),隊(duì)列這種法則,在中國(guó)好久以前就開(kāi)始運(yùn)用了,例如糧倉(cāng)管理官員,在沒(méi)掌握這種法則前,倉(cāng)庫(kù)底部的糧食都因時(shí)間太久而壞掉了,后來(lái)有聰明人士在糧倉(cāng)二邊開(kāi)個(gè)門,一邊進(jìn)倉(cāng)一邊出倉(cāng),這樣管理就方便多了。隊(duì)列中沒(méi)有元素時(shí),稱為空隊(duì)列。
C#數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列實(shí)現(xiàn)的接口如下:
- public interface IQueen﹤T﹥
 - {
 - int Length();
 - bool IsEmpty();
 - bool IsFull();
 - void Clear();
 - void IN(T items);
 - T Out();
 - T GetFrontItem();
 - }
 
C#數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列實(shí)現(xiàn)的原理與代碼如下:
- public class JQueen﹤T﹥ : IQueen﹤T﹥
 - {
 - private int size;
 - private T[] item;
 - private int front;
 - private int back;
 - public JQueen()
 - : this(100)
 - {
 - size = 100;
 - item = new T[100];
 - front = back = -1;
 - }
 - public JQueen(int length)
 - {
 - size = length;
 - item = new T[length];
 - front = back = -1;
 - }
 - public T this[int index]
 - {
 - get { return item[index]; }
 - set { item[index] = value; }
 - }
 - public int Front
 - {
 - get { return front; }
 - set { front = value; }
 - }
 - public int Back
 - {
 - get { return back; }
 - set { back = value; }
 - }
 - public int MaxLength
 - {
 - get { return size; }
 - set { size = value; }
 - }
 - public int Length()
 - {
 - return (back - front + size) % size;
 - }
 - public bool IsEmpty()
 - {
 - return (front == back);
 - }
 - public bool IsFull()
 - {
 - return ((back + 1) % size == front);
 - }
 - public void Clear()
 - {
 - front = back = -1;
 - }
 - public void IN(T items)
 - {
 - if (IsFull())
 - {
 - throw new ArgumentOutOfRangeException("RangeException",
 - "Queen RangeException: queen is full");
 - }
 - item[++back] = items;
 - }
 - public T Out()
 - {
 - T tmp = default(T);
 - if (IsEmpty())
 - {
 - throw new ArgumentOutOfRangeException("RangeException",
 - "Queen RangeException: queen is empty");
 - }
 - tmp = item[++front];
 - return tmp;
 - }
 - public T GetFrontItem()
 - {
 - if (IsEmpty())
 - {
 - throw new ArgumentOutOfRangeException("RangeException",
 - "Queen RangeException: queen is empty");
 - }
 - return item[front + 1];
 - }
 - }
 
C#數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列的測(cè)試隊(duì)列代碼:
- public class Program
 - {
 - static void Main(string[] args)
 - {
 - try
 - {
 - JQueen﹤string﹥ JQ = new JQueen﹤string﹥();
 - Console.WriteLine(JQ.IsEmpty()); //是否為空
 - Console.WriteLine(JQ.IsFull()); //是否滿隊(duì)
 - Console.WriteLine(JQ.MaxLength); //初始化時(shí)隊(duì)列的長(zhǎng)度
 - Console.WriteLine(JQ.Length()); //隊(duì)列元素長(zhǎng)度
 - Console.WriteLine(JQ.Front); //隊(duì)頭位置
 - Console.WriteLine(JQ.Back); //隊(duì)尾位置
 - JQ.IN("A"); //插入元素
 - JQ.IN("B");
 - JQ.IN("C");
 - JQ.IN("D");
 - Console.WriteLine(JQ.GetFrontItem()); //隊(duì)頭元素
 - Console.WriteLine("------元素出隊(duì)后隊(duì)頭元素-------");
 - JQ.Out(); //出A
 - JQ.Out();
 - Console.WriteLine(JQ.GetFrontItem()); //出隊(duì)二個(gè)元素后隊(duì)頭元素
 - Console.ReadLine();
 - }
 - catch (Exception ex)
 - {
 - Console.WriteLine(ex.Message); //異常
 - Console.ReadLine();
 - }
 - }
 - }
 
C#數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列程序運(yùn)行結(jié)果如下:
C#數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列相關(guān)的內(nèi)容就向你介紹到這里,希望通過(guò)C#數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列的介紹使你對(duì)C#數(shù)據(jù)結(jié)構(gòu)與算法有所了解。
【編輯推薦】
















 
 
 



 
 
 
 