C# 栈(Stack)

news2024/11/23 12:07:36

目录

一、概述

二、基本的用法

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 有那些特点:

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

end

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

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

相关文章

这种新的Facebook Messenger群发方式,让你的信息更有价值!

随着社交媒体的迅速发展&#xff0c;Facebook已成为人们分享信息、建立联系和开展业务的重要平台之一。在这个数字时代&#xff0c;如何有效地传达信息并与目标受众建立联系成为了关键的挑战。 而最近引入的Facebook Messenger群发方式为我们提供了一种全新的机会&#xff0c;…

【CloudCompare教程】008:基于点云的三维模型重建(泊松重建)

本文讲述基于点云的三维模型重建方法,PoissonRecon是“Poisson Surface Reconstruction”的缩写,它是由约翰霍普金斯大学的Misha Kazhdan47提出的三角形网格生成算法的简单接口。 文章目录 一、加载点云二、计算法向量三、泊松建模四、利用输出密度一、加载点云 加载兔子点云…

接口测试神器:ApiKit

想给大家分享一款技术人必备的接口测试神器&#xff1a;ApiKit&#xff0c;应该是我目前用过&#xff0c;算得上良心的接口工具 背景 作为互联网行业技术从业者&#xff0c;接口调试是必不可少的一项技能&#xff0c;通常我们都会选择使用 Postman 这类工具来进行接口调试&…

Kali-linux使用Aircrack-ng工具破解无线网络

Aircrack-ng是一款基于破解无线802.11协议的WEP及WPA-PSK加密的工具。该工具主要用了两种攻击方式进行WEP破解。一种是FMS攻击&#xff0c;该攻击方式是以发现该WEP漏洞的研究人员名字&#xff08;Scott Fluhrer、Itsik Mantin及Adi Shamir&#xff09;所命名&#xff1b;另一种…

播放量上百亿,易车新媒体矩阵到底做对了什么

消费者的媒介触点和整体决策链路在不断向线上偏移&#xff0c;有数据显示&#xff0c;超7成的车主对信息的获取渠道偏好为汽车垂直媒体。 在这个大背景下&#xff0c;谁能打造更专业的内容&#xff0c;能更快速且广泛地触达用户&#xff0c;谁才更有可能脱颖而出&#xff0c;汽…

如何快速搭建SpringBoot+Vue前后端分离的开发环境

唠嗑部分 今天我们来说一说&#xff0c;如何快速搭建SpringBootVue前后端分离的开发环境 需要前置环境nodejs&#xff0c;请自行安装(傻瓜式安装) SpringBoot采用2.4.2版本&#xff0c;Vue采用Vue2版本 言归正传 创建Vue项目 1、安装vue npm install -g vue/cli2、检查v…

【2023 · CANN训练营第一季】MindSpore模型快速调优攻略 第一章——调试调优背景介绍

1.模型迁移、模型调试调优背景介绍 模型训练\推理过程中可能遇到的问题&#xff1a; • 代码编写错误&#xff0c;问题难以定位&#xff1b; • 模型结构错误&#xff1b; • 权重更新错误&#xff1b; • 损失函数设计错误&#xff1b; • 半精度下计算溢出&#xff1b; • L…

上线11年公众号广告大变天!最新政策解读|西瓜数据

昨晚&#xff0c;微信公众平台的一则公告&#xff0c;在圈内炸开锅了。 ▲ 图片来源&#xff1a;西瓜数据社群截图 公告称&#xff1a; 公众号运营者与第三方商业合作形式推销商品或者服务&#xff0c;如附加购物链接等购买方式的商业合作营销内容&#xff0c;在2023年6月30日…

迅为RK3568开发板Android 双屏/三屏同显

iTOP-RK3568 开发板支持以下屏幕 迅为 LVDS 7 寸屏幕 迅为 LVDS 10.1 寸 1024*600 屏幕 迅为 LVDS 10.1 寸 1280*800 屏幕 迅为 MIPI 7 寸屏幕 HDMI 屏幕&#xff08;通过 HDMI 线连接&#xff09; HDMI 屏幕&#xff08;通过 VGA 线连接&#xff09; 然后修改 Android1…

Linux系统提权

滥用的SUDO提权 执行流程&#xff1a;当前用户转换到root&#xff0c;然后以root身份执行命令&#xff0c;执行完成后&#xff0c;直接退回到当前用户 注意&#xff1a;执行sudo时输入的命令&#xff0c;是当前用户的密码&#xff0c;而非root密码 sudo配置文件&#xff1a;…

