C# 通俗易懂的介绍基础知识(七)——栈Stack(从日常生活开始讲解)

news2024/11/15 20:03:19

目录

一、前言

二、栈是排列方式

三、栈的单词

四、程序中的栈

五、栈的方法

1.声明并初始化栈

2.往栈里放东西(学名:入栈)

3.从栈往外拿东西 (学名:出栈)

4.清空栈

5.遍历 Stack

 6.获取Stack的长度

 7.看看某个元素在不在栈里

六、作者的碎碎念


一、前言

老规矩,我们从熟悉的知识点先入手。我们常用int(整数),float(小数),string(字符串)等,这些都是单个的内容,一个整数,一个小数,一个字符串。。。。。。

当我们需要用一堆的时候,就会出现int数组,float数组,string数组。。。。。。和int列表,float列表,string列表。。。。。。抛开单个的不谈,无论是数组还是列表,都有一个特点,你想要哪个就能拿到哪个,想要扔掉哪个,就可以扔掉哪个,就像排列在书架上的书,我可以随手抽一个走,也可以随便插一个进去。(如图1所示)

图1 一排书

二、栈是排列方式

栈在现实生活中是一种摆放方式。

但有时,我们并不希望随时可以抽取任何一本书,我们需要顺序。(如图2所示)

图2 网球桶

例如,我们现在拥有一个网球桶,我们往里面装网球,底部的A球是我们最先装的,但我们在拿球的时候只能把它上方的都拿掉,才能把最后一个拿出来,在图片这个例子中有一个好处,我们可以把上面的球都打坏了,或者弄丢了,我们才可以拿到下一个球,这样可以保证下面的球只要不用,就一直是新的。


还一个生活中的例子:

超市的零食只有把最外面的拿掉,才能拿到里面的(如图3所示)。

图3 超市零食

在这个图片案例中,这样摆放零食,最大程度上能保证零食的整齐。

这种排列方式最大的特点是:排队摆放,只能从最上方放进去,也只能从最上方拿出来。

三、栈的单词

 栈在程序里用的单词是Stack,Stack在英语中的翻译为:放成整齐的一叠

这个解释是不是和我们前面摆网球和零食很像了?是的!

四、程序中的栈

那到底为什么要弄这样一种摆放方式?在程序中到底有什么用?

我们举一个非常常见的例子,我们在关网页,或者关应用时,往往不能直接使用第二层,而是必须先把最上层关了,才能点下层。(如图4所示)

图4 一堆窗口

如果你也想拥有这样一堆窗口,从最上面挨个关闭它,你就可以使用栈。


游戏制作养了个羊时,也有这个机制。(如图5所示)

图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.Pop()

 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站搜索菌菌巧乐兹,部分文章有视频讲解~ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2241036.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue全栈开发旅游网项目(10)-用户管理后端接口开发

