【数据结构】——队列 (循环队列和基于Java的运算实现)
2021/11/8 20:09:47
本文主要是介绍【数据结构】——队列 (循环队列和基于Java的运算实现),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
队列
顺序循环队列
基本运算实现
队列
概述:只允许在表的一端进行元素插入,在另一端进行元素删除,允许插入的一端称为队尾(rear),允许删除的一端称为队头(frout)。
先进先出(First In First Out),简称FIFO
图示:
顺序循环队列
概述:两个指针frout和rear分别指示队头和队尾元素在表中的位置,它们的初值在队列初始化时置为0。
图示:
判队列是"空"还是"满":
- 设一个标志位,来区别队列是"空"还是"满"
- 设置一个计数器记录队列中元素个数
- 少用一个元素空间,约定入队前,测试尾指针在循环意义下加1后是否等于头指针,若相等则认为队列满
基本运算实现
//循环队列基本运算 public class SeqQueue { //定义队列长度 int size = 100; //定义数组存放数据 Object[] data = new Object[size]; //定义队头指针 int front; //定义队尾指针 int rear; //置空队列 public void InitQueue() { front = rear = 0; } //判队空 public boolean QueueEmpty() { return front == rear; } //判队满 public boolean QueueFull() { return (rear + 1) % size == front; } //入队列 public void EnQueue(Object x) { //判断队列是否已满 if (QueueFull()) { System.out.println("Queue overflow!"); } else { data[rear] = x; rear++; } } //取队头元素 public Object GetFront() { //判断队列是否为空 if (QueueEmpty()) { System.out.println("Queue empty!"); return null; } else { return data[front]; } } //遍历队列 public void QueueShow() { //判断队列是否为空 if (QueueEmpty()) { System.out.println("Queue empty!"); } else { for (int i = front; i < rear; i++) { System.out.println(data[i]); } } } //出队列:删除队头元素并,返回其值 public Object DeQueue() { //判断队列是否为空 if (QueueEmpty()) { System.out.println("Queue empty!"); return null; } else { //获取被删除的元素值 Object x = data[front]; //头指针加1 front++; return x; } } }
public class SeqQueueTest { public static void main(String[] args) { //创建循环队列对象 SeqQueue seqQueue = new SeqQueue(); //置空队列 seqQueue.InitQueue(); //判队空 boolean b = seqQueue.QueueEmpty(); System.out.println("当前队列是否为空:" + b); //判队满 boolean b1 = seqQueue.QueueFull(); System.out.println("当前队列是否已满:" + b1); System.out.println(); //入队列 seqQueue.EnQueue("qq"); seqQueue.EnQueue("ww"); seqQueue.EnQueue("ee"); seqQueue.EnQueue("rr"); //遍历队列 System.out.println("遍历队列(先进先出):"); seqQueue.QueueShow(); //取队头元素 Object o = seqQueue.GetFront(); System.out.println("队头元素为:" + o); System.out.println(); //出队列 seqQueue.DeQueue(); seqQueue.DeQueue(); //判队空 boolean b2 = seqQueue.QueueEmpty(); System.out.println("当前队列是否为空:" + b2); //判队满 boolean b3 = seqQueue.QueueFull(); System.out.println("当前队列是否已满:" + b3); //遍历队列 System.out.println("遍历队列(先进先出):"); seqQueue.QueueShow(); //取队头元素 Object o1 = seqQueue.GetFront(); System.out.println("队头元素为:" + o1); } }
运行结果:
这篇关于【数据结构】——队列 (循环队列和基于Java的运算实现)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-30java最新版本是什么,有什么特性?-icode9专业技术文章分享
- 2024-11-30[开源]27.8K star!这款 Postman 替代工具太火了!
- 2024-11-30Gzip 压缩入门教程:轻松掌握文件压缩技巧
- 2024-11-29开源工具的魅力:让文档管理更“聪明”
- 2024-11-29Release-it开发入门教程
- 2024-11-29Rollup 插件入门教程:轻松掌握模块打包
- 2024-11-29从零到一,产品经理如何玩转项目管理和团队协作
- 2024-11-29如何通过精益生产管理工具帮助项目团队实现精准进度控制?
- 2024-11-29低代码应用开发课程:新手入门与基础教程
- 2024-11-29入门指南:全栈低代码开发课程