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.Pop()
Stack stack = new Stack();stack.Push("a");stack.Push("b");stack.Push(0);stack.Push(1);//因为1是最后放的,所以1在最上面
//从最上面把1拿走,顺便让obj = 1var 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站搜索菌菌巧乐兹,部分文章有视频讲解~
相关文章:

C# 通俗易懂的介绍基础知识(七)——栈Stack(从日常生活开始讲解)
目录 一、前言 二、栈是排列方式 三、栈的单词 四、程序中的栈 五、栈的方法 1.声明并初始化栈 2.往栈里放东西(学名:入栈) 3.从栈往外拿东西 (学名:出栈) 4.清空栈 5.遍历 Stack 6.获取Stack的长…...

学习threejs,使用第一视角控制器FirstPersonControls控制相机
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️第一视角控制器FirstPerson…...

odoo17 前端 在头像下拉 dropdown 自定义菜单
odoo17 前端 在头像下拉 dropdown 自定义菜单 其实很简单, 我们先找到原来已经创建好的, 找到代码位置 使用 我的资料 为例 odoo-17.0\addons\hr\static\src\user_menu\my_profile.js /** odoo-module **/import { _t } from "web/core/l10n/translation"; import …...

如何管理好自己的LabVIEW项目
在LabVIEW项目开发中,项目管理对于提高开发效率、确保项目质量、减少错误和维护成本至关重要。以下从项目规划、代码管理、测试与调试、版本控制、团队协作等方面,分享LabVIEW项目管理的体会。 1. 项目规划与需求分析 关键步骤: 需求分析…...

GPT-5 要来了:抢先了解其创新突破
Microsoft 的工程师计划于 2024 年 11 月在 Azure 上部署 Orion (GPT-5)。虽然这一版本不会向公众开放,但其上线被视为人工智能领域的一个重要里程碑,并将产生深远的影响。 文章目录 GPT-5 真的要来了GPT-4 的局限性GPT-5 的创新突破与遗留挑战GPT-5 预期…...
@ComponentScan:Spring Boot中的自动装配大师
文章目录 1. 什么是ComponentScan注解?2. 为什么需要ComponentScan注解?3. 如何使用ComponentScan注解?4. ComponentScan注解的高级用法5. 注意事项6. 结语推荐阅读文章 在Spring Boot的世界里,自动装配(Auto-wiring&a…...
uniapp 面试题总结常考
uniapp 文件详情 ├── pages # 页面文件夹 │ │── index # index文件夹 │ │ │── index.vue # index页面 ├── static # 静态资源(类似于图片 字体图标等) │ …...

花了36元给我的个人博客上了一道防御
前言 双11活动薅了个羊毛,1折的价格买了一年的EdgeOne,正好可以为我的个人博客站点保驾护航。本文就来看看个人博客接入EdgeOne后的效果,如果也想薅羊毛的,赶紧去双11活动页面,不要错过这次机会。 EdgeOne 介绍 先简…...
浅谈C++之内存管理
一、基本介绍 内存管理是C最令人切齿痛恨的问题,也是C最有争议的问题,C高手从中获得了更好的性能,更大的自由,C菜鸟的收获则是一遍一遍的检查代码和对C的痛恨,但内存管理在C中无处不在,内存泄漏几乎在每个C…...
719. 找出第 K 小的数对距离
目录 题目解法 题目 数对 (a,b) 由整数 a 和 b 组成,其数对距离定义为 a 和 b 的绝对差值。 给你一个整数数组 nums 和一个整数 k ,数对由 nums[i] 和 nums[j] 组成且满足 0 < i < j < nums.length 。返回 所有数对距离中 第 k 小的数对距离。…...

【图像压缩感知】论文阅读:Self-supervised Scalable Deep Compressed Sensing
tips:本文为个人阅读论文的笔记,仅作为学习记录所用。 Title:Self-supervised Scalable Deep Compressed Sensing Journal:IJCV 2024 代码链接:GitHub - Guaishou74851/SCNet: Self-Supervised Scalable Deep Comp…...

Swift 宏(Macro)入门趣谈(一)
概述 苹果在去年 WWDC 23 中就为 Swift 语言新增了“其利断金”的重要小伙伴 Swift 宏(Swift Macro)。为此,苹果特地用 2 段视频(入门和进阶)颇为隆重的介绍了它。 那么到底 Swift 宏是什么?有什么用&…...
linux常见资源查询命令(持续更新)
年纪大了,很多命令记不住了,但偶尔也需要用到,通过搜索也需要点时间,特此记录。 不同操作系统命令会有所区别,下面是大部分时候工作的机器系统: CentOS release 7.5 (Final)Kernel \r on an \m 1、实时查…...

JavaWeb:文件上传1
欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…...
C++ 中的异常处理机制是怎样的?
异常处理的基本概念: 异常: 程序在运行时发生的错误或意外情况。 抛出异常: 使用 throw 关键字将异常传递给调用堆栈。 捕获异常: 使用 try-catch 块捕获和处理异常。 异常类型: 表示异常类别的标识符。 异常处理流程: 抛出异常: 当检测到错误或意…...

SwiftUI-基础入门
开发OS X 图形应用界面时有三种实现方式:XIB、Storyboard、SwiftUI。Storyboard基于XIB做了优化,但XIB基本被放弃了,而SwiftUI是苹果公司后来开发的一套编程语言,用来平替Objective-C。虽然现在Swift 6 还是有些不完善的地方&…...

C++builder中的人工智能(20):如何在C++中开发一个简单的Hopfield网络
在AI技术的发展历史中,模式识别模型是最伟大的AI技术之一,尤其是从像素图像中读取文本。其中一个是Hopfield网络(或称为Ising模型的神经网络或Ising–Lenz–Little模型),这是一种递归神经网络形式,由John J…...

video2gif容器构建指南
一、介绍 1.项目概述 Video2Gif 项目旨在提供一种便捷的方式,让用户能够将视频中的精彩片段快速转换为 GIF 动画。GIF 动画因其循环播放、文件体积小等特点,在社交媒体、聊天工具中广泛应用,用于表达情感、分享趣事等。 2.核心功能 视频导…...
探秘Spring Boot中的@Conditional注解
文章目录 1. 什么是Conditional注解?2. 为什么需要Conditional注解?3. 如何使用Conditional注解?4. Conditional注解的高级用法5. 注意事项6. 结语推荐阅读文章 在Spring Boot的世界里,配置的灵活性和多样性是至关重要的。有时候&…...
树形dp总结
这类题型在 dp 中很常见,于是做一个总结吧!!! 最经典的题:没有上司的舞会 传送门:没有上司的舞会 - 洛谷 状态表示: dp[i][0] 为 以 i 为根的子树中,选择 i 节点的最大欢乐值 d…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...