SpringBoot枚举入参实战

文章目录 前言一、什么是枚举&#xff1f;二、枚举的优点三、枚举的缺点四、使用步骤1.代码实现1.1.枚举1.2.实体1.3.控制层 2.Postman测试2.1.Get请求2.1.1.枚举参数2.1.2.对象枚举属性参数 2.2.Post请求2.2.1.枚举参数2.2.2.对象枚举属性参数 2.3.Put请求2.3.1.枚举参数2.3.2…

0基础学习VR全景平台篇第31章:场景功能-嵌入图片

大家好&#xff0c;欢迎收看蛙色平台免费教程&#xff01; 功能位置示意 一、本功能将用在哪里&#xff1f; 嵌入功能可对VR全景作品嵌入【图片】【视频】【文字】【标尺】四种不同类型内容&#xff0c;本次主要带来图片类型的介绍&#xff0c;满足场景营销、重点标注、幻灯片…

node.js+vue.js大学生在线选课系统的设计与实现93pul

本次设计任务是要设计一个选课系统的设计与实现&#xff0c;通过这个系统能够满足用户对选课信息的需求。系统的主要功能包括&#xff1a;个人中心、学生管理、教师管理、选课信息管理等功能。 管理员可以根据系统给定的账号进行登录&#xff0c;登录后可以进入选课系统的设计与…

操作系统第四章——文件管理(下)

竹本无心&#xff0c;却节外生枝&#xff0c;藕却有孔&#xff0c;但出淤泥而不染&#xff0c;人生如梦&#xff0c;却却不随人愿&#xff0c;万般皆是命&#xff0c;半点不由人 文章目录 4.1.5 逻辑结构VS物理结构4.1.6 文件的基本操作知识总览创建文件删除文件打开文件关闭文…

超融合产品集成 Kata 虚拟化容器技术的方案演进 | 龙蜥技术

编者按&#xff1a;超融合技术融合基础实施为企业用户提供虚拟化、容器等不同形态的服务。今天&#xff0c;浪潮数据超融合云原生工程师王永超带大家了解 Kata 虚拟化容器技术&#xff0c;及超融合产品为集成 Kata 容器而进行技术方案演进历程&#xff0c;也分享了超融合 Kata …

Pinctrl/Gpio简介(以应用层角度修改设备树)

1.先举个例子 1 、添加 pinctrl 节点 iomuxc 节点就是 I.MX6ULL 的 IOMUXC 外设对应的节点 imx6ull.dtsi iomuxc: iomuxc020e0000 {compatible "fsl,imx6ul-iomuxc";reg <0x020e0000 0x4000>; }imx6ull.dts 根节点下 gpioled {#address-cells <1>;…

深入业务场景的数据使用安全管控实践

《数据安全法》第三条对数据安全给出了明确的定义&#xff1a;“数据处理包括数据的收集、存储、使用、加工、传输、提供、公开等。数据安全是指通过采取必要措施&#xff0c;确保数据处于有效保护和合法利用的状态&#xff0c;以及具备保障持续安全状态的能力。” 数据随着业…

Python 学到什么程度才可以去找工作?掌握这 4 点足够了!

大家在学习Python的时候&#xff0c;有人会问“Python要学到什么程度才能出去找工作”&#xff0c;对于在Python培训机构学习Python的同学来说这都不是问题&#xff0c;因为按照Python课程大纲来&#xff0c;一般都不会有什么问题&#xff0c;而对于自学Python来说&#xff0c;…

【2023B题】人工智能对大学生学习影响的评价(思路、代码)

目录 &#x1f4a5;1 概述 &#x1f4da;2 Matlab代码实现 &#x1f389;3 参考文献 &#x1f308;4 运行结果 &#x1f4a5;1 概述 人工智能简称AI&#xff0c;最初由麦卡锡、明斯基等科学家于1956年在美国达特茅斯学院开会研讨时提出。 2016年&#xff0c;人工智能AlphaGo …

【day 06】vue的组件

组件 组件就是把一个网页分割成独立的小的模块&#xff0c;然后通过把模块进行组合&#xff0c;构建成一个大型的应用 单文件组件 只有一个组件 html css js 都在这个文件内 非单文件组件 可有多个组件 全局注册 !! 得先注册子组件 再生成 vm实例对象 创建子组件 const …