C#棧和隊(duì)列詳解
一、Stack 棧集合(先入后出)
1. 核心概念
棧是存儲(chǔ)數(shù)據(jù)的容器,遵循 先入后出(后進(jìn)先出 LIFO) 規(guī)則。
- 數(shù)據(jù)存入:入棧(Push)
- 數(shù)據(jù)取出:出棧(Pop)
- 最先存進(jìn)去的在棧底,最后存的在棧頂,只能操作棧頂元素
2. 兩種定義方式
// 1. 泛型棧(推薦、類型安全、無裝箱拆箱)
Stack<int> stack = new Stack<int>();
// 2. 非泛型棧(老舊、object存儲(chǔ)、類型不安全、有裝箱拆箱)
Stack stack1 = new Stack();
stack1.Push("張三"); //棧底
stack1.Push("李四");
stack1.Push("王五"); //棧頂3. 棧核心五大方法
// 1. Push():入棧,數(shù)據(jù)壓入棧頂
stack1.Push("張三");
stack1.Push("李四");
stack1.Push("王五");
// 2. Pop():出棧,刪除并返回【棧頂】元素
Console.WriteLine(stack1.Pop()); //輸出:王五
// 3. Peek():查看棧頂,只返回不刪除
Console.WriteLine(stack1.Peek()); //輸出:李四
// 4. Count:獲取棧中元素個(gè)數(shù)
Console.WriteLine(stack1.Count);
// 5. 輔助方法
stack1.Clear(); //清空所有元素
stack1.Contains("張三"); //判斷是否包含指定元素4. 棧的遍歷方式
棧沒有索引,不能直接下標(biāo)遍歷,需轉(zhuǎn)數(shù)組或 foreach
// 方式1:轉(zhuǎn)數(shù)組遍歷
for (int i = 0; i < stack1.Count; i++)
{
Console.WriteLine(stack1.ToArray()[i]);
}
// 方式2:foreach 遍歷
foreach (var i in stack1)
{
Console.WriteLine(i + "-----");
}5. 棧執(zhí)行流程演示
- 入棧順序:張三 → 李四 → 王五
- 棧內(nèi)結(jié)構(gòu):棧底【張三、李四、王五】棧頂
- Pop() 彈出:先出王五,再出李四,最后出張三
二、Queue 隊(duì)列集合(先入先出)
1. 核心概念
隊(duì)列遵循 先入先出(先進(jìn)先出 FIFO) 規(guī)則,類似排隊(duì)。
- 數(shù)據(jù)存入:入隊(duì)(Enqueue)
- 數(shù)據(jù)取出:出隊(duì)(Dequeue)
- 先排隊(duì)的先出去,后排隊(duì)的后出去
2. 定義與基礎(chǔ)用法
// 泛型隊(duì)列(項(xiàng)目推薦、類型安全)
Queue<string> queue = new Queue<string>();
// 入隊(duì):從隊(duì)尾添加元素
queue.Enqueue("hello1");
queue.Enqueue("hello2");
queue.Enqueue("hello3");3. 隊(duì)列核心方法
// 1. Dequeue():出隊(duì),刪除并返回【隊(duì)首】第一個(gè)元素
Console.WriteLine(queue.Dequeue()); //hello1
// 2. Peek():只查看隊(duì)首元素,不刪除
Console.WriteLine(queue.Peek()); //hello2
// 3. 其他方法
Console.WriteLine(queue.Count); //元素個(gè)數(shù)
queue.Clear(); //清空
queue.Contains("hello2"); //判斷包含4. 隊(duì)列遍歷
foreach (var item in queue)
{
Console.WriteLine(item);
}
5. 隊(duì)列執(zhí)行流程
- 入隊(duì)順序:hello1 → hello2 → hello3
- 隊(duì)首 hello1,隊(duì)尾 hello3
- Dequeue 優(yōu)先取出最先進(jìn)來的元素
三、Stack 與 Queue 核心區(qū)別(必背)
集合 | 規(guī)則 | 存入方法 | 取出方法(刪+返) | 查看方法(只返不刪) |
|---|---|---|---|---|
Stack 棧 | 先入后出 | Push() | Pop() 取棧頂 | Peek() 看棧頂 |
Queue 隊(duì)列 | 先入先出 | Enqueue() | Dequeue() 取隊(duì)首 | Peek() 看隊(duì)首 |
四、所有集合訪問方式終極總結(jié)
- 數(shù)組、List、ArrayList、SortedList:支持索引 [下標(biāo)] 訪問
- Dictionary、Hashtable:只能 Key 訪問,無索引
- Stack、Queue:無索引,只能專用方法存取,不能下標(biāo)訪問
五、終極背誦口訣
- 棧 Stack:壓棧Push、彈棧Pop,后進(jìn)先出
- 隊(duì)列 Queue:入隊(duì)Enqueue、出隊(duì)Dequeue,先進(jìn)先出
- Peek:只查看、不刪除
- 泛型集合安全高效,非泛型老舊淘汰
到此這篇關(guān)于C#棧和隊(duì)列詳解的文章就介紹到這了,更多相關(guān)C#棧和隊(duì)列內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#模擬鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)例解析
這篇文章主要介紹了C#模擬鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)例解析,包括隊(duì)雙向鏈表的模擬方法,例子中隊(duì)鏈表的操作也有很好的說明,需要的朋友可以參考下2016-04-04
C#自動(dòng)化實(shí)現(xiàn)高效統(tǒng)計(jì)Word文檔字?jǐn)?shù)
在日常開發(fā)或工作中,我們經(jīng)常會(huì)遇到需要統(tǒng)計(jì) Word 文檔字?jǐn)?shù)的需求,本文將利用 C# 結(jié)合強(qiáng)大的第三方庫 Spire.Doc for .NET輕松實(shí)現(xiàn) Word 文檔的字?jǐn)?shù)統(tǒng)計(jì)功能,希望對大家有所幫助2026-01-01
實(shí)現(xiàn)ASP.NET無刷新下載并提示下載完成的開發(fā)思路
這篇文章主要介紹了實(shí)現(xiàn)ASP.NET無刷新下載并提示下載完成的開發(fā)思路的相關(guān)資料,需要的朋友可以參考下2015-10-10

