C#队列的简单使用
作者:ZEKEGU1997 发布时间:2022-01-21 03:05:42
标签:C#,队列
队列的特性很简答,就是先进先出,一般利用数组来实现。
实现队列自然要实现几个函数:入队,出队,判断队满,判断队空,获得队头,队尾。
实现队列的关键在于队头指针和队尾指针的设置:
假设初始状态下,队头指针为0,队尾指针为-1,那么两个指针指的位置分别就是队头与队尾。当队尾的下一个是队头时队空,当队尾的下下个是队头时队满。
假设初始状态下,队头队尾指针都为0,那么队尾指针指的是队尾,而队头指针的下一个位置才是队头。当两指针相等时队空,当队尾指针的下一个是队头时队满。
如果我们画个图就会发现,不管怎么设置指针,队满时数组一定还有一个空位。所以数组长度应该比队列长度多1。
同时为了方便,我们会把队列指针设置为循环的,即每次移动后取余数组的长度。
public class MyCircularQueue {
private int front;
private int rear;
private int[] queue;
public MyCircularQueue(int k) {
queue=new int[k+1];
front=0;
rear=-1;
}
public bool EnQueue(int value) {
if((rear+2)%queue.Length==front)
return false;
rear++;rear=rear%queue.Length;
queue[rear]=value;
return true;
}
public bool DeQueue() {
if((rear+1)%queue.Length==front)
return false;
front++;front=front%queue.Length;
return true;
}
public int Front() {
if(!IsEmpty())
return queue[front];
else
return -1;
}
public int Rear() {
if(!IsEmpty())
return queue[rear];
else
return -1;
}
public bool IsEmpty() {
if((rear+1)%queue.Length==front)
return true;
else
return false;
}
public bool IsFull() {
if((rear+2)%queue.Length==front)
return true;
else
return false;
}
}
实际上C#也有一个队列库,如下图所示
需要注意的是Dequeque和ToArray的返回类型都是object,可能需要进行强制转换
class Program
{
static void Main(string[] args)
{
Queue q = new Queue();
q.Enqueue('A');
char ch = (char)q.Dequeue();
Console.WriteLine("The removed value: {0}", ch);
}
}
来源:https://blog.csdn.net/qq_43533956/article/details/123510016


猜你喜欢
- 1.System类System系统类,主要用于获取系统的属性数据和其他操作,因其构造方法是私有的并且类中的成员方法都是静态的,所以在使用的时
- 一、简介:介绍两种使用 BitmapTransformation 来实现 Glide 加载圆形图片和圆角图片的方法。Glide 并不能直接支
- 本文实例讲述了Java Lambda表达式与匿名内部类的联系和区别。分享给大家供大家参考,具体如下:一 点睛Lambda表达式与匿名内部类存
- 前面做了app微信支付的回调处理,现在需要做微信公众号的支付,花了一天多时间,终于折腾出来了!鉴于坑爹的微信官方没有提供Java版的demo
- 网上的教程大都是手动通过protoc编译, 比较难用给当前工程添加"Google.Protobuf"和"Grp
- 功能需求 最近项目中有这么一个功能,用户登录系
- 前言C#方法中参数类型有4种参数类型,有时候很难记住它们的不同特征,下图对它们做一个总结大家可能在编码中或多或少的使用过out的ref,但是
- 本文实例为大家分享了java实现订餐系统的具体代码,供大家参考,具体内容如下import java.util.Scanner;public
- 北京时间 2018 年 3 月 1 日早上,如约发布的 Spring Boot 2.0 在同步至 Maven 仓库时出现问题,导致在 Git
- 一、系统启动后注入配置package com.example.config;import org.springframework.beans
- TypeScript简介:TypeScript是一种由微软开发的自由和开源的编程语言。它是JavaScript的一个超集,而且本质上向这个语
- 一. struts2读取进度原理分析(作为草稿存了好久,刚刚发布出来......)1.在strut2中控制文件上传信息的类是实现MultiP
- Activity是最基本的模块,一般称之为"活动",在应用程序中,一个Activity通常就是一个单独的屏幕。简单理解,
- 实现需求:两个线程交替打印1,0,打印10轮java多线程口诀:高内聚,低耦合线程操作资源类判断干活通知防止虚假唤醒方式一:使用synchr
- 场景最近在做数据分析项目,里面有这样一个业务:把匹配的数据打上标签,放到新的索引中。数据量:累计亿级的数据使用场景:可能会单次查询大量的数据
- 切面编程听起来可能有点陌生,不过现在越来越多的开发团队正在用上这种技术。先说熟悉的面向对象编程 OOP,通常都是用各种对象/模块来负责具体的
- 本文实例讲述了Java获取时间年、月、日的方法。分享给大家供大家参考。具体实现方法如下:package com.date.demo; imp
- 前言很多朋友都想开始自己的Android开发之旅,但是遇到困难重重。从最开始接触Android开发,从搭建开发环境就花了我大部分时间。所以,
- 简介 Spring Cloud Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的。它
- 策略模式也是一种非常常用的设计模式,而且也不复杂。下面我们就来看看这种模式。定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使