新建網(wǎng)站外鏈怎么做每日一則新聞?wù)?/h1>
目錄
一、概述
二、基本的用法
1.入棧
2.出棧
Pop 方法
Peek 方法
3.判斷元素是否存在
4.獲取 Stack 的長(zhǎng)度
5.遍歷 Stack
6.清空容器
7.Stack 泛型類(lèi)
三、結(jié)束
一、概述
棧表示對(duì)象的簡(jiǎn)單后進(jìn)先出 (LIFO) 非泛型集合。
Stack 和 List 一樣是一種儲(chǔ)存容器,它遵循先進(jìn)后出的原則,能夠存儲(chǔ)任意類(lèi)型,但并不能獲取到指定的位置,只能存入和取出,取出元素后,Stack 內(nèi)部的元素自動(dòng)刪除。
詳細(xì)API參考:Stack 類(lèi) (System.Collections) | Microsoft Learn
二、基本的用法
1.入棧
入棧使用 push 方法,這里可以添加任意類(lèi)型
using System;
using System.Collections;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack stack = new Stack();stack.Push("a");stack.Push("b");stack.Push(3);stack.Push(4.5);Console.ReadKey();}}
}
2.出棧
出棧常用的方法有兩種,第一種:
Pop 方法
using System;
using System.Collections;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack stack = new Stack();stack.Push("a");stack.Push("b");stack.Push(3);stack.Push(4.5);var value = stack.Pop();Console.WriteLine(value);Console.WriteLine("count:" + stack.Count);Console.ReadKey();}}
}
運(yùn)行
這里可以看到,最后添加的 4.5 ,被最先取出來(lái),取出來(lái)的同時(shí),也從 stack 中刪除了,此時(shí)的長(zhǎng)度為3,?這就是概述中描述的?先進(jìn)后出 原則,聽(tīng)起來(lái)有點(diǎn)難以理解,其實(shí)就是,誰(shuí)最后一個(gè)添加進(jìn)來(lái),誰(shuí)就第一個(gè)出去,專逮住隊(duì)伍的最后一個(gè)往出扯。
第二種:
Peek 方法
using System;
using System.Collections;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack stack = new Stack();stack.Push("a");stack.Push("b");stack.Push(3);stack.Push(4.5);var value = stack.Peek();Console.WriteLine(value);Console.WriteLine("count:" + stack.Count);Console.ReadKey();}}
}
運(yùn)行
Peek 可以根據(jù)后進(jìn)先出的原則取出一個(gè)元素,它并不會(huì)像 Pop 方法一樣,把元素刪除,但是也只能取一個(gè)元素,看下面代碼,重復(fù)的獲取是沒(méi)用的,要想數(shù)據(jù)一個(gè)個(gè)取出來(lái),還是得老老實(shí)實(shí)的用 Pop 方法。
using System;
using System.Collections;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack stack = new Stack();stack.Push("a");stack.Push("b");stack.Push(3);stack.Push(4.5);var value1 = stack.Peek();var value2 = stack.Peek();var value3 = stack.Peek();Console.WriteLine(value1);Console.WriteLine(value2);Console.WriteLine(value3);Console.ReadKey();}}
}
運(yùn)行
3.判斷元素是否存在
使用?Contains 方法可以判斷元素是否存在,如下代碼
using System;
using System.Collections;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack stack = new Stack();stack.Push("a");stack.Push("b");stack.Push(3);stack.Push(4.5);Console.WriteLine("是否存在:" + stack.Contains(4.5));Console.ReadKey();}}
}
運(yùn)行
4.獲取 Stack 的長(zhǎng)度
長(zhǎng)度的獲取和 List 一樣,使用 Count 屬性
using System;
using System.Collections;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack stack = new Stack();stack.Push("a");stack.Push("b");stack.Push(3);stack.Push(4.5);Console.WriteLine("長(zhǎng)度:" + stack.Count);Console.ReadKey();}}
}
運(yùn)行
5.遍歷 Stack
Stack 可以使用 foreach 遍歷,并且不會(huì)移除元素
using System;
using System.Collections;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack stack = new Stack();stack.Push("a");stack.Push("b");stack.Push(3);stack.Push(4.5);foreach (var item in stack){Console.WriteLine(item);}Console.WriteLine("長(zhǎng)度:" + stack.Count);Console.ReadKey();}}
}
?運(yùn)行
6.清空容器
清除 stack 使用?Clear 方法
using System;
using System.Collections;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack stack = new Stack();stack.Push("a");stack.Push("b");stack.Push(3);stack.Push(4.5);stack.Clear();Console.WriteLine("長(zhǎng)度:" + stack.Count);Console.ReadKey();}}
}
運(yùn)行
7.Stack 泛型類(lèi)
Stack 泛型類(lèi) 和 Stack 的用法其實(shí)沒(méi)有什么不同,Stack 泛型類(lèi) 只是在使用時(shí)多了一個(gè)約束,不能和 Stack 標(biāo)準(zhǔn)形式一樣,可以添加任意類(lèi)型到棧中,而是使用固定的元素類(lèi)型
using System;
using System.Collections.Generic;namespace Stack_Test
{internal class Program{static void Main(string[] args){Stack<string> stack = new Stack<string>();//將元素入棧stack.Push("a");stack.Push("b");stack.Push("c");//棧的元素個(gè)數(shù)int count = stack.Count;//是否包含指定的元素bool b = stack.Contains("a");//Stack.Peek() 方法返回頂部的對(duì)象而不將其從堆棧中移除string name = stack.Peek();// Pop 把元素出棧,棧中就沒(méi)有這個(gè)元素了string s1 = stack.Pop();Console.WriteLine(s1);string s2 = stack.Pop();Console.WriteLine(s2);string s3 = stack.Pop();Console.WriteLine(s3);Console.ReadKey();}}
}
三、結(jié)束
最后,我們來(lái)看看 Stack 有那些特點(diǎn):
先進(jìn)后出,存在裝箱拆箱,存儲(chǔ)任意類(lèi)型,無(wú)法使用 for 循環(huán)遍歷查看元素,無(wú)法獲取指定位置元素,只能查看獲取棧頂元素。
end