环形队列
来源:互联网 发布:服务器批量安装linux 编辑:程序博客网 时间:2024/04/29 02:15
方法一:
为了能够充分地使用数组中的存储空间,把数组的前端和后端连接起来,形成一个环形的顺序表,即把存储队列元素的表从逻辑上看成一个环,称为环形队列,也叫循环队列。
ps:1、队空条件:front==rear
2、队满条件:(rear+1)%maxSize == front //少用一个空间,即最多放maxSize-1个元素。
3、初始化时front=rear=0;且从data[1]开始放元素。
4、队中元素个数为(rear-front+maxSize)%maxSize
5、队首指针进1:front=(front+1)%maxSize
队尾指针进1:rear=(rear+1)%maxSize
public class SqQueue {int[] data;int front, rear;SqQueue() {data = new int[30];front = rear = 0;}boolean empty() {return front == rear;}boolean enQueue(int e) {if((rear+1)%30 == front)return false;rear=(rear+1)%30;data[rear] = e;return true;}int[] deQueue() {int[] arr = new int[2];if(front == rear) {arr[0] = 0;return arr;}arr[0] = 1;front=(front+1)%30;arr[1] = data[front];return arr;}void display() {int count = (rear-front+30)%30;for(int i=0; i<=count-1; i++) {if(i != count-1) {System.out.print(data[(i+front+1)%30] + "->");} else {System.out.println(data[(i+front+1)%30]);}}}public static void main(String[] args) {SqQueue sq = new SqQueue();System.out.println(sq.empty());sq.enQueue(4);sq.enQueue(5);sq.display();sq.deQueue();sq.deQueue();System.out.println(sq.empty());sq.display();sq.enQueue(1);sq.enQueue(3);sq.display();sq.deQueue();sq.display();sq.enQueue(2);sq.deQueue();sq.display();System.out.println(sq.empty());}}
方法二:
如果知道了队头指针和队列中的元素个数,就可以计算出队尾指针。
ps: 1、rear = (front+count)%maxSize
2、队空条件 count==0,队满条件 count == maxSize
3、与方法一的区别是该队列最多可以放置maxSize个元素。
4、初始化时front=0,count=0
public class SqQueue {int[] data;int front, count;SqQueue() {data = new int[30];front = count = 0;}boolean empty() {return count==0;}boolean enQueue(int e) {if(count==30)return false;int rear = (front+count)%30;rear=(rear+1)%30;data[rear] = e;count++;return true;}int[] deQueue() {int[] arr = new int[2];if(count == 0) {arr[0] = 0;return arr;}arr[0] = 1;front=(front+1)%30;arr[1] = data[front];count--;return arr;}void display() {for(int i=0; i<=count-1; i++) {if(i != count-1) {System.out.print(data[(i+front+1)%30] + "->");} else {System.out.println(data[(i+front+1)%30]);}}}public static void main(String[] args) {SqQueue sq = new SqQueue();System.out.println(sq.empty());sq.enQueue(4);sq.enQueue(5);sq.display();sq.deQueue();sq.deQueue();System.out.println(sq.empty());sq.display();sq.enQueue(1);sq.enQueue(3);sq.display();sq.deQueue();sq.display();sq.enQueue(2);sq.deQueue();sq.display();System.out.println(sq.empty());}}
结果都是:
true4->5true1->332false
0 0
- 环形队列
- 环形队列
- 环形队列
- 环形队列
- 环形队列
- 环形队列
- 环形队列
- 环形队列
- 环形队列
- 缓冲区设计--环形队列
- (五)环形队列
- 无锁环形队列
- 环形队列实现原理
- 环形队列串口应用
- 环形队列--单字节
- 缓冲区设计--环形队列
- 环形缓冲区[队列]
- 环形队列类实现
- iOS UIView的点击事件与触摸手势
- EPC G2 RFID 标签
- 物联网技术上面临的基本问题和操作系统设计
- win7屏蔽ctrl+alt+up/down快捷键
- 在较低版本上面使用Material Design风格
- 环形队列
- heartbeat之crm资源管理
- SAT数学几何常见单词汇总
- C# 让字符串定长换行
- ProE/Creo插件 MCADEx Tools 4.0 ForCreo
- LR逻辑回归
- 传智播客c/c++公开课学习笔记--邮箱账户的破解与邮箱安全防控
- Context Switches上下文切换性能详解
- CAS实现单点登录(sso)搭建流程 服务器端搭建