C# 通俗易懂的介绍基础知识(七)——栈Stack(从日常生活开始讲解)
目录
一、前言
二、栈是排列方式
三、栈的单词
四、程序中的栈
五、栈的方法
1.声明并初始化栈
2.往栈里放东西(学名:入栈)
3.从栈往外拿东西 (学名:出栈)
4.清空栈
5.遍历 Stack
6.获取Stack的长度
7.看看某个元素在不在栈里
六、作者的碎碎念
一、前言
老规矩,我们从熟悉的知识点先入手。我们常用int(整数),float(小数),string(字符串)等,这些都是单个的内容,一个整数,一个小数,一个字符串。。。。。。
当我们需要用一堆的时候,就会出现int数组,float数组,string数组。。。。。。和int列表,float列表,string列表。。。。。。抛开单个的不谈,无论是数组还是列表,都有一个特点,你想要哪个就能拿到哪个,想要扔掉哪个,就可以扔掉哪个,就像排列在书架上的书,我可以随手抽一个走,也可以随便插一个进去。(如图1所示)
二、栈是排列方式
栈在现实生活中是一种摆放方式。
但有时,我们并不希望随时可以抽取任何一本书,我们需要顺序。(如图2所示)
例如,我们现在拥有一个网球桶,我们往里面装网球,底部的A球是我们最先装的,但我们在拿球的时候只能把它上方的都拿掉,才能把最后一个拿出来,在图片这个例子中有一个好处,我们可以把上面的球都打坏了,或者弄丢了,我们才可以拿到下一个球,这样可以保证下面的球只要不用,就一直是新的。
还一个生活中的例子:
超市的零食只有把最外面的拿掉,才能拿到里面的(如图3所示)。
在这个图片案例中,这样摆放零食,最大程度上能保证零食的整齐。
这种排列方式最大的特点是:排队摆放,只能从最上方放进去,也只能从最上方拿出来。
三、栈的单词
栈在程序里用的单词是Stack,Stack在英语中的翻译为:放成整齐的一叠
这个解释是不是和我们前面摆网球和零食很像了?是的!
四、程序中的栈
那到底为什么要弄这样一种摆放方式?在程序中到底有什么用?
我们举一个非常常见的例子,我们在关网页,或者关应用时,往往不能直接使用第二层,而是必须先把最上层关了,才能点下层。(如图4所示)
如果你也想拥有这样一堆窗口,从最上面挨个关闭它,你就可以使用栈。
游戏制作养了个羊时,也有这个机制。(如图5所示)
在这个游戏的两侧卡片中,你只能使用最上层的卡牌,被压着的都不能使用,这里也可以用栈来写。
五、栈的方法
经过以上讲解后,你可能发现,栈的功能也很少。
1.声明并初始化栈
Stack stack = new Stack();
2.往栈里放东西(学名:入栈)
stack.Push()
这里放了两个字符串,两个数字
Stack stack = new Stack();
stack.Push("a");
stack.Push("b");
stack.Push(0);
stack.Push(1);
3.从栈往外拿东西 (学名:出栈)
stack.Push()
Stack stack = new Stack();
stack.Push("a");
stack.Push("b");
stack.Push(0);
stack.Push(1);
//因为1是最后放的,所以1在最上面
//从最上面把1拿走,顺便让obj = 1
var obj = stack.Pop();
//接下来栈里只有三个东西了
4.清空栈
stack.Clear()
Stack stack = new Stack();
stack.Push("a");
stack.Push("b");
stack.Push(0);
stack.Push(1);
//把上面就都删了
stack.Clear();
以上都是直接操作的方法,就是直接上手的方法
还有一些方法叫做,我看看,我不动
5.遍历 Stack
这里就像之前的网球,因为是透明的,我全部看一遍,但我没有拿走,也没有放进去。
Stack stack = new Stack();
stack.Push("a");
stack.Push("b");
stack.Push(0);
stack.Push(1);
foreach (var item in stack)
{
//把每个都打印一遍
Console.WriteLine(item);
}
6.获取Stack的长度
Stack stack = new Stack();
stack.Push("a");
stack.Push("b");
stack.Push(0);
stack.Push(1);
//打印长度
Console.WriteLine(stack.Count);
7.看看某个元素在不在栈里
Stack stack = new Stack();
stack.Push("a");
stack.Push("b");
stack.Push(0);
stack.Push(1);
//打印里面有到底有没有a
Console.WriteLine(stack.Contains("a"));
六、作者的碎碎念
如果希望看见更多简单的讲解,给我个赞吧~
b站搜索菌菌巧乐兹,部分文章有视频讲解~