C#队列和栈的使用

article/2025/9/17 5:49:16

一、队列

队列是其元素以先进先出(Firstin,Firstout,FIFO)的方式来处理的集合。先放入队列中的元素会先读取。队列使用System.Collections.Generic命名空间中的泛型类Queue<T>实现。

队列的成员

Count:Count属性返回队列中元素个数。

Enqueue:Enqueue()方法在队列一端添加一个元素。

Dequeue:Dequeue()方法在队列的头部读取和删除元素。如果在调用Dequeue()方法时,队列中不再有元素,就抛出一个InvalidOperationException类型的异常。

Peek:Peek()方法从队列的头部读取一个元素,但不删除它。

TrimExcess:TrimExcess()方法重新设置队列的容量。Dequeue()方法从队列中删除元素,但它不会重新设置队列的容量。要从队列的头部去除空元素,应使用TrimExcess()方法。

Clear:Clear()方法从队列中移除所有的元素。

ToArray:ToArray()复制队列到一个新的数组中。

实例:将员工信息列表加入到队列中并读取队列。

创建员工信息实体类:

/// <summary>
/// 用户信息实体类
/// </summary>
public class UserInfo
{public UserInfo(int userID, string userName, string sex){this.UserID = userID;this.UserName = userName;this.Sex = sex;}public int UserID { get; set; }public string UserName { get; set; }public string Sex { get; set; }
}

获取用户列表方法:

/// <summary>
/// 获取用户列表
/// </summary>
public static List<UserInfo> GetUserList()
{List<UserInfo> userList = new List<UserInfo>();userList.Add(new UserInfo(1, "张三", "男"));userList.Add(new UserInfo(2, "李四", "女"));userList.Add(new UserInfo(3, "王五", "男"));return userList;
}

队列的使用:

/// <summary>
/// 队列的使用
/// </summary>
public static void QueueSample()
{//创建一个队列Queue<UserInfo> queue = new Queue<UserInfo>();//获取用户列表List<UserInfo> userList = GetUserList();//使用Enqueue()方法将用户信息加入到队列中(入列)foreach (var user in userList){queue.Enqueue(user);}//使用Count属性获取队列中元素个数int queueCount = queue.Count;Console.WriteLine(String.Format("队列中有{0}个用户信息。", queueCount));    //输出:3//使用Dequeue()方法从队列的头部读取和删除元素(出列)for (int i = 0; i < queueCount; i++){UserInfo user = queue.Dequeue();Console.WriteLine(String.Format("用户ID:{0};用户名称:{1};性别:{2}", user.UserID, user.UserName, user.Sex));}//使用Count属性获取队列中元素个数queueCount = queue.Count;Console.WriteLine(String.Format("队列中有{0}个用户信息。", queueCount));  //输出:0
}

运行结果:


二、栈

栈是与队列非常类似的另一个容器,只是要使用不同的方法访问栈。最后添加到栈中的元素会最先读取。栈是一个后进先出(Lastin,Firstout,LIFO)的容器。栈使用System.Collections.Generic命名空间中的泛型类Stack<T>实现。

栈的成员

Count:Count属性返回栈中的元素个数。

Push:Push()方法在栈顶添加一个元素。

Pop:Pop()方法从栈顶删除一个元素,并返回该元素。如果栈是空的,就抛出一个InvalidOperationException类型的异常。

Peek:Peek()方法返回栈顶的元素,但不删除它。

Contains:Contains()方法确定某个元素是否在栈中,如果是,就返回true。

实例:将员工信息列表添加到栈中并读取栈。

