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

文章介绍了如何在C#环境中使用数组实现循环队列,包括初始化、清空、判断队列是否为空、获取队列长度、获取头元素、插入元素和出队等操作。循环队列通过数组和特定的索引计算避免了越界问题,实现了空间的有效利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验一:熟悉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();

实现过程


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

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

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

当队尾元素和队首元素位于数组的最后一个位置时(这里以队尾位于数组最后一位时举例),要知道如果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);//请在括号内输入队列的大小
//输入队列的相关操作
}}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员奇奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值