1.异步用户登录\登出接口开发 1.设计公共响应数据类型 文件地址:utils/response404.py from django.http import JsonResponseclass BadRequestJsonResponse(JsonResponse):status_code 400def __init__(self, err_list, *args, **kwargs):data {"error_c…

PostgreSQL中如果有Left Join的时候索引怎么加

在PostgreSQL中,当你的查询包含多个LEFT JOIN和WHERE条件时,合理地添加索引可以显著提高查询性能。以下是一些具体的优化步骤和建议: 1. 分析查询 使用 EXPLAIN ANALYZE 命令分析你的查询,了解查询的执行计划,识别出连…

A027-基于Spring Boot的农事管理系统

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

Vue的基础使用

一、为什么要学习Vue 1.前端必备技能 2.岗位多,绝大互联网公司都在使用Vue 3.提高开发效率 4.高薪必备技能(Vue2Vue3) 二、什么是Vue 概念:Vue (读音 /vjuː/,类似于 view) 是一套 构建用户界面 的 渐进式 框架…

Innovus Flexible H-tree and Multi-tap Clock Flow Lab实操系列教程(Day1)

我们都知道时钟树综合在数字IC后端实现中的重要性。做clock tree主要有传统clock tree做法,H tree,Flexible H-tree,fishbone等做法。接下去小编将拿cadence官方的这份Innovus Flexible H-tree and Multi-Tap Clock Flow和对应的lab data来做…

【MySQL】MySQL数据库安装以及报错处理技巧

前言: 本节内容讲述在Ubuntu环境下怎么进行MySQL的安装。 以及一些安装过程中遇到的报错如何处理的问题。 ps:注意, 本篇文章不是图形化界面的MySQL安装教程哦。想要安装图形化界面的MySQL的友友们可以另寻资源了。 目录 更新软件包列表 安装M…

ISP——你可以从这里起步(二)

接上一篇,上一篇是原理篇,这一篇是实战篇,为了实现下面框图中的不完美ISP。 第一章 做一张RAW图自己用 不是所有的人都能获得raw图,即使获得了raw图也需要对应的sensor参数才能把它用起来,所以我找了一条野路子可以把…

CTF攻防世界小白刷题自学笔记14

fileclude,难度:1,方向:Web 题目来源:CTF 题目描述:好多file呀! 给一下题目链接:攻防世界Web方向新手模式第17题。 打开一看,这熟悉的味道,跟上一篇文章基本一摸一样的&#xff…

CTFHub每日练习

文章目录 技能树CTF Web信息泄露目录遍历PHPINFO备份文件下载网站源码bak文件vim缓存.DS_Store Git泄露Logstash index方法一方法二 密码口令弱口令 技能树 CTF Web 信息泄露 目录遍历 PHPINFO 备份文件下载 网站源码 当开发人员在线上环境中对源代码进行了备份操作&#x…

使用CNN进行验证码识别:深度学习与图像预处理教程

验证码(CAPTCHA)广泛用于区分人类和自动化程序(如机器人),通常由扭曲的字母、数字或符号组成。为了实现验证码的自动识别,深度学习尤其是卷积神经网络(CNN)非常有效。本文将带你一起…

Springboot采用jasypt加密配置

目录 前言 一、Jasypt简介 二、运用场景 三、整合Jasypt 2.1.环境配置 2.2.添加依赖 2.3.添加Jasypt配置 2.4.编写加/解密工具类 2.5.自定义加密属性前缀和后缀 2.6.防止密码泄露措施 2.61.自定义加密器 2.6.2通过环境变量指定加密盐值 总结 前言 在以往的多数项目中&#xff0…

讯飞、阿里云、腾讯云:Android 语音合成服务对比选择

在 移动端 接入语音合成方面,讯飞和腾讯云等都是优秀的选择,但各有其特点和优势。咱们的需求是需要支持普通话/英语/法语三种语言,以下是对各个平台的详细比较: 一、讯飞语音合成介绍 与语音听写相反,语音合成是将一段…

python爬虫获得店铺的所有商品

在编写Python爬虫以获取店铺的所有商品信息时,通常涉及到发送HTTP请求、解析响应内容以及处理API返回的数据。以下是一个详细的Python爬虫示例,用于获取店铺的商品信息。这个示例假设API返回的是JSON格式的数据,并且需要API密钥进行认证。 步…

java程序打包及执行 jar命令及运行jar文件

java程序打包及执行 jar命令及运行jar文件 打包命令: 安装完成jdk之后采用 jar命令进行打包 jar -cvfe ddd.jar -C bin/ddd.java 打包 ddd.java 文件 jar -cvfe dddd.jar -C . 注意 -C 后面的点. 表示当前目录下所有 如图: 运行jar 文件 java -class…

计算机视觉空域处理完整版——超详细图文解

空域处理 图像空域处理 a.线性滤波b.非线性滤波c.二值图像处理方法 数学形态学连通成分标记 “点运算”是在不改变图像大小、几何形状以及局部结构的情况下,对像素值进行修改,新图像的像素值只与 原图像同一位置的像素值有关。 灰度级变换(线性变换,非…

【HarmonyOS】Hdc server port XXXX has been used.Configure environment variable

【HarmonyOS】Hdc server port XXXX has been used.Configure environment variable 一、 问题背景: 无法调试debug应用,IDE右下角显示该弹窗: Hdc server port XXXX has been used.Configure environment variable ‘OHOS_HDC_SERVER_POR…

立体工业相机提升工业自动化中的立体深度感知

深度感知对仓库机器人应用至关重要,尤其是在自主导航、物品拾取与放置、库存管理等方面。 通过将深度感知与各种类型的3D数据(如体积数据、点云、纹理等)相结合,仓库机器人可以在错综复杂环境中实现自主导航,物品检测…

深度解析:Android APP集成与拉起微信小程序开发全攻略

目录 一、背景以及功能介绍 二、Android开发示例 2.1 下载 SDK 2.2 调用接口 2.3 获取小程序原始Id 2.4 报错提示:bad_param 2.4.1 错误日志 2.4.2 解决方案 相关推荐 一、背景以及功能介绍 需求:产品经理需要APP跳转到公司的小程序(最好指定页…

stream学习

Stream流 定义 Steam流&#xff0c;用于操作集合或者数组中的数据&#xff0c;大量结合了Lamda表达式的语法风格&#xff0c;代码简洁。 重点&#xff1a; 流只能收集一次 ​ 获取Stream流 Stream流要与数据源建立连接。 1.list ​ 直接调用steam()即可 // list List<Stri…

python基础大杂烩

命令提示符程序&#xff0c;输入python&#xff0c;运行python程序 代码通过解释器程序翻译给计算机去执行 命令提示符输入的python本质上就是调用D:/dev/python/python3.12.5/python.exe这个解释器程序 有python程序将输入的代码翻译成二进制的0和1&#xff0c;去向计算机去运…