/// <summary>
/// 栈的使用
/// </summary>
public static void StackSample()
{//创建一个栈Stack<UserInfo> stack = new Stack<UserInfo>();//获取用户列表List<UserInfo> userList = GetUserList();//使用Push()方法将用户信息加入到栈顶(入栈)foreach (var user in userList){stack.Push(user);}//使用Count属性获取栈中元素个数int stackCount = stack.Count;Console.WriteLine(String.Format("栈中有{0}个用户信息。", stackCount));    //输出:3//使用Pop()方法从栈顶删除一个元素,并返回该元素(出栈)for (int i = 0; i < stackCount; i++){UserInfo user = stack.Pop();Console.WriteLine(String.Format("用户ID:{0};用户名称:{1};性别:{2}", user.UserID, user.UserName, user.Sex));}//使用Count属性获取栈中元素个数stackCount = stack.Count;Console.WriteLine(String.Format("栈中有{0}个用户信息。", stackCount));    //输出:0
}

运行结果:




http://chatgpt.dhexx.cn/article/UQFXahJJ.shtml

相关文章

栈和队列经典面试题

目录 1、括号匹配问题 2、用队列实现栈 3、用栈实现队列 4、设计循环队列 1、括号匹配问题 链接直达&#xff1a; 有效的括号 题目&#xff1a; 思路&#xff1a; 做题前&#xff0c;得先明确解题方案是啥&#xff0c;此题用栈的思想去解决是较为方便的&#xff0c;栈明确指…

栈stack和队列

栈和队列 一 栈和队列二 栈三.队列 一 栈和队列 栈和队列是两种重要的线性结构。从数据结构来看&#xff0c;栈和队列也是线性表&#xff0c;其特殊性在于栈和队列的基本操作是线性表操作的子集&#xff08;也具有顺序结构和链式结构&#xff09;&#xff0c;它们是操作受限的…

链表,队列和栈的区别

链表&#xff0c;队列和栈都是数据结构的一种。Sartaj Sahni 在他的《数据结构、算法与应用》一书中称&#xff1a;“数据结构是数据对象&#xff0c;以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”他将数据对象&#x…

栈与队列的定义与区别

1、栈 首先&#xff0c;普通的线性表实现是有两个端口可以访问的&#xff0c;但是如果作为栈就要封闭一端&#xff0c;只能访问另一端。这当然不是自讨苦吃&#xff0c;栈是一种抽象数据结构&#xff0c;是对现实世界对象的模拟。比如&#xff0c;自助餐厅中的一叠盘子&#x…

java 队列和栈的区别

栈和队列的区别 &#xff08;1&#xff09;数据插入删除 栈是一种特殊的线性表&#xff0c;他只能在一段进行插入和删除操作&#xff0c;就好像是一个井一样。进行数据插入和删除就类似于井口&#xff0c;称为栈定。而井也是有底部的&#xff0c;栈无法进行插入删除操作的这一…

监督学习和无监督学习的区别(机器学习)

机器学习主要分为两类 监督学习无监督学习 两者的区别主要是是否需要人工参与数据结果的标注 监督学习&#xff1a;教计算机如何去完成预测任务&#xff08;有反馈&#xff09;&#xff0c;预先给一定数据量的输入和对应的结果即训练集&#xff0c;建模拟合&#xff0c;最后让…

简单说下有监督学习和无监督学习的区别

简单说下有监督学习和无监督学习的区别 解析&#xff1a; 有监督学习&#xff1a;对具有标记的训练样本进行学习&#xff0c;以尽可能对训练样本集外的数据进行分类预测。&#xff08;LR,SVM,BP,RF,GBDT&#xff09; 无监督学习&#xff1a;对未标记的样本进行训练学习&#xf…

一个简单的例子来理解监督学习和非监督学习及其区别

首先&#xff0c;必须理解两个基本概念&#xff1a;特征值和目标值&#xff0c;先看图例 1、特征值&#xff1a; 特征值是指数据的特征&#xff0c;对于每个样本&#xff0c;通常具有一些 "属性"&#xff08;Attribute&#xff09;或者说 ”特征“&#xff08;Featu…

监督学习、无监督学习和半监督学习区别

1、概念 1.1监督学习&#xff08;数据集有输入和输出数据&#xff09;&#xff1a;通过已有的一部分输入数据与输出数据之间的相应关系。生成一个函数&#xff0c;将输入映射到合适的输出&#xff0c;比如分类。 1.2无监督学习&#xff08;数据集中只有输入&#xff09;&…

