1、java数据结构和算法---循环队列
直接上代码:
public class CircleArrayQueueLvcai {
private int[] array;
private int maxSize;//循环队列大小
private int front; // 队列头, 这里约定初始值为0,
private int rear ; //队列尾,初始值为0, 这里约定为 队列中最后一位元素的下一个位置(这样约定,意味着该队列的存储容量为 maxSize-1)
//构造
public CircleArrayQueueLvcai(int size){
maxSize = size;
array = new int[size];
}
//是否满
public boolean isFull(){
return (rear+1) % maxSize == front; //rear+1 = maxSize 此时对maxSize取模式 结果为0
}
//是否空
public boolean isEmpty(){
return rear == front; //队列尾 = 队列头 = 0 就为空
}
//添加数据
public String add(int num) throws Exception {
//判断是否满
if(isFull()){
throw new Exception("circle Queue is full, you can set num is "+(maxSize-1));
}
array[rear] = num;
//rear++; 这样写不对,, 因为是循环队列,,队列添加满后,,rear自动变为0, 重新开始
rear = (rear+1) % maxSize;
return "add success";
}
//出队列
public int push() throws Exception {
//判断是否为空
if(isEmpty()){
throw new Exception("circle array is empty");
}
int resultNum = array[front];
//不能这样写 front++; 循环队列, 要让front 队列头加满后, 自动变为0
front = (front+1) % maxSize;
return resultNum;
}
//show circle queue
public void show(){
//是否为空
if(isEmpty()){
System.out.println(" circle queue is empty");
}
//从front开始遍历到 有效数据
for(int i=front; i<front+getAliveNum(); i++){
System.out.print(array[i]+" ");
}
System.out.println();
}
//获取 循环队列有效数据
public int getAliveNum(){
//获取队列的有效数据: (rear+maxSize-front)%maxSize , 当rear为最后一个元素的下一个位置时,这个公式是成立的
return (rear+maxSize-front)%maxSize;
}
public static void main(String[] args) throws Exception {
//创建循环队列, 容量为4
CircleArrayQueueLvcai circle = new CircleArrayQueueLvcai(5);
circle.add(1);
circle.add(2);
circle.add(3);
circle.add(4);
circle.add(4);//这样的循环队列 能存的元素的大小为 size-1
circle.show();
//出队列
//circle.push();
//circle.push();
//circle.push();
//circle.show();
}
}
测试结果: 
public static void main(String[] args) throws Exception {
//创建循环队列, 容量为4
CircleArrayQueueLvcai circle = new CircleArrayQueueLvcai(5);
circle.add(1);
circle.add(2);
circle.add(3);
circle.add(4);
//circle.add(4);//这样的循环队列 能存的元素的大小为 size-1
circle.show();
//出队列
circle.push();
//circle.push();
//circle.push();
circle.show();
}
结果为:
public static void main(String[] args) throws Exception {
//创建循环队列, 容量为4
CircleArrayQueueLvcai circle = new CircleArrayQueueLvcai(5);
circle.add(1);
circle.add(2);
circle.add(3);
circle.add(4);
//circle.add(4);//这样的循环队列 能存的元素的大小为 size-1
circle.show();
//出队列
circle.push();
circle.push();
//circle.push();
circle.show();
}
结果为:
1、java数据结构和算法---循环队列的更多相关文章
- Java数据结构和算法(五)——队列
队列.queue,就是现实生活中的排队. 1.简单队列: public class Queqe { private int array[]; private int front; private in ...
- Java数据结构和算法(二)--队列
上一篇文章写了栈的相关知识,而本文会讲一下队列 队列是一种特殊的线性表,在尾部插入(入队Enqueue),从头部删除(出队Dequeue),和栈的特性相反,存取数据特点是:FIFO Java中queu ...
- 【Java数据结构学习笔记之二】Java数据结构与算法之队列(Queue)实现
本篇是数据结构与算法的第三篇,本篇我们将来了解一下知识点: 队列的抽象数据类型 顺序队列的设计与实现 链式队列的设计与实现 队列应用的简单举例 优先队列的设置与实现双链表实现 队列的抽象数据类型 ...
- 【Java数据结构学习笔记之三】Java数据结构与算法之队列(Queue)实现
本篇是数据结构与算法的第三篇,本篇我们将来了解一下知识点: 队列的抽象数据类型 顺序队列的设计与实现 链式队列的设计与实现 队列应用的简单举例 优先队列的设置与实现双链表实现 队列的抽象数据类型 ...
- Java数据结构与算法(3):队列
队列也是一种表,不同的是队列在一端进行插入而在另一端进行删除. 队列模型 队列的基本操作包括入队.出队操作.在表的末端插入元素,在表的开头删除元素,即先进先出(FIFO). 队列的数组实现 对于每一个 ...
- Java数据结构和算法 - 栈和队列
Q: 栈.队列与数组的区别? A: 本篇主要涉及三种数据存储类型:栈.队列和优先级队列,它与数组主要有如下三个区别: A: (一)程序员工具 数组和其他的结构(栈.队列.链表.树等等)都适用于数据库应 ...
- Java数据结构和算法(六)——前缀、中缀、后缀表达式
前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...
- Java数据结构和算法 - 堆
堆的介绍 Q: 什么是堆? A: 这里的“堆”是指一种特殊的二叉树,不要和Java.C/C++等编程语言里的“堆”混淆,后者指的是程序员用new能得到的计算机内存的可用部分 A: 堆是有如下特点的二叉 ...
- Java数据结构和算法 - 二叉树
前言 数据结构可划分为线性结构.树型结构和图型结构三大类.前面几篇讨论了数组.栈和队列.链表都是线性结构.树型结构中每个结点只允许有一个直接前驱结点,但允许有一个以上直接后驱结点.树型结构有树和二叉树 ...
随机推荐
- vuex、localStorage、sessionStorage之间的区别
vuex存储在内存中,localStorage以文件形式存储在本地,sessionStorage针对一个session(阶段)进行数据存储. 当页面刷新时vuex存储的数据会被清除,localStor ...
- 问渠那得清如许?为有源头活水来——对【近取Key】产品进行的深度测评与解析
在 Build To Show 的场景中,大家各显身手,用各种办法展现技术,的确很难在单一的维度上确定谁赢谁输.但是,在 Build To Win 的场景中,往往市场就是那么一块, 竞争对手占了 70 ...
- SE_Work0_回顾与展望
项目 内容 课程:北航-2020-春-软件工程 博客园班级博客 要求:阅读推荐博客并回答问题 热身作业阅读部分要求 我在这个课程的目标是 提升团队管理及合作能力,开发一项满意的工程项目 这个作业在哪个 ...
- .Net Core导入千万级数据至Mysql
最近在工作中,涉及到一个数据迁移功能,从一个txt文本文件导入到MySQL功能. 数据迁移,在互联网企业可以说经常碰到,而且涉及到千万级.亿级的数据量是很常见的.大数据量迁移,这里面就涉及到一个问题 ...
- [bug] Hive:map.xml could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation.
原因: datanode未运行,重启hdfs
- 解决nohup: 忽略输入并把输出追加到"nohup.out"或者nohup: 忽略输入重定向错误到标准输出端
nohup启动脚本的时候,没有指定输出路径,默认使用当前目录的nohup.out 例如下面这句就是默认使用nohup.out作为输出文件: nohup script.sh & 改成下面的,则/ ...
- Scala 中的可变(var)与不可变(val)
引言 Scala 中定义变量分为 var(可变变量)和 val(不可变变量) Scala 中集合框架也分为可变集合和不可变集合.比如 List(列表) 和 Tuple(元组)本身就是不可变的,set ...
- make clean 和 make distclean区别-(转自秋水Leo)
make clean仅仅是清除之前编译的可执行文件及配置文件. 而make distclean要清除所有生成的文件. Makefile 在符合GNU Makefiel惯例的Makefile中,包含了一 ...
- Nginx|Apache目录权限禁止执行PHP设置
Ngnix: location ~ /upload/.*.(php|php5)?$ { deny all; } 这就是禁止upload内执行php,但是图片可以打开哦 多目录禁止: location ...
- Swift系列十 - inout的本质
inout是可以用来在函数内部修改外部属性内存的. 一.inout回顾 示例代码: func test(_ num: inout Int) { num = 20 } var a = 10 test(& ...