重新整理数据结构与算法——数组模拟队列和环形队列[三]
2020-06-10 14:21
344 查看
钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>
前言
在开发之中我们基本上不会自己再去写队列了,而是去使用现在成熟的队列框架。
但是我们也应该知道如何去自己实现。
整理基本的数据结构,大概81篇,为c# 文。
正文
队列的一些特性:
1.队列是一个有序列表,可以用数组和链表来实现。
2.遵守先入先出原则。
那么一个队列需要什么?
下面几个参数是需要的:
1.一个数组
2.队尾标志
3.队首标志
4.数组大小
函数:
1.判断是否为空
2.判断是否满了
3.向队列里添加元素
4.向队列弹出元素
5.展示队首元素
code 实现
public class ArrayQueue { private int[] arr; private int MaxLen; private int front=-1; private int rear=-1; public ArrayQueue(int len) { this.MaxLen = len; this.arr = new int[len]; } //是否队列满了 public bool isFull() { return rear == MaxLen - 1; } //是否队列为空 public bool isEmply() { return rear == front; } //添加队列元素 public bool addEle(int ele) { if (isFull()) { return false; } rear++; arr[rear] = ele; return true; } //显示队列中全部数据 public void showQueue() { for (int i=front+1;i<=rear;i++) { Console.WriteLine(arr[i]); } } //将队首弹出 public int pop() { if (isEmply()) { throw new Exception(); } return arr[++front]; } //显示队首 public int headQueue() { if (isEmply()) { throw new Exception(); } return arr[front+1]; } }
出现的问题,或者说不足之处:
这个队列是一次性的,因为front 最终会到达rear,这样就一直显示队列满了。
那么这个时候就需要环形数组。
环形数组
环形数组设置front 和rear 全部为0。
看下什么时候队列是满的:
什么时候队列是空的:
有了这两个就很好改了。
环形数组代码
public class CircleQueue { private int[] arr; private int MaxLen; private int front; private int rear; public CircleQueue(int len) { this.MaxLen = len; this.arr = new int[len]; } //是否队列满了 public bool isFull() { return rear+1%MaxLen== front; } //是否队列为空 public bool isEmply() { return rear == front; } //添加队列元素 public bool addEle(int ele) { if (isFull()) { return false; } arr[rear] = ele; rear = rear + 1 % MaxLen; return true; } //显示队列中全部数据 public void showQueue() { for (int i = front + 1; i <= rear; i++) { Console.WriteLine(arr[i]); } } //将队首弹出 public int pop() { if (isEmply()) { throw new Exception(); } var result=arr[front]; front = front + 1 % front; return result; } //显示队首 public int headQueue() { if (isEmply()) { throw new Exception(); } return arr[front]; } }
相关文章推荐
- 数据结构------------数组模拟环形队列(笔记)
- PTA 数据结构与算法 7-22 堆栈模拟队列
- 数据结构实验之二叉树五:层序遍历(数组模拟队列)
- 第七周【项目1】数据结构之自建算法库——顺序环形队列
- 数据结构与算法-----队列-使用数组(顺序结构)实现
- Java尚硅谷数据结构与算法学习记录(2)-数组模拟队列、环形队列
- 【数据结构与算法C】利用两个栈S1S2模拟一个队列,用栈的基本操作实线EnQueue,DeQueue,QueueEmpty
- C++队列模拟银行排队叫号(加州大学伯克利分校计算机专业数据结构与算法作业)
- JavaScript 数据结构与算法之美 - 线性表(数组、栈、队列、链表)
- 数据结构 - 数组模拟一般队列
- 数组模拟环形队列---环形插入与取出数据
- 数据结构与算法 JavaScript实现 —— 队列(模拟发票,按票价排队)
- 【数据结构与算法学习笔记】PART3 线性结构(除向量外,数组、栈、队列、链表)
- 数据结构——环形队列的原理(模拟环形队列)
- 算法(第四版) 能够动态调整数组大小的队列数据结构
- 【数据结构与算法】第二章 数组、链表、栈和队列(基础)
- 【数据结构与算法基础】以数组实现的循环队列 / Circular Queue implemented by array
- 数据结构和算法 (二)数据结构基础、线性表、栈和队列、数组和字符串
- 29、数据结构笔记之二十九数组之硬币抛掷模拟
- 使用LinkedList模拟一个堆栈或者队列数据结构