监督、自监督、半监督、无监督学习的区别

目录 一、简易版区别 二、详细版区别 一、简易版区别 A Survey on Semi-, Self-and Unsupervised Learning for Image Classification 文中的解释&#xff1a; 监督学习&#xff08;a&#xff09;&#xff1a;给出全部样本红蓝两类的标签 半监督学习&#xff08;b&#xf…

有监督学习与无监督学习

机器学习的常用方法&#xff0c;主要分为有监督学习(supervised learning)和无监督学习(unsupervised learning)。简单的归纳就是&#xff0c;是否有监督&#xff08;supervised&#xff09;&#xff0c;就看输入数据是否有标签&#xff08;label&#xff09;。输入数据有标签&…

有监督和无监督

来自有监督vs.无监督&#xff0c;傻傻分不清楚&#xff1f; - 搜狐网 网上对于有监督和无监督差异性的文章非常多&#xff0c;本文将重点从应用的角度来阐述如何选择有监督和无监督。 对比一&#xff1a;有标签 vs. 无标签 有监督又被称为“有老师的学习”&#xff0c;无监督被…

机器学习:有监督和无监督之间有什么区别

机器学习是人工智能的一个子集&#xff0c;它通过示例和经验教会计算机执行任务&#xff0c;是研究和开发的热门领域。我们每天使用的许多应用程序都使用机器学习算法&#xff0c;包括AI助手&#xff0c;Web搜索和机器翻译。 您的社交媒体新闻提要由机器学习算法提供支持。您、…

有监督学习与无监督学习的几大区别

当下无监督作为一种热门的机器学习技术&#xff0c;网上有不少关于无监督与有监督差异讨论的文章。DataVisor作为率先将无监督技术运用在反欺诈行业的娇娇领先者&#xff0c;我们在本文中&#xff0c;将深入浅出的讲解无监督机器学习技术与有监督技术在不同方面的区别&#xff…

监督学习和无监督学习区别

前言 机器学习分为&#xff1a;监督学习&#xff0c;无监督学习&#xff0c;半监督学习&#xff08;也可以用hinton所说的强化学习&#xff09;等。 在这里&#xff0c;主要理解一下监督学习和无监督学习。 监督学习&#xff08;supervised learning&#xff09; 从给定的训…

关于使用burpsuite时,“安全连接失败,使用了无效的证书”问题【已解决】

安装好burpsuite&#xff0c;配置好网络连接代理后&#xff0c;导入了证书&#xff0c;访问某一网站还是会出现如下现象&#xff1a; 解决方案&#xff1a; 打开浏览器设置-高级-证书-证书机构&#xff0c;删除刚才导入的证书。 再次访问http:\burp下载证书。 再次在设置-高级…

火狐浏览器出现“建立安全连接失败”PR_CONNECT_RESET_ERROR解决方法

访问一个网站出现这样的问题&#xff0c;可能是因为自己设置一些东西导致DNS解析出错。 我找了网上几个比较主流的方法都不能解决&#xff0c;最后就是一招刷新DNS解决了。&#xff08;哭笑不得&#xff09; 解决方法&#xff1a; 按“win R”键&#xff0c;启动运行窗口&a…

Horizon client连接错面报错:无法建立安全加密链路连接

一、问题描述 前方人员反馈在Horizon环境中交付桌面前&#xff0c;验证过程中&#xff0c;使用Horizon client登录错误报&#xff1a;无法建立安全加密链路连接&#xff0c;如下图所示&#xff1a; UAG软件版本&#xff1a;3.9 二、分析处理 1、检查客户端SSL配置选项&…

华为设备web登录,安全连接失败问题解决办法

web登录华为交换机、路由器失败 详细错误信息如下&#xff1a; 解决办法 1、可以更换浏览器解决 2、火狐浏览器可以通过加载插件解决&#xff0c;插件链接点击打开链接 3、如果上面链接有问题按如下方法安装插件&#xff1a;1&#xff09;附件组件-扩展-搜索Disable DHE 安…