数组模拟循环队列(java实现)
1.front变量的含义:front就指向队列的第一个元素,也就是说arr[front]就是队列的第一个元素front的初始值=0。
2.rear变量的含义:rear指向队列的最后一个元素的后一个位置.因为希望空出一个空间做为预留空间。 rear的初始值=0。
3.当队列满时,条件是(rear +1)%maxsize=front【满】。
4.对队列为空的条件,rear==front空。
5.当我们这样分析,队列中有效的数据的个数(rear+ maxsize-front)%maxsize 。
public class CircleArrayQueue {
public static void main(String[] args) {
System.out.println("测试数组模拟环形队列");
circlearrqueue aq=new circlearrqueue(3);
char key=' ';//接收用户输入
Scanner scanner =new Scanner(System.in);
boolean loop=true;
//输出有个菜单
while(loop){
System.out.println("s(show):显示队列");
System.out.println("e(exit):退出程序");
System.out.println("a(add):添加数据到队列");
System.out.println("h(ehead):查看队列头的数据 ");
System.out.println("g(get):取出队列头的数据 ");
key=scanner.next().charAt(0);//接受一个字符
switch (key){
case 's':
aq.showQueue();
break;
case 'a':
System.out.println("输出一个数");
int value=scanner.nextInt();
aq.addQueue(value);
break;
case 'g':
try{
int res=aq.getQueue();
System.out.printf("取出的数据是%d\n",res);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 'h'://查看队列头的数据
try{
int res =aq.headQueue();
System.out.printf("队列头的数据是%d\n",res);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 'e'://退出
scanner.close();
loop=false;
break;
default:
break;
}
}
System.out.println("程序退出");
}
}
class circlearrqueue{
private int maxsize;//表示队列的长度
private int front;//队列头
private int rear;//队列尾
private int[] arr;//该数组用于存放数据
public circlearrqueue(int arrMaxSize){
maxsize = arrMaxSize;
arr = new int[maxsize];
}
public boolean isFull(){
return (rear+1)%maxsize==front;
}
public boolean isEmpty(){
return rear==front;
}
public void addQueue(int n){
//判断队列是否为满
if(isFull()){
System.out.println("队列满 ,不能加入");
return;
}
arr[rear]=n;//直接将数据添加
rear=(rear+1)%maxsize;
}
public int getQueue(){
//判断队列是否为空
if(isEmpty()){
//通过抛出异常
throw new RuntimeException("队列空,不能取数据");
}
//这里需要分析front是指向队列的第一个元素
//1.先把front的值保留到临时变量 2.将front后移 3.将临时变量的值返回
int value=arr[front];
front=(front+1)%maxsize;
return value;
}
public void showQueue(){
//遍历
if(isEmpty()){
System.out.println("队列为空,没有数据");
return;
}
//从front开始遍历,遍历多少个元素?
for(int i=front;i<front+size();i++){
System.out.printf("arr[%d]=%d\n",i%maxsize,arr[i%maxsize]);
}
}
//求出当前数列有效个数
public int size(){
return (rear+maxsize-front)%maxsize;
}
public int headQueue(){
//判断
if(isEmpty()){
throw new RuntimeException("队列为空,没有数据");
}
return arr[front];
}
}
数组模拟循环队列(java实现)的更多相关文章
- C语言实现使用动态数组实现循环队列
我在上一篇博客<C语言实现使用静态数组实现循环队列>中实现了使用静态数组来模拟队列的操作. 因为数组的大小已经被指定.无法动态的扩展. 所以在这篇博客中,我换成动态数组来实现. 动态数组能 ...
- 用OC基于数组实现循环队列
一.简言 使用数组实现循环队列时,始终会有一个空余的位置预留着,作为一个判决队列已满的条件(当然也可以采用其他方式).在前面已经用C++介绍了基本的算法,可以去回顾一下https://www.cnbl ...
- Java数组实现循环队列的两种方法
用java实现循环队列的方法: 1.添加一个属性size用来记录眼下的元素个数. 目的是当head=rear的时候.通过size=0还是size=数组长度.来区分队列为空,或者队列已满. 2.数组中仅 ...
- Java数组模拟环形队列
2.环形队列 (上一篇队列:https://www.cnblogs.com/yxm2020/p/12676323.html) 百度百科 1.假溢出 系统作为队列用的存储区还没有满,但队列却发生了溢 ...
- 基于数组的循环队列(C++模板实现)
循环队列使用数组实现的话,简单.方便.之前实现的队列,当尾端索引到达队列最后的时候,无论前面是否还有空间,都不能再添加数据了.循环队列使得队列的存储单元可以循环利用,它需要一个额外的存储单元来判断队列 ...
- 队列的理解和实现(一) ----- 循环队列(java实现)
什么是队列 我们都知道栈是先进后出的一种线性表,与之相反的是,队列是一种先进先出的线性表.它只允许在表的一端进行插入,而在另一端进行删除.举个例子来说,在生活中我们买东西需要进行排队,最先排队的可以最 ...
- 循环队列java实现
public class SeqHeap { Object[] data; int font; int rear; int maxSize; public SeqHeap(int maxSize) { ...
- 深入理解循环队列----循环数组实现ArrayDeque
我们知道队列这种数据结构的物理实现方式主要还是两种,一种是链队列(自定义节点类),另一种则是使用数组实现,两者各有优势.此处我们将要介绍的循环队列其实是队列的一种具体实现,由于一般的数组实现的队列结构 ...
- 教你如何使用Java手写一个基于数组实现的队列
一.概述 队列,又称为伫列(queue),是先进先出(FIFO, First-In-First-Out)的线性表.在具体应用中通常用链表或者数组来实现.队列只允许在后端(称为rear)进行插入操作,在 ...
随机推荐
- Bat 复制本地文件到共享目录
@echo off title "copy UI" net use \\172.16.104.93\心电图 "password" /user:"adm ...
- CF1213F Unstable String Sort(差分)
其实全部可以为同一种字符串,但题目要求\(k\)种,我们考虑开始尽可能不同,最后再取\(min\) 考虑\(A\),全部不同:再做\(B\),\(S[b_{i-1}]\le S[b_{i}]\)如果开 ...
- Ubuntu+QEMU+Xv6环境搭建
操作系统:Ubuntu 16.04 32位 虚拟机:VMware 模拟器:QEMU 之前有一台centos 64位虚拟机,使用源码安装配置环境,出了一些列问题,最终环境都已经配好了,也能够在qemu上 ...
- [Linux] 60s快速分析Linux性能
转载: https://www.cnblogs.com/zichuan/p/10440617.html 之前在地铁上看到过一篇快速分析Linux系统性能的文章,觉得以后有用,今天就找了一下,转载过来. ...
- 【转】分享一款颜色神器ColorSchemer Studio
原文:https://www.cnblogs.com/xyfll7/p/7569078.html ColorSchemer Studio是一款专业配色软件,网页设计或平面设计师必备工具,和ColorP ...
- Qt 操作excel报错
onecore\com\combase\catalog\catalog.cxx(2376)\combase.dll!00007FFF1DF823CB: (caller: 00007FFF1DED3A1 ...
- Qt编写自定义控件65-光晕日历
一.前言 操作系统的更新迭代速度非常快,基本上三五年就有个新版本出来,WIN10操作系统还是一个比较成功的系统,据说现在市场份额越来越大,XP的份额已经很小,WIN7的份额也在逐步减少,在最新的WIN ...
- 为什么在MySQL数据库中无法创建外键?(MyISAM和InnoDB详解)
问题描述:为什么在MySQL数据库中不能创建外键,尝试了很多次,既没有报错,也没有显示创建成功,真实奇了怪,这是为什么呢? 问题解决:通过查找资料,每次在MySQL数据库中创建表时默认的情况是这样的: ...
- 【440】Tweet 元素意义
参考:Tweet Object 参考:Geo Objects 参考:User Object Ref: Place data dictionary Tweet Object Attribut ...
- Unity3d基于Socket通讯例子(转)
按语:按照下文,服务端利用网络测试工具,把下面客户端代码放到U3D中摄像机上,运行结果正确. http://www.manew.com/thread-102109-1-1.html 在一个网站上看到有 ...