数组模拟队列

数组模拟队列

今天学习数组模拟队列。队列常用于生活中的方方面面。比如银行叫号排队。实际上就是队列。所有人抽号排队。先去的先抽号。所以靠前的号最后会先被叫到然后出队。后边的会随之往前移位。也就是队伍中的顺序会发生变化。

实际上用数组很容易模拟出来队列。

队列的几大要素。队列长度(MaxSize) 队列头部的前一个位置front,队列的尾部rear,还有我们的数组arr[]。我们需要创建Queue类来模拟队列。

package com.joseph.sparseArray;

public class ArrayQueue {
public static void main(String[] args) {
Queue queue = new Queue(3);
System.out.println("数组模拟队列长度为:" + queue.arr.length + ",MaxSize = " + queue.MaxSize);
queue.addQueue(10);
queue.List();
System.out.println("rear:" + queue.rear);
System.out.println("front" + queue.front);
System.out.println("头数据:" + queue.arr[queue.front + 1]);
System.out.println("队尾数据:" + queue.arr[queue.rear]);
System.out.println("---------------------------------------------------------------------");
queue.addQueue(20);
queue.List();
System.out.println("rear:" + queue.rear);
System.out.println("front" + queue.front);
System.out.println("头数据:" + queue.arr[queue.front + 1]);
System.out.println("队尾数据:" + queue.arr[queue.rear]);
System.out.println("---------------------------------------------------------------------");
queue.getQueue();
queue.List();
System.out.println("rear:" + queue.rear);
System.out.println("front" + queue.front);
System.out.println("头数据:" + queue.arr[queue.front + 1]);
System.out.println("队尾数据:" + queue.arr[queue.rear]);
System.out.println("---------------------------------------------------------------------");
queue.addQueue(40);
queue.List();
System.out.println("rear:" + queue.rear);
System.out.println("front" + queue.front);
System.out.println("头数据:" + queue.arr[queue.front + 1]);
System.out.println("队尾数据:" + queue.arr[queue.rear]);
}
}
class Queue{
int MaxSize ;
int rear ;
int front ;
int arr[] ;
public Queue(int MaxSize) {
this.MaxSize = MaxSize ;
arr = new int[MaxSize];
this.rear = -1;
this.front = -1;
}
public boolean isFull(){
return rear == MaxSize -1 ;
}
public boolean isEmpty(){
return rear == front ;
}
public void addQueue(int key){
//判断是否已满
if(isFull()){
System.out.println("QUEUE IS FULL!");
return ;
}
//没满
this.rear ++ ;
arr[rear] = key ;
if(arr[rear] == key){
System.out.println("添加成功!");
}else{
System.out.println("添加失败!");
}
}
public int getQueue(){
//判断为空
if(isEmpty()){
throw new RuntimeException("QUEUE IS EMPTY");
}
//不为空
this.front ++ ;
return arr[front]; }
public void List(){
//判断
if(isEmpty()){
System.out.println("QUEUE IS EMPTY!");
return ;
}
for(int i = 0 ; i < arr.length ; i ++){
System.out.printf("arr[%d] = %d\n",i,arr[i]);
}
}
}
/**
* @author JosephWang
* @date 2021/8/9 17:18
*/

注意:

心系的小伙伴已经发现了我们的瑕疵。这个数组模拟队列已经完成了。但是数组是一次性的。我们发现当数组满了或者没满。队列的头和尾使用我们的rear和front来指向的。而取出数据后的下标将被弃用。导致浪费。我们下期将优化这种浪费。

