当前位置: 首页 > news >正文

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

目录

一、前言

二、栈是排列方式

三、栈的单词

四、程序中的栈

五、栈的方法

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 = 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 组成&#xff0c;其数对距离定义为 a 和 b 的绝对差值。 给你一个整数数组 nums 和一个整数 k &#xff0c;数对由 nums[i] 和 nums[j] 组成且满足 0 < i < j < nums.length 。返回 所有数对距离中 第 k 小的数对距离。…...

【图像压缩感知】论文阅读:Self-supervised Scalable Deep Compressed Sensing

tips&#xff1a;本文为个人阅读论文的笔记&#xff0c;仅作为学习记录所用。 Title&#xff1a;Self-supervised Scalable Deep Compressed Sensing Journal&#xff1a;IJCV 2024 代码链接&#xff1a;GitHub - Guaishou74851/SCNet: Self-Supervised Scalable Deep Comp…...

Swift 宏(Macro)入门趣谈(一)

概述 苹果在去年 WWDC 23 中就为 Swift 语言新增了“其利断金”的重要小伙伴 Swift 宏&#xff08;Swift Macro&#xff09;。为此&#xff0c;苹果特地用 2 段视频&#xff08;入门和进阶&#xff09;颇为隆重的介绍了它。 那么到底 Swift 宏是什么&#xff1f;有什么用&…...

linux常见资源查询命令(持续更新)

年纪大了&#xff0c;很多命令记不住了&#xff0c;但偶尔也需要用到&#xff0c;通过搜索也需要点时间&#xff0c;特此记录。 不同操作系统命令会有所区别&#xff0c;下面是大部分时候工作的机器系统&#xff1a; CentOS release 7.5 (Final)Kernel \r on an \m 1、实时查…...

JavaWeb:文件上传1

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…...

C++ 中的异常处理机制是怎样的?

异常处理的基本概念&#xff1a; 异常: 程序在运行时发生的错误或意外情况。 抛出异常: 使用 throw 关键字将异常传递给调用堆栈。 捕获异常: 使用 try-catch 块捕获和处理异常。 异常类型: 表示异常类别的标识符。 异常处理流程&#xff1a; 抛出异常: 当检测到错误或意…...

SwiftUI-基础入门

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

C++builder中的人工智能(20):如何在C++中开发一个简单的Hopfield网络

在AI技术的发展历史中&#xff0c;模式识别模型是最伟大的AI技术之一&#xff0c;尤其是从像素图像中读取文本。其中一个是Hopfield网络&#xff08;或称为Ising模型的神经网络或Ising–Lenz–Little模型&#xff09;&#xff0c;这是一种递归神经网络形式&#xff0c;由John J…...

video2gif容器构建指南

一、介绍 1.项目概述 Video2Gif 项目旨在提供一种便捷的方式&#xff0c;让用户能够将视频中的精彩片段快速转换为 GIF 动画。GIF 动画因其循环播放、文件体积小等特点&#xff0c;在社交媒体、聊天工具中广泛应用&#xff0c;用于表达情感、分享趣事等。 2.核心功能 视频导…...

探秘Spring Boot中的@Conditional注解

文章目录 1. 什么是Conditional注解&#xff1f;2. 为什么需要Conditional注解&#xff1f;3. 如何使用Conditional注解&#xff1f;4. Conditional注解的高级用法5. 注意事项6. 结语推荐阅读文章 在Spring Boot的世界里&#xff0c;配置的灵活性和多样性是至关重要的。有时候&…...

树形dp总结

这类题型在 dp 中很常见&#xff0c;于是做一个总结吧&#xff01;&#xff01;&#xff01; 最经典的题&#xff1a;没有上司的舞会 传送门&#xff1a;没有上司的舞会 - 洛谷 状态表示&#xff1a; dp[i][0] 为 以 i 为根的子树中&#xff0c;选择 i 节点的最大欢乐值 d…...

将数据从 OPPO 传输到 iPhone 的 4 个有效方案

拥有华丽的设计和强大的功能&#xff0c;谁不想拥有一部新的 iPhone&#xff1f;如果您是Android OPPO 用户&#xff0c;现在正准备换用新 iPhone&#xff0c;您可能会担心数据传输的问题。由于 OPPO 和 iPhone 的操作系统不同&#xff0c;很多人觉得将 OPPO 手机转换为 iPhone…...

专业级图片去重神器:彻底告别重复照片的数字困扰

专业级图片去重神器&#xff1a;彻底告别重复照片的数字困扰 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾经花费数小时手动整理电脑中堆积如山的重复照片&a…...

FreeRTOS队列深度剖析:从环形缓冲区到任务阻塞,你的消息真的发对了吗?

FreeRTOS队列深度剖析&#xff1a;从环形缓冲区到任务阻塞&#xff0c;你的消息真的发对了吗&#xff1f; 在嵌入式实时系统中&#xff0c;任务间的通信机制如同城市中的交通网络&#xff0c;而FreeRTOS队列则是这条网络中最核心的高速公路。当你的系统从简单的单任务演变为多任…...

Vibe Coding 实战:我用一条 Prompt 指挥 AI “盲盒式”生成 3D 积木物理世界

&#x1f680; Vibe Coding 实战&#xff1a;我用一条 Prompt 指挥 AI “盲盒式”生成 3D 积木物理世界&#xff09;一、 引言&#xff1a;欢迎来到 Vibe Coding 时代1.1 什么是 Vibe Coding&#xff1f;从“一行行敲代码”到“用直觉与语义编程”的范式转变1.2 为什么选择 3D …...

抖音批量下载器终极指南:5步实现无水印视频高效下载

抖音批量下载器终极指南&#xff1a;5步实现无水印视频高效下载 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...

如何在智能电视上打造完美的家庭影院:Jellyfin Android TV客户端完整指南

如何在智能电视上打造完美的家庭影院&#xff1a;Jellyfin Android TV客户端完整指南 【免费下载链接】jellyfin-androidtv Android TV Client for Jellyfin 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-androidtv 想要将智能电视、NVIDIA Shield或亚马逊Fir…...

Claude Citations API 实战:让模型自动标注引用来源,RAG 准确率提升 15%

Claude Citations API 实战&#xff1a;让模型自动标注引用来源&#xff0c;RAG 准确率提升 15% 做 RAG&#xff08;检索增强生成&#xff09;的工程师都遇到过这种灵魂提问&#xff1a; “你这个回答到底是从哪段文档里得出来的&#xff1f;” 这个问题之所以致命&#xff0c…...

Google I/O 2026最魔幻的一幕:发新模型的同时,Google砍了自己的CLI

5月19号凌晨&#xff0c;我刚躺下准备刷会儿手机睡觉&#xff0c;结果被朋友圈刷屏了。 Google I/O 2026&#xff0c;总共两个小时的 keynote&#xff0c;愣是让我看到凌晨两点。不是因为我有多敬业&#xff0c;而是信息量实在太大——大到我觉得不记下来&#xff0c;明天就忘了…...

为什么92%的Lovable新手在第5小时放弃?——资深架构师拆解3个致命认知盲区

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Lovable应用开发入门与环境搭建 Lovable 是一个面向现代 Web 应用的轻量级全栈框架&#xff0c;专为快速构建可维护、可扩展且富有表现力的交互式应用而设计。它融合了声明式 UI、响应式状态管理与内置服务抽…...

【MATLAB源码-第442期】基于MATLAB的OFDM系统PAPR抑制算法仿真及限幅压扩SLM、PTS与TR性能对比

操作环境&#xff1a;MATLAB 2024a1、算法描述摘要 正交频分复用技术能够把高速数据流分解到多个正交子载波上传输&#xff0c;因此在宽带通信系统中具有较高的频谱利用率和较强的抗频率选择性衰落能力。公开资料显示&#xff0c;OFDM 已经用于 DAB、DVB、WLAN、WiMAX、第四代和…...