C#數(shù)據(jù)結(jié)構(gòu)與算法之隊列淺析
C#數(shù)據(jù)結(jié)構(gòu)與算法之隊列是一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,而在表的后端(back)進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。這也就是我們平常經(jīng)常用說到的先進先出法則(FIFO),隊列這種法則,在中國好久以前就開始運用了,例如糧倉管理官員,在沒掌握這種法則前,倉庫底部的糧食都因時間太久而壞掉了,后來有聰明人士在糧倉二邊開個門,一邊進倉一邊出倉,這樣管理就方便多了。隊列中沒有元素時,稱為空隊列。
C#數(shù)據(jù)結(jié)構(gòu)與算法之隊列實現(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)與算法之隊列實現(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)與算法之隊列的測試隊列代碼:
- public class Program
- {
- static void Main(string[] args)
- {
- try
- {
- JQueen﹤string﹥ JQ = new JQueen﹤string﹥();
- Console.WriteLine(JQ.IsEmpty()); //是否為空
- Console.WriteLine(JQ.IsFull()); //是否滿隊
- Console.WriteLine(JQ.MaxLength); //初始化時隊列的長度
- Console.WriteLine(JQ.Length()); //隊列元素長度
- Console.WriteLine(JQ.Front); //隊頭位置
- Console.WriteLine(JQ.Back); //隊尾位置
- JQ.IN("A"); //插入元素
- JQ.IN("B");
- JQ.IN("C");
- JQ.IN("D");
- Console.WriteLine(JQ.GetFrontItem()); //隊頭元素
- Console.WriteLine("------元素出隊后隊頭元素-------");
- JQ.Out(); //出A
- JQ.Out();
- Console.WriteLine(JQ.GetFrontItem()); //出隊二個元素后隊頭元素
- Console.ReadLine();
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message); //異常
- Console.ReadLine();
- }
- }
- }
C#數(shù)據(jù)結(jié)構(gòu)與算法之隊列程序運行結(jié)果如下:
C#數(shù)據(jù)結(jié)構(gòu)與算法之隊列相關(guān)的內(nèi)容就向你介紹到這里,希望通過C#數(shù)據(jù)結(jié)構(gòu)與算法之隊列的介紹使你對C#數(shù)據(jù)結(jié)構(gòu)與算法有所了解。
【編輯推薦】