C#使用自定义的方法设计队列类

目录

一、涉及到的知识点

1.C#中的队列类

2.自定义队列的方法

(1)先设计一个CList类

(2)再设计CQueue类

二、自定义队列的实例


一、涉及到的知识点

1.C#中的队列类

        在C#中实现列类,其实队列也是链表的扩展,它是一种特殊的链表,如堆栈一样。它与堆栈的不同在于,堆栈采用的是先进后出原则,而队列采用的是先进先出原则。

        和栈相反,队列是先进先出的线性表,只允许在表的一端进行插入,而在另一端删除元素。在队列中,允许插入的一端叫做队尾,允许删除的一端称为队头。 在队列的实现过程中主要有两个操作,即入队和出队,具体如下:

  • 入队就是在队列的尾部添加数据,队列数据个数加1,尾指针后移。
  • 出队就是在队列的头部取数据,然后删除该数据,头指针后移。

2.自定义队列的方法

(1)先设计一个CList<T>类

        在这个CList<T>类的实现使用了一个私有内部类Node来表示链表中的节点。每个Node实例包含一个值(Value)和一个指向下一个节点的引用(Next)。

        CList<T>类提供了以下方法:

  • AddLast(T item):将一个元素添加到链表的末尾。
  • RemoveFirst():从链表的头部移除一个节点。如果链表为空,将抛出InvalidOperationException异常。
  • Count:获取链表中的元素数量。
  • Clear():清空链表。

(2)再设计CQueue<T>类

         在这个C#队列类CQueue<T>的实现,使用了链表类(CList)作为底层数据结构。

        这个CQueue<T>类提供了以下方法:

  • EnQueue(T item):将一个元素添加到队列的末尾。
  • DeQueue():从队列的头部移除一个元素并返回它。如果队列为空,将抛出InvalidOperationException异常。
  • Clear():清空队列。
  • QueueCount():返回队列中的元素数量。

二、自定义队列的实例

// 自定义队列类其中引用自定义的链表类的方法
namespace _134_2
{/// <summary>/// 自定义链表类/// </summary>/// <typeparam name="T">泛型运算符</typeparam>public class CList<T>{private class Node(T value){public T Value = value;public Node? Next;}private Node? _head;private int _count;public CList(){_head = null;_count = 0;}public void AddLast(T item){var newNode = new Node(item);if (_head == null){_head = newNode;}else{var current = _head;while (current.Next != null){current = current.Next;}current.Next = newNode;}_count++;}public void RemoveFirst(){if (_head == null){throw new InvalidOperationException("链表为空,无法移除元素。");}var removedNode = _head;_head = removedNode.Next;_count--;removedNode = null;}public int Count{get { return _count; }}public void Clear(){_head = null;_count = 0;}public T FirstOrDefault(){if (Count == 0){throw new InvalidOperationException("列表为空,无法获取第一个元素。");}return Peek();}public T Peek(){if (_count == 0){throw new InvalidOperationException("The list is empty, cannot get the first element.");}return _head!.Value;}}/// <summary>/// 自定义队列类/// 引用链表类CList<T>的方法/// </summary>/// <typeparam name="T">泛型运算符</typeparam>public class CQueue<T>{private readonly CList<T> _queue;public CQueue(){_queue = new CList<T>();}public void EnQueue(T item){_queue.AddLast(item);}//public T DeQueue()//{//    if (_queue.Count == 0)//    {//        throw new InvalidOperationException("队列为空,无法出队。");//    }//    T item = _queue.First.Value;//    _queue.RemoveFirst();//    return item;//}public T DeQueue(){if (_queue.Count == 0){throw new InvalidOperationException("队列为空,无法出队。");}T item = _queue.FirstOrDefault();_queue.RemoveFirst();return item;}public void Clear(){_queue.Clear();}public int QueueCount(){return _queue.Count;}}class Program{static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);CQueue<int> queue = new();// 向队列中添加元素queue.EnQueue(1);queue.EnQueue(2);queue.EnQueue(3);// 查看队列中的元素数量Console.WriteLine("队列中的元素数量: " + queue.QueueCount);// 弹出第一个元素int dequeuedItem1 = queue.DeQueue();Console.WriteLine("弹出的第一个元素: " + dequeuedItem1);// 再次查看队列中的元素数量Console.WriteLine("队列中的元素数量: " + queue.QueueCount);// 弹出剩余的元素int dequeuedItem2 = queue.DeQueue();Console.WriteLine("弹出的第二个元素: " + dequeuedItem2);int dequeuedItem3 = queue.DeQueue();Console.WriteLine("弹出的第三个元素: " + dequeuedItem3);// 清空队列queue.Clear();// 查看队列是否为空Console.WriteLine("队列是否为空: " + queue.QueueCount == 0);}}
}

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

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

相关文章

足球俱乐部管理系统:Java与SpringBoot的管理系统实践

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

MySQL存储函数

存储函数是有返回值存储过程&#xff0c;存储函数的参数只能还是IN类型的 1、语法 create function 存储函数名称 &#xff08;[参数列表]&#xff09;Returns type [characterrastic...]Begin--SQL语句Return ..;End;characterrastic说明&#xff1a;Deterministic:相同的输…

Redis场景总结

使用场景 在大型的秒杀库存扣减&#xff0c;app首页流量高峰&#xff0c;很容易将传统的关系型数据库(mysql&#xff0c;oracle等&#xff09;给压垮。 还有很多没必要持久化的数据&#xff0c;比如说短信验证码&#xff0c;点赞数等。 分布式锁。 分布式缓存(会话共享)。 …

uniapp使用openlayers加载地图服务

uniapp使用openlayers加载地图服务 <!-- 地图组件 --> <template><view id"myMap" :regionChangeItem"regionChangeItem" :change:regionChangeItem"olRender.selectAdministrativeRegion":tagSelectProducetagSelectProduce :t…

探索 MySQL 扩展 EXPLAIN 输出格式

探索 MySQL 扩展 EXPLAIN 输出格式 在数据库优化和性能调整的过程中&#xff0c;了解 SQL 查询的执行计划是至关重要的。MySQL 的 EXPLAIN 语句是一个强大的工具&#xff0c;用于分析查询的执行计划。从 MySQL 8.0.12 版本开始&#xff0c;EXPLAIN 提供了更多的扩展信息&#…

客户端向服务端传参5个方式

/** * get: parmas方式 例子&#xff1a;/:id * get: query方式 例子&#xff1a;/home?namexxx&agexxx * get: json方式 例子&#xff1a;{"name":"xxx","age":"xxx"} * post: x-www-form-urlencoded方式 例子: namexxx&age…

迷宫与陷阱

题目&#xff1a;0迷宫与陷阱 - 蓝桥云课 (lanqiao.cn) 代码&#xff1a; #include<stdio.h> #include<iostream> #include<algorithm> #include<queue> using namespace std;int n,k;//N*N矩阵大小&#xff0c;k无敌状态持续的步数 char map[1010…

Visual Studio 2022之Release版本程序发送到其它计算机运行

目录 1、缺少dll​ 2、应用程序无法正常启动 3、This application failed to start because no Qt platform plugin could be initialized. 代码在Debug模式下正常运行&#xff0c;然后切换到Release模式下&#xff0c;也正常运行&#xff0c;把第三方平台的dll拷贝到exe所在…

主成分分析用于综合评价

主成分分析用于综合评价是一种常用的数据降维方法。它通过寻找数据中的主要方差方向&#xff0c;将高维数据转化为低维数据&#xff0c;以便更好地理解和分析数据。主成分分析可以帮助我们发现数据中的潜在结构和模式&#xff0c;并且可以用较少的维度来表示数据。 在综合评价…

IPv6扩展头(四)——分片头

分片头部&#xff08;Fragment Header&#xff09;用于IPv6源节点向目的节点发送一个大于路径MTU的数据报。 一、优势 IPv6 分片头具有多种优势&#xff0c;可提高网络效率&#xff0c;包括减少数据包延迟和减少网络拥塞。使用 IPv6 分片头&#xff0c;数据包在源处而不是中间…

Uninty 鼠标点击(摄像机发出射线-检测位置)

平面来触发碰撞&#xff0c;胶囊用红色材质方便观察。 脚本挂载到胶囊上方便操作。 目前实现的功能&#xff0c;鼠标左键点击&#xff0c;胶囊就移动到那个位置上。 using System.Collections; using System.Collections.Generic; using UnityEngine;public class c6 : MonoBe…

数据结构-线段树

&#x1f4d1;前言 本文主要是【线段树】——线段树简单使用的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&…

将父目录设置为根目录

在用这个这个项目的时候https://github.com/KaiyangZhou/deep-person-reid&#xff0c; 出现了问题 原因是执行python scripts/main.py找不到模块 ModuleNotFoundError: No module named torchreid原因是根目录在当前目录 C:\\Users\\seama\\Documents\\Workspace\\deep-per…

PyCharm Community Edition 2023.3.3,UI界面设置成旧版

File->Settings->Appearance & Behavior->New UI->Enable new UI(取消勾选)->重启PyCharm 旧版UI: 新版UI&#xff1a;

对 JVM 的类加载机制以及寻找字节码文件的“双亲委派模型”的理解

目录 1、JVM 的类加载机制 1.1、加载 1.2、验证 1.3、准备 1.4、解析 1.5、初始化 2、双亲委派模型 2.1、工作过程 1、JVM 的类加载机制 类加载指的是 Java 进程运行的时候&#xff0c;需要把 .class 文件从硬盘读取到内存&#xff0c;并进行一系列的校验解析的过程。…

人民日报:用好“人工智能+” 赋能产业升级

以下文章来源&#xff1a;北京日报 文生视频、智能家居、智慧工厂……近年来&#xff0c;人工智能发展速度之快、应用范围之广备受瞩目。 政府工作报告提出&#xff0c;深化大数据、人工智能等研发应用&#xff0c;开展“人工智能”行动&#xff0c;打造具有国际竞争力的数字产…

力扣589、590、102、107、429、199、637、515、116、117、104、111、226、101-Java刷题笔记

一、589. N 叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09; 1.1题目 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#xff0c;每组子节点由空值 null 分隔&#xff08;请参见示例&#xff09…

6. 互质

互质 互质 互质 每次测试的时间限制&#xff1a; 3 秒 每次测试的时间限制&#xff1a;3 秒 每次测试的时间限制&#xff1a;3秒 每次测试的内存限制&#xff1a; 256 兆字节 每次测试的内存限制&#xff1a;256 兆字节 每次测试的内存限制&#xff1a;256兆字节 题目描述 给定…

使用Python制作自己的wheel文件

平时自己利用Python制作一个个小工具后想分享给别人&#xff0c;但又嫌分享一堆项目代码很麻烦&#xff0c;那么你可以考虑将自己的项目打包成一个wheel文件&#xff0c;别人拿到文件后只需pip install安装即可使用&#xff0c;非常方便。 在上一篇博文中&#xff0c;利用nvid…

在maven多模块之间调用报错

错误信息为&#xff1a;不能解决maven_02_ssm项目的依赖问题&#xff0c;找不到maven_03_pojo这个jar包。 为什么找不到呢? 原因是Maven会从本地仓库找对应的jar包&#xff0c;但是本地仓库又不存在该jar包所以会报错。 在IDEA中是有maven_03_pojo这个项目&#xff0c;所以…