1.介绍

队列是一个有序列表,可以用数组或是链表来实现。

遵循先入先出的原则,即:先存入队列的数据,要先取出。后存入的要后取出

队列是属于线性结构中的一种

2.图示

 3.通过数组实现

    public class CircleArrayQueue
{
/// <summary>
/// 队列最大值
/// </summary>
public int MaxSize { get; set; } /// <summary>
/// 队列头部
/// </summary>
public int Front { get; set; } /// <summary>
/// 队列尾部
/// </summary>
public int Rear { get; set; } /// <summary>
/// 队列数组
/// </summary>
public int[] Arr { get; set; } /// <summary>
/// 构造函数初始化队列
/// </summary>
/// <param name="maxSize"></param>
public CircleArrayQueue(int maxSize)
{
this.MaxSize = maxSize+;
Arr = new int[MaxSize];
//Front = 0;
//Rear = 0; 默认值
} /// <summary>
/// 判断队列是否为满;当尾索引的下一个为头索引时表示队列满,将队列容量空出一个作为约定
/// </summary>
/// <returns></returns>
public bool IsFull() => (Rear + ) % MaxSize==Front; /// <summary>
/// 判断队列是否为空;当队列首==队列尾 首尾相等
/// </summary>
/// <returns></returns>
public bool IsEmpty() => Front == Rear; public void AddQueue(int value)
{
if (IsFull()) Console.WriteLine("队列已满!不能再添加数据");
else
{
//直接将数据加入
Arr[Rear] = value;
//将队列尾部后移一个位置,因为是环形数组队列要考虑取模
Rear = (Rear + ) % MaxSize;
}
} public void ShowQueue()
{
if (IsEmpty()) Console.WriteLine("队列为空!没有数据");
else
{
//从Front开始遍历
for (int i = Front; i < Front+Size(); i++)
{
Console.WriteLine($"Arr[{i%MaxSize}]={Arr[i%MaxSize]}");
}
}
} /// <summary>
/// 队列尾 + 最大值 - 队列首 % 最大值
/// </summary>
/// <returns></returns>
public int Size() => (Rear + MaxSize-Front) % MaxSize; /// <summary>
/// 取出队列数据
/// </summary>
/// <returns></returns>
public int GetQueue()
{
if (IsEmpty()) throw new Exception("队列为空!没有数据");
//1.先把Front对应的值保留到一个临时变量
//2.重新分配Front的值,将Front后移,要考虑取模
//3.将临时变量返回
var val = Arr[Front];
Front = (Front + ) % MaxSize;
return val;
} public int HeadQueue()
{
if (IsEmpty()) throw new Exception("队列为空!没有数据");
//直接返回头元素
return Arr[Front];
} public static void Test()
{
CircleArrayQueue queue = new CircleArrayQueue();
string key = "";
bool loop = true;
while (loop)
{
Console.WriteLine("s(show):显示队列");
Console.WriteLine("e(exit):退出程序");
Console.WriteLine("a(add):添加数据到队列队列");
Console.WriteLine("g(get):从队列中取出数据");
Console.WriteLine("h(head):查看队列头部的数据");
key = Console.ReadLine();
switch (key)
{
case "s":
queue.ShowQueue();
break;
case "a":
Console.WriteLine("请输入一个值");
int.TryParse(Console.ReadLine(), out int value);
queue.AddQueue(value);
break;
case "g":
try
{
int reuslt = queue.GetQueue();
Console.WriteLine("取出来的数据:" + reuslt);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
break;
case "h":
try
{
int reuslt = queue.HeadQueue();
Console.WriteLine("队列头的数据:" + reuslt);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
break;
case "e":
loop = false;
break;
default:
break;
}
}
Console.WriteLine("程序退出");
} }

4.测试结果

C#数据结构与算法系列(三):队列的更多相关文章

  1. javascript实现数据结构与算法系列:队列 -- 链队列和循环队列实现及示例

    1 队列的基本概念 队列(Queue):也是运算受限的线性表.是一种先进先出(First In First Out ,简称FIFO)的线性表.只允许在表的一端进行插入,而在另一端进行删除. 队首(fr ...

  2. 重读《学习JavaScript数据结构与算法-第三版》- 第5章 队列

    定场诗 马瘦毛长蹄子肥,儿子偷爹不算贼,瞎大爷娶个瞎大奶奶,老两口过了多半辈,谁也没看见谁! 前言 本章为重读<学习JavaScript数据结构与算法-第三版>的系列文章,主要讲述队列数据 ...

  3. 重读《学习JavaScript数据结构与算法-第三版》- 第4章 栈

    定场诗 金山竹影几千秋,云索高飞水自流: 万里长江飘玉带,一轮银月滚金球. 远自湖北三千里,近到江南十六州: 美景一时观不透,天缘有分画中游. 前言 本章是重读<学习JavaScript数据结构 ...

  4. javascript实现数据结构与算法系列:栈 -- 顺序存储表示和链式表示及示例

    栈(Stack)是限定仅在表尾进行插入或删除操作的线性表.表尾为栈顶(top),表头为栈底(bottom),不含元素的空表为空栈. 栈又称为后进先出(last in first out)的线性表. 堆 ...

  5. 数据结构与算法Java描述 队列

    package com.cjm.queue; /** * 数据结构与算法Java实现 队列 * * @author 小明 * */ public class Myqueue { private Nod ...

  6. Java数据结构和算法(三)顺序存储的树结构

    Java数据结构和算法(三)顺序存储的树结构 二叉树也可以用数组存储,可以和完全二叉树的节点一一对应. 一.树的遍历 // 二叉树保存在数组中 int[] data; public void preO ...

  7. 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解

    数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...

  8. 数据结构与算法系列2 线性表 链表的分类+使用java实现链表+链表源码详解

    数据结构与算法系列2.2 线性表 什么是链表? 链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表的链接次序实现的一系列节点组成,节点可以在运行时动态生成,每个节点包括两个 ...

  9. 数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL

    树.二叉树.三叉树.平衡排序二叉树AVL 一.树的定义 树是计算机算法最重要的非线性结构.树中每个数据元素至多有一个直接前驱,但可以有多个直接后继.树是一种以分支关系定义的层次结构.    a.树是n ...

  10. 【学习总结】java数据结构和算法-第三章-稀疏数组和队列

    相关链接 [学习总结]尚硅谷2019java数据结构和算法 github:javaDSA 目录 稀疏数组 队列 稀疏数组 稀疏数组介绍 图示 应用实例 代码实现 SparseArray.java:与二 ...

随机推荐

  1. Life In Changsha College- SQA计划与验收测试规程

    本次任务 以前面小组完成的SCRUM设计任务作为背景,拟制软件开发任务的虚拟SQA计划. 编制前面小组完成的SCRUM设计任务的验收测试规程. SQA计划 验收测试规程 测试分析:工程完成的功能包括登 ...

  2. [书籍分享]0-001.rework(重来:更为简单有效的商业思维)

    封面    内容简介 大多数的企业管理的书籍都会告诉你:制定商业计划.分析竞争形势.寻找投资人等等.如果你要找的是那样的书,那么把这本书放回书架吧. 这本书呈现的是一种更好.更简单的经商成功之道.读完 ...

  3. (八)Filter&ThreadLocal实现处理事务

    ConnectionContext.java package com.aff.bookstore.web; import java.sql.Connection; public class Conne ...

  4. 获取数据库连接的方式 & Statement操作数据库的弊端

    1.获取数据库连接的方式 TestConnection package com.aff.connection; import java.io.InputStream; import java.sql. ...

  5. Rocket - config - Parameters

    https://mp.weixin.qq.com/s/uLEr9gAFaMDIXa8S9xJVTw   介绍配置类Parameters及其伴生对象的实现.   参考链接: https://docs.q ...

  6. 字符串去除空格的方式(用replace()实现)

    去除所有空格: str = str.replace(/\s+/g,""); 去除两头空格: str = str.replace(/^\s+|\s+$/g,"") ...

  7. xss(跨站脚本攻击)

    xss(跨站脚本攻击) 原理:攻击者可以通过在页面中注入恶意链接或者脚本代码,当受害者访问时,脚本代码会在其浏览器中执行,这个时候,我们可以获取当前用户的cookie或者进行重定向等操作. xss造成 ...

  8. XStream学习手册

    ​​ 一.前言 1.XStream官网 http://x-stream.github.io 2.XStream是什么 XStream是一个简单的基于Java的类库,用来将Java对象序列化成XML(J ...

  9. Java实现 LeetCode 820 单词的压缩编码(字典树)

    820. 单词的压缩编码 给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A. 例如,如果这个列表是 ["time", "me", & ...

  10. Java实现 蓝桥杯VIP 算法训练 和为T

    问题描述 从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T.每个元素限选一次,不能一个都不选. 输入格式 第一行一个正整数n,表示整数集内元素的个数. 第二行n个整数,用空格隔开. 第 ...