C#隊(duì)列的簡(jiǎn)單使用
隊(duì)列的特性很簡(jiǎn)答,就是先進(jìn)先出,一般利用數(shù)組來(lái)實(shí)現(xiàn)。
實(shí)現(xiàn)隊(duì)列自然要實(shí)現(xiàn)幾個(gè)函數(shù):入隊(duì),出隊(duì),判斷隊(duì)滿(mǎn),判斷隊(duì)空,獲得隊(duì)頭,隊(duì)尾。
實(shí)現(xiàn)隊(duì)列的關(guān)鍵在于隊(duì)頭指針和隊(duì)尾指針的設(shè)置:
- 假設(shè)初始狀態(tài)下,隊(duì)頭指針為0,隊(duì)尾指針為-1,那么兩個(gè)指針指的位置分別就是隊(duì)頭與隊(duì)尾。當(dāng)隊(duì)尾的下一個(gè)是隊(duì)頭時(shí)隊(duì)空,當(dāng)隊(duì)尾的下下個(gè)是隊(duì)頭時(shí)隊(duì)滿(mǎn)。
- 假設(shè)初始狀態(tài)下,隊(duì)頭隊(duì)尾指針都為0,那么隊(duì)尾指針指的是隊(duì)尾,而隊(duì)頭指針的下一個(gè)位置才是隊(duì)頭。當(dāng)兩指針相等時(shí)隊(duì)空,當(dāng)隊(duì)尾指針的下一個(gè)是隊(duì)頭時(shí)隊(duì)滿(mǎn)。
如果我們畫(huà)個(gè)圖就會(huì)發(fā)現(xiàn),不管怎么設(shè)置指針,隊(duì)滿(mǎn)時(shí)數(shù)組一定還有一個(gè)空位。所以數(shù)組長(zhǎng)度應(yīng)該比隊(duì)列長(zhǎng)度多1。
同時(shí)為了方便,我們會(huì)把隊(duì)列指針設(shè)置為循環(huán)的,即每次移動(dòng)后取余數(shù)組的長(zhǎng)度。
public class MyCircularQueue { private int front; private int rear; private int[] queue; public MyCircularQueue(int k) { queue=new int[k+1]; front=0; rear=-1; } public bool EnQueue(int value) { if((rear+2)%queue.Length==front) return false; rear++;rear=rear%queue.Length; queue[rear]=value; return true; } public bool DeQueue() { if((rear+1)%queue.Length==front) return false; front++;front=front%queue.Length; return true; } public int Front() { if(!IsEmpty()) return queue[front]; else return -1; } public int Rear() { if(!IsEmpty()) return queue[rear]; else return -1; } public bool IsEmpty() { if((rear+1)%queue.Length==front) return true; else return false; } public bool IsFull() { if((rear+2)%queue.Length==front) return true; else return false; } }
實(shí)際上C#也有一個(gè)隊(duì)列庫(kù),如下圖所示
需要注意的是Dequeque和ToArray的返回類(lèi)型都是object,可能需要進(jìn)行強(qiáng)制轉(zhuǎn)換
class Program { static void Main(string[] args) { Queue q = new Queue(); q.Enqueue('A'); char ch = (char)q.Dequeue(); Console.WriteLine("The removed value: {0}", ch); } }
到此這篇關(guān)于C#隊(duì)列的簡(jiǎn)單使用的文章就介紹到這了,更多相關(guān)C#隊(duì)列內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c#數(shù)據(jù)綁定之向查詢(xún)中添加參數(shù)(.Net連接外部數(shù)據(jù)庫(kù))
本實(shí)例主要練習(xí)了ADO.Net連接到外部數(shù)據(jù)庫(kù)的基礎(chǔ)上,向查詢(xún)中添加參數(shù)。使用的是ACCESS數(shù)據(jù)庫(kù)2014-04-04C#開(kāi)發(fā)微信門(mén)戶(hù)及應(yīng)用(5) 用戶(hù)分組信息管理
這篇文章主要為大家詳細(xì)介紹了C#開(kāi)發(fā)微信門(mén)戶(hù)及應(yīng)用第五篇,用戶(hù)分組信息管理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06C# OpenCvSharp實(shí)現(xiàn)圖片批量改名
這篇文章主要為大家詳細(xì)介紹了C#如何結(jié)合OpenCvSharp實(shí)現(xiàn)圖片批量改名功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03Ruby創(chuàng)建數(shù)組方法總結(jié)
在本篇文章里小編給大家分享了關(guān)于Ruby創(chuàng)建數(shù)組方法的知識(shí)點(diǎn)內(nèi)容,對(duì)戲有興趣的朋友們學(xué)習(xí)下。2019-01-01C#實(shí)現(xiàn)讀取USB轉(zhuǎn)串口參數(shù)并顯示在ComboBox
在很多應(yīng)用程序中,尤其是那些需要與外部硬件通信的程序中,自動(dòng)檢測(cè)和讀取串口參數(shù)是一個(gè)非常有用的功能,下面我們就來(lái)看看如何在C#中實(shí)現(xiàn)這一功能吧2024-01-01Unity實(shí)現(xiàn)OCR文字識(shí)別功能
這篇文章主要介紹了通過(guò)Unity接入百度AI接口,實(shí)現(xiàn)OCR文字識(shí)別功能,文中的實(shí)現(xiàn)步驟講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定的參考價(jià)值,需要的可以了解一下2022-01-01C#實(shí)現(xiàn)的封裝CURD到SqlHelper類(lèi)用法簡(jiǎn)單分析
這篇文章主要介紹了C#實(shí)現(xiàn)的封裝CURD到SqlHelper類(lèi)用法,涉及數(shù)據(jù)庫(kù)相關(guān)配置方法及SqlHelper類(lèi)的簡(jiǎn)單使用技巧,代碼中包含了較為詳盡的注釋便于理解,需要的朋友可以參考下2017-11-11