数据结构算法学习之队列(数组模拟java实现)的更多相关文章

  1. java 栈和队列的模拟--java

    栈的定义:栈是一种特殊的表这种表只在表头进行插入和删除操作.因此,表头对于栈来说具有特殊的意义,称为栈顶.相应地,表尾称为栈底.不含任何元素的栈称为空栈. 栈的逻辑结构:假设一个栈S中的元素为an,a ...

  2. 数据结构——栈的实现(数组、Java)

    巩固数据结构 栈是一种有限制的线性表 只能对表尾进行操作 package com.shine.test.datastruct; import java.util.Arrays; public clas ...

  3. python数据结构算法学习自修第一天【数据结构与算法引入】

    1.算法引入: #!/usr/bin/env python #! _*_ coding:UTF-8 _*_ from Queue import Queue import time que = Queu ...

  4. 算法笔记_224:夺冠概率模拟(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能. 假设有甲.乙.丙.丁四个球队.根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表 ...

  5. 数据结构(3):java使用数组模拟堆栈

    堆栈原理: 数组模拟堆栈: //数组模拟栈 class ArrayStack{ //栈顶 private int top = -1; private int maxSize; private int[ ...

  6. 算法入门 - 基于动态数组的栈和队列(Java版本)

    之前我们学习了动态数组的实现,接下来我们用它来实现两种数据结构--栈和队列.首先,我们先来看一下栈. 什么是栈? 栈是计算机的一种数据结构,它可以临时存储数据.那么它跟数组有何区别呢? 我们知道,在数 ...

  7. 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解

    数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...

  8. Java数组模拟队列 + 优化

    队列介绍 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则. 即:先存入队列的数据,要先取出.后存入的要后取出 示意图:(使用数组模拟队列示意图)  数组模拟队列 队列本身是有序列表 ...

  9. java学习笔记(基础篇)—数组模拟实现栈

    栈的概念 先进后出策略(LIFO) 是一种基本数据结构 栈的分类有两种:1.静态栈(数组实现) 2.动态栈(链表实现) 栈的模型图如下: 需求分析 在编写代码之前,我习惯先对要实现的程序进行需求分析, ...

随机推荐

  1. 我用段子讲.NET之依赖注入其一

    <我用段子讲.NET之依赖注入其一> 1) 西城的某个人工湖畔,湖水清澈见底,湖畔柳树成荫.人工湖往北,坐落着两幢写字楼,水晶大厦靠近地铁站,由于为了与湖面天际线保持一致,楼层只有26层高 ...

  2. 铂金07:整齐划一-CountDownLatch如何协调多线程的开始和结束

    欢迎来到<并发王者课>,本文是该系列文章中的第20篇. 在上一篇文章中,我们介绍了Condition的用法.在本文中,将为你介绍CountDownLatch的用法.CountDownLat ...

  3. Nginx网站服务

    1.常见的网站服务 静态网站服务: Apache服务 nginx服务 动态网站服务: Tomcat服务 PHP 2.nginx网站服务特点 (1)nginx具有高并发(特别是静态资源).占用系统资源少 ...

  4. 【问答分享第一弹】MySQL锁总结:MySQL行锁、表锁、排他锁、共享锁的特点

    大家好,我是小于哥哈.前几天能分享了第一期面试题,MySQL 中有哪几种锁 和 这些锁各有哪些特点 ,这道面试题是经常会被问到的一个面试题,大家反馈的都挺不错的.今天特此来总结一下. 首发于公众号[终 ...

  5. Linux:CentOS-7常用命令

    查看进程 1. ps -ef | grep #查看进程 ps -ef | grep 名称 #示例 ps -ef | grep docker 2. ps aux #当前所有进程信息 ps aux VSZ ...

  6. Spring:Spring-IOC实例化bean的常用三种方式

    Spring容器提供了三种对bean的实例化方式: 1)构造器实例化 public class Demo { private String name; //getter和setter方法略 } < ...

  7. Spring:Spring-IOC三种注入方式、注入不同数据类型

    一.Spring IOC(依赖注入的三种方式): 1.Setter方法注入 package com.jpeony.spring.setter; import com.jpeony.spring.com ...

  8. mac sudo: /etc/sudoers is world writable

    今天误操作修改了/etc/sudoers的权限,将它的权限改成了777,结果就导致执行所有sudo的命令都报错. sudo: /etc/sudoers is world writable sudo: ...

  9. PHP观察者模式 (转)

      观察者模式(Observer),当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新. 场景:一个事件发生后,要执行一连串更新操作.传统的编程方式,就是在事件的代码之后直接加入处理逻 ...

  10. 使用xcode实现IM的那些坑

    想用xcode基于XMPP实现即时通讯,mac必须安装openfire(xmpp服务器),mysql(本地数据库,用于配置openfire),JDK(打开openfire必须本地具备java环境),x ...