用C#构造一个队列Queue。要求此队列是循环队列,并进行入队、出队的测试。

简介: 用C#构造一个队列Queue。要求此队列是循环队列,并进行入队、出队的测试。

实验一:熟悉C#语法和VS编程环境


实验描述


2.1用C#构造一个队列Queue。要求此队列是循环队列,并进行入队、出队的测试。

个人经过测试,此代码可满足数据大小小于$2^{32}-1$的循环队列测试,具体操作如下


循环队列支持的操作

CQueuecircle_queue=newCQueue(MAX_SIZE);//CQueue为定义的类名,circle_queue为创建的一个循环队列对象,MAX_SIZE为循环队列的最大长度(1~4294967295)


队列清空操作

circle_queue.Clear();//清空队列中所有元素


判断队列是否为空

circle_queue.Empty();//boolean类型,若队列为空返回true,否则返回false


返回队列的长度


circle_queue.Length();

返回头元素(不出队)

circle_queue.Gtehead();


插入元素

circle_queue.put(intitem);//向队尾插入一个int类型的元素


出队

circle_queue.Poll();


实现过程

循环队列与普通队列的区别在于其可以将空间最大利用,我们可以将其看成一个环状结构,如下图:


8e4f2ef1d3160f8dda0cae1b43ab1294.png


循环队列初始化后队首队尾位置都为0,最大位置下标为MAX_SIZE - 1

在实现循环队列时所使用的基本数据结构还是数组,但是对数组下标位置上做了一些处理:

bf2712fb3ee60824ff512a7b54b2f7cd.png


当队尾元素和队首元素位于数组的最后一个位置时(这里以队尾位于数组最后一位时举例),要知道如果rear继续加1,数组就会越界,就无法实现循环这种操作。我们对每一次下标变化采取如下操作:

rear=(rear+1)%maxsize;



此操作可以确保队尾队首位置索引值不会超过数组的最大长度,而且在达到最大值时可以返回数组的第一个位置。

具体代码如下:

usingSystem;namespacehomework1{publicclassCQueue{privateint[]data;//用于储存队列数据的数组
privateintmaxsize;//队列所能储存元素的最大容量
privateintfront;//队头元素的位置索引
privateintrear;//队尾元素的位置索引
privateuintlength;publicCQueue(intsize)//构造函数,队列的初始化
{data=newint[size];maxsize=size;front=rear=0;length=0;}publicvoidClear()//清空该队列
{front=rear=0;length=0;}publicboolEmpty()//若队列为空,则返回1,否则返回0
{if(front==rear)returntrue;elsereturnfalse;}publicuintLength()//返回队列长度
{returnlength;}publicintGetHead()//若队列不空则返回头元素
{if(Empty()){Console.WriteLine("队列为空,请添加元素");return-1;}elsereturndata[front];}publicvoidPrint()//打印队列中内容
{inti=front;while(i!=rear){Console.WriteLine(data[i]);i=(i+1)%maxsize;}}publicvoidPut(intitem)//向队尾插入元素
{if(Length()==maxsize){Console.WriteLine("队列已满,无法添加元素");return;}data[rear]=item;rear=(rear+1)%maxsize;length++;}publicintPoll()//若队列不空则返回并删除队头元素
{if(Empty()){Console.WriteLine("队列为空,请添加元素");return-1;}else{inttmp=front;front=(front+1)%maxsize;length--;returndata[tmp];}}}classProgram{staticvoidMain(string[]args){CQueuecque=newCQueue(1000);//请在括号内输入队列的大小
//输入队列的相关操作
}}}
相关文章
|
6月前
|
存储 人工智能 C#
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
82 0
|
23天前
|
测试技术 C# 数据库
C# 单元测试框架 NUnit 一分钟浅谈
【10月更文挑战第17天】单元测试是软件开发中重要的质量保证手段,NUnit 是一个广泛使用的 .NET 单元测试框架。本文从基础到进阶介绍了 NUnit 的使用方法,包括安装、基本用法、参数化测试、异步测试等,并探讨了常见问题和易错点,旨在帮助开发者有效利用单元测试提高代码质量和开发效率。
132 64
|
3月前
|
测试技术 API C#
C#使用Bogus生成测试数据
C#使用Bogus生成测试数据
54 1
|
5月前
|
数据采集 数据可视化 测试技术
C#生成Selenium测试报告:实用方法与技巧
在C#中使用Selenium进行自动化测试时,结合代理IP和ExtentReports能增强测试安全性和报告质量。安装必备工具如Selenium WebDriver、NUnit和ExtentReports。在测试设置中,配置代理(如亿牛云爬虫代理)以隐藏IP,通过ChromeOptions定制UserAgent,并添加Cookie。测试代码示例展示了如何打开网页、执行搜索并生成详细的测试报告。使用ExtentReports可创建可视化测试结果,便于团队分析。
C#生成Selenium测试报告:实用方法与技巧
|
19天前
|
缓存 监控 数据挖掘
C# 一分钟浅谈:性能测试与压力测试
【10月更文挑战第20天】本文介绍了性能测试和压力测试的基础概念、目的、方法及常见问题与解决策略。性能测试关注系统在正常条件下的响应时间和资源利用率,而压力测试则在超出正常条件的情况下测试系统的极限和潜在瓶颈。文章通过具体的C#代码示例,详细探讨了忽视预热阶段、不合理测试数据和缺乏详细监控等常见问题及其解决方案,并提供了如何避免这些问题的建议。
42 7
|
21天前
|
Kubernetes 测试技术 持续交付
C# 一分钟浅谈:集成测试与系统测试
【10月更文挑战第19天】本文详细介绍了集成测试和系统测试的概念、目的及其在软件开发中的重要性。通过分析常见问题和易错点,结合代码示例,探讨了如何通过代码规范、自动化测试和持续集成等方法提高测试效果,确保软件质量和可靠性。
45 1
|
21天前
|
测试技术 C# 数据库
C# 一分钟浅谈:测试驱动开发 (TDD) 实践
【10月更文挑战第18天】测试驱动开发(TDD)是一种软件开发方法论,强调先编写测试代码再编写功能代码,以确保代码质量和可维护性。本文从 TDD 的基本概念入手,详细介绍了其核心步骤——编写测试、运行测试并失败、编写代码使测试通过,以及“红绿重构”循环。文章还探讨了 TDD 的优势,包括提高代码质量、促进设计思考、减少调试时间和文档化。此外,文中分析了常见问题及解决方案,如测试覆盖率不足、测试代码过于复杂、忽视重构和测试依赖过多,并通过一个简单的计算器类的代码案例,展示了 TDD 的实际应用过程。
32 1
|
2月前
|
测试技术 C# 开发工具
C# 标准性能测试
本文介绍如何使用 BenchmarkDotNet 工具进行性能测试。通过 GitHub 代码示例展示如何安装并应用此工具,对函数或静态方法进行精确的性能分析。首先需通过 NuGet 安装 BenchmarkDotNet,然后在测试函数上添加 `[Benchmark]` 特性,并使用 `BenchmarkRunner.Run<>();` 进行测试。测试过程中包括 Pilot、Warmup 和 Target 等阶段,并提供 Mean、Error 和 StdDev 等统计信息。
52 3
C# 标准性能测试
|
3月前
|
Linux C#
【Azure App Service】C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Application
【Azure App Service】C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Application
|
5月前
|
数据采集 XML 存储
技术经验分享:C#构造蜘蛛爬虫程序
技术经验分享:C#构造蜘蛛爬虫程序
35 0

热门文章

最新文章