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

C# 栈(Stack)

目录

一、概述

二、基本的用法

1.入栈

2.出栈

Pop 方法

Peek 方法

3.判断元素是否存在

4.获取 Stack 的长度

5.遍历 Stack

6.清空容器

7.Stack 泛型类

三、结束


一、概述

栈表示对象的简单后进先出 (LIFO) 非泛型集合。

Stack 和 List 一样是一种储存容器,它遵循先进后出的原则,能够存储任意类型,但并不能获取到指定的位置,只能存入和取出,取出元素后,Stack 内部的元素自动删除。

详细API参考:Stack 类 (System.Collections) | Microsoft Learn

二、基本的用法

1.入栈

入栈使用 push 方法,这里可以添加任意类型

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();}}
}

运行

这里可以看到,最后添加的 4.5 ,被最先取出来,取出来的同时,也从 stack 中删除了,此时的长度为3, 这就是概述中描述的 先进后出 原则,听起来有点难以理解,其实就是,谁最后一个添加进来,谁就第一个出去,专逮住队伍的最后一个往出扯。

第二种:

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();}}
}

运行

Peek 可以根据后进先出的原则取出一个元素,它并不会像 Pop 方法一样,把元素删除,但是也只能取一个元素,看下面代码,重复的获取是没用的,要想数据一个个取出来,还是得老老实实的用 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();}}
}

运行

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();}}
}

运行

4.获取 Stack 的长度

长度的获取和 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("长度:" + stack.Count);Console.ReadKey();}}
}

运行

5.遍历 Stack

Stack 可以使用 foreach 遍历,并且不会移除元素

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("长度:" + stack.Count);Console.ReadKey();}}
}

 运行

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("长度:" + stack.Count);Console.ReadKey();}}
}

运行

7.Stack 泛型类

Stack 泛型类 和 Stack 的用法其实没有什么不同,Stack 泛型类 只是在使用时多了一个约束,不能和 Stack 标准形式一样,可以添加任意类型到栈中,而是使用固定的元素类型

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");//栈的元素个数int count = stack.Count;//是否包含指定的元素bool b = stack.Contains("a");//Stack.Peek() 方法返回顶部的对象而不将其从堆栈中移除string name = stack.Peek();// Pop 把元素出栈,栈中就没有这个元素了string s1 = stack.Pop();Console.WriteLine(s1);string s2 = stack.Pop();Console.WriteLine(s2);string s3 = stack.Pop();Console.WriteLine(s3);Console.ReadKey();}}
}

三、结束

最后,我们来看看 Stack 有那些特点:

先进后出,存在装箱拆箱,存储任意类型,无法使用 for 循环遍历查看元素,无法获取指定位置元素,只能查看获取栈顶元素。

end

相关文章:

C# 栈(Stack)

目录 一、概述 二、基本的用法 1.入栈 2.出栈 Pop 方法 Peek 方法 3.判断元素是否存在 4.获取 Stack 的长度 5.遍历 Stack 6.清空容器 7.Stack 泛型类 三、结束 一、概述 栈表示对象的简单后进先出 (LIFO) 非泛型集合。 Stack 和 List 一样是一种储存容器&#x…...

网络流量监控及流量异常检测

当今的企业面临着许多挑战&#xff0c;尤其是在监控其网络基础设施方面&#xff0c;需要确保随着网络规模和复杂性的增长&#xff0c;能够全面了解网络的运行状况和安全性。为了消除对网络性能的任何压力&#xff0c;组织应该采取的一项重要行动是使用随组织一起扩展的工具监控…...

六.热修复

文章目录 前言什么是热修复&#xff1f;如何进行热修复&#xff1f;热修复需要解决的问题 1.Android常用的热修复解决方案2.ClassLoader类加载机制2.1 Android类加载器2.2 双亲委托机制2.3 类查找流程 3.插桩式热修复运行期修复落地3.1 什么是字节码插桩&#xff1f;3.2 ASM3.3…...

2000万的行数在2023年仍然是 MySQL 表的有效软限制吗?

谣言 互联网上有传言说我们应该避免在单个 MySQL 表中有超过 2000 万行。否则&#xff0c;表的性能会下降&#xff0c;当它超过软限制时&#xff0c;你会发现 SQL 查询比平时慢得多。这些判断是在多年前使用HDD硬盘存储时做出的。我想知道在2023年对于基于SSD的MySQL数据库来说…...

jvm问题排查

常用工具 命令查询资源信息 top&#xff1a;显示系统整体资源使用情况 vmstat&#xff1a;监控内存和 CPU iostat&#xff1a;监控 IO 使用 netstat&#xff1a;监控网络使用 查看java进程 jps 查看运行时信息 jinfo pid gc工具 jstat: 查看jvm内存信息 GCViewer — 离线分析G…...

【Redis】浅谈Redis-集群(Cluster)

文章目录 前言1、集群实现1.1 创建cluster目录&#xff0c;并将redis.conf复制到该文件夹1.2 复制redis.conf&#xff0c;并进行配置1.3 启动redis&#xff0c;查看启动状态1.4 合成集群1.5 查看集群1.6 集群读写操作 2、SpringBoot整合redis集群2.1 引入包2.2 设置配置2.3 使用…...

Python3实现基于ARIMA模型来预测茅台股票价格趋势

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...

自动化测试selenium环境搭建

自动化测试工具selenium搭建 1. 自动化和selenium基本概念 1) 什么是自动化?为什么要做自动化&#xff1f; 自动化测试能够代替一部分的手工测试&#xff0c;自动化测试能够提高测试的效率。随着项目功能的增加&#xff0c;版本越来越多&#xff0c;版本的回归测试的压力也…...

SaaS系统平台,如何兼顾客户的个性化需求?

在当今数字化的商业环境中&#xff0c;SaaS系统已经成为企业运营的重要组成部分之一。 SaaS系统平台的好处是显而易见的&#xff0c;可以将业务流程数字化&#xff0c;从而帮助企业提高效率并节省成本。 但是&#xff0c;由于每个企业的业务都不尽相同&#xff0c;所以在选择Sa…...

QDir拼接路径解决各种斜杠问题

一般在项目中经常需要组合路径,与其他程序进行相互调用传递消息通信。 经常可能因为多加斜杠、少加斜杠等问题导致很多问题。 为了解决这些问题,我们可以使用QDir来完成路径的拼接,不直接拼接字符串。 QDir的静态方法QDir::cleanPath() 是为了规范化路径名的,在使用QDir组…...

mycat2主从配置实现读写分离

mycat2主从配置实现读写分离 在https://blog.csdn.net/zhangxue_wei/article/details/130840504基础上继续搭建 1.创建mycat数据源&#xff0c;可以在navcat里直接执行 1.1读数据源m1 /* mycat:createDataSource{"dbType":"mysql","idleTimeout&qu…...

如何在Centos7中安装Kubernetes

一、概述 Kubernetes&#xff08;[kubə’netis]&#xff09;&#xff0c;简称K8s&#xff0c;是用8代替名字中间的8个字符“ubernete”而成的缩写&#xff0c;它是一个由Google 开源的全新的分布式容器集群管理系统。 二、准备 IP角色内存192.168.1.130master4G192.168.1.1…...

Stream强化

使用stream求list的对象属性的和 假设有一个Student类&#xff0c;其中有一个属性是score&#xff0c;可以通过以下代码求出List<Student>中score的和&#xff1a; List<Student> students new ArrayList<>(); // 添加学生对象到List中 int sum student…...

第一部分-基础篇-第一章:PSTN与VOIP(下篇)

文章目录 序言上一篇文章&#xff1a;1.6 电路交换与分组交换1.6.1 电路交换1.6.2 分组交换 1.7 VoIP1.8 IMS1.8.1 什么是IMS1.8.2 IMS的特点1.8.3 IMS核心网元&#xff08;1 &#xff09; CSCF&#xff08;2 &#xff09; MGCF&#xff08;3 &#xff09; IM-MGW&#xff08;5…...

《汇编语言》- 读书笔记 - 第4章-第一个程序

《汇编语言》- 读书笔记 - 第4章-第一个程序 4.1 一个源程序从写出到执行的过程4.2 源程序程序 4.11. 伪指令1.1 segment ends 声明段1.2 end 结束标记1.3 assume 关联 2. 源程序中的“程序”3. 标号4. 程序的结构5. 程序返回6. 语法错误和逻辑错误 4.3 编辑源程序4.4 编译4.5 …...

AI工具 ChatGPT-4 vs Google Bard , PostgreSQL 开发者会pick谁?

在人工智能 (AI) 进步的快节奏世界中&#xff0c;开发人员正在寻找最高效和突破性的解决方案来加快和提高他们的工作质量。对于 PostgreSQL 开发人员来说&#xff0c;选择理想的 AI 支持的工具以最专业的方式解决他们的查询至关重要。 近年来&#xff0c;人工智能工具的普及率…...

【网络】基础知识1

目录 网络发展 独立模式 网络互联 局域网LAN 广域网WAN 什么是协议 初识网络协议 协议分层 OSI七层模型 TCP/IP四层&#xff08;或五层&#xff09;模型 OSI和TCP/IP对比 网络传输流程 什么是报头 局域网通信原理 同网段的主机通讯 跨网段的主机通讯 数据包封装…...

chatgpt赋能python:Python倒序range的完整指南

Python倒序range的完整指南 Python是一种高级编程语言&#xff0c;很多人认为它非常容易学习和使用。其中一个非常有用的功能是range()函数&#xff0c;可以生成数字序列。然而&#xff0c;有时候我们需要以相反的顺序生成这个数字序列&#xff0c;这时候倒序range()函数就派上…...

工作笔记!

搭建tomcat Tomcat详细使用教程 tomcat配置用戶名和密碼 tomcat设置外网能访问_tomcat让别人通过网络访问 如何在windows开端口_windows开放端口命令 tomcat进Manager 403 Access Denied You are not authorized to view this page_tomcat报错you are not_ferry_cai 关于依…...

java设计模式之享元设计模式的前世今生

享元设计模式是什么&#xff1f; 享元设计模式是一种结构型设计模式&#xff0c;它的目的是在大规模重复使用相似对象时提高内存利用率和性能。它通过共享对象的公共部分来减少所需要的内存&#xff0c;从而在系统中同时存在更多的对象。 享元设计模式通过将对象分为可共享的内…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...