@

和栈一样,队列也是表,但是使用队列的特点是先进先出。

队列模型

$\color{black}{队列的基本操作是入队,它是在表的末端插入一个元素,和出队,它是删除在表开头的一个元素}$

graph LR
A[<kbd>入队</kbd>] --> b[队列]
b[队列] --> c[<kbd>出队</kbd>]

队列的循环数组实现

  • 实现队列的类
import java.util.Arrays;

/**
* @author 李正阳
* @param <E> 泛型存储类型
*/
public class MyArrayQueue<E> implements queue<E> {
/**
* @param rear 队尾
* @param front 队头
* @param size 数组中现在有多少个元素
* @param MAX_CAPATIAL 数组的总大小
* @param array 存储元素的数组
*/
private int rear;
private int front;
private int size;
private final int MAX_CAPATIAL=10;
private Object[] array; /**
* 构造方法 初始化数组和相关的值
*/
public MyArrayQueue(){
array=new Object[MAX_CAPATIAL];
rear=0;
front=0;
size=0;
} /**
* 入队方法
* 先给size遍历加一,如果队列满了,就给size变量减一
* 若队列未满就给队尾加一赋值
* @param p 需要入队的元素
* @return true 成功入队 false 入队失败
*/
@Override
public boolean push(Object p) {
size++;
if(isFull()){
System.out.println("队列满了");
size--;
return false;
}else{
if(rear>=MAX_CAPATIAL){
rear=0;
array[rear++]=p;
}else{
array[rear++]=p;
}
}
return true;
} /**
* 出队方法
* 先判空再出队
* @return 出队的泛型类型的元素
*/
@Override
public E pop() {
size--;
E temp=(E) array[front];
if(isEmpty()){
System.out.println("队列为空");
}else{
front++;
if(front>MAX_CAPATIAL){
front=0;
}
}
return temp;
} /**
* 表的长度
* @return 表中有多少哥元素
*/
@Override
public int size() {
return size;
} /**
* 从表头到表尾输出表中的元素
*/
@Override
public void travel() {
int i=front; while (true){
System.out.print(array[i++]+" ");
if(i==MAX_CAPATIAL){
i=0;
}
if(i==rear){
break;
}
}
System.out.println();
} /**
* 判断表是否为空
* @return true 表为空 false 表不为空
*/
@Override
public boolean isEmpty() {
if(size==0){ return true;
}else{
return false;
}
} /**
* @return 返回队尾元素
*/
@Override
public E getRear() {
return (E) array[rear];
}
/**
* @return 返回队头元素
*/
@Override
public E getFront() {
return (E)array[front];
} /**
* 判断表是否满了
* @return true 队列满了 false 队列未满
*/
private boolean isFull(){
if(size>MAX_CAPATIAL){
return true;
}else{
return false;
}
} }
  • 实现接口文件
/**
* 队列的接口
* @param <E> 泛型类型
*/
public interface queue<E> {
/**
* 入队方法
* @param p
* @return
*/
boolean push(E p); /**
* 出队方法
* @return 返回泛型类型的方法
*/
E pop(); /**
* 表中元素的大小
* @return
*/
int size(); /**
* 输出表中元素
*/
void travel(); /**
* 判断表是否为空的
* @return true 表是空的 false 表是非空
*/
boolean isEmpty(); /**
* 获取表尾元素
* @return 表尾的元素
*/
E getRear(); /**
* 获取表头的元素
* @return 表头的元素
*/
E getFront();
}

数据结构java学习(三)循环队列的更多相关文章

  1. JavaScript数据结构与算法(四) 循环队列的实现

    实现击鼓传花,需要用到上一章所述队列类Queue TypeScript方式实现源码 let hotPotato = (nameList, num) => { let queue = new Qu ...

  2. Java数组实现循环队列的两种方法

    用java实现循环队列的方法: 1.添加一个属性size用来记录眼下的元素个数. 目的是当head=rear的时候.通过size=0还是size=数组长度.来区分队列为空,或者队列已满. 2.数组中仅 ...

  3. 《java学习三》并发编程 -------线程池原理剖析

    阻塞队列与非阻塞队 阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞.试图从空的阻塞队列中获取元素的线程将会被阻塞,直到 ...

  4. 《java学习三》jvm性能优化-------调优

    常见参数配置 -XX:+PrintGC      每次触发GC的时候打印相关日志 -XX:+UseSerialGC      串行回收 -XX:+PrintGCDetails  更详细的GC日志 -X ...

  5. Java学习笔记--循环总结

    关键字break和continue除了在switch语句中使用break,还可以在一个循环中使用break立即终止该循环. 循环语句有三类: while循环, do-while循环和for循环.循环中 ...

  6. JAVA学习<三>

    1.Java中运算符的优先级: 2.条件语句If: 如果 if 条件成立时的执行语句只有一条,是可以省略大括号滴!但如果执行语句有多条,那么大括号就是不可或缺的. public class Hello ...

  7. 《java学习三》jvm性能优化------jconsul

    利用jconsul检测线程死锁,    死锁的线程,会有   已锁定    三个字 visualVm                       也在jdk里 VisualVM 是一款免费的,集成了多 ...

  8. java学习:循环结构的使用规则和注意事项

    循环结构的基本组成部分,一般可分为四部分: 初始化语句:在循环开始最初执行,而且只做唯一一次 条件判断:如果成立,则循环继续:如果不成立,则循环退出. 循环体:重复要做的事情内容,若干行语句. 进步语 ...

  9. Java学习—— for循环

    For双重循环 /* 循环语句嵌套 */ class ForForTest { public static void main(String[] args) { /*int x,y = 0; for( ...

随机推荐

  1. python jvm数据

    在网上找的抱歉忘了原链接了额 #!/usr/bin/env python # # import os import commands import re import sys (status1, re ...

  2. Android编译系统产品线

    1.Android源码中的产品线解析 通常产品厂商在拿到Android源码后会在Android源码基础上进行定制修改,以匹配适应自己的产品.这就引入了产品线的概念.Android系统源码中,产品相关的 ...

  3. loop

    -- ------------------------loop---------------------------delimiter $DROP PROCEDURE IF EXISTS my_cou ...

  4. 基于cookie实现用户验证

    #!/usr/bin/env python import tornado.ioloop import tornado.web class IndexHander(tornado.web.Request ...

  5. cocos2dx中的Rapidjson

    1 Json基础 JSON 概念和特点: JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式,类似 XML ...

  6. Java 访问 Kylin 总结

    这次开发功能是OEM统计报表.统计报表的数据由大数据平台部的同事收集,数据的展示由我们部门开发. 大数据那边使用 Kylin 分布式分析引擎(kylin官方文档). Kylin 虽比较偏向大数据相关, ...

  7. Spring集成MyBatis01 【推荐使用】、springMVC中文乱码和json转换问题

    1 导包 1.1 spring-webmvc : spring框架包(当然里面也包含springmvc) 1.2 mybatis : mybatis框架包 1.3 mybatis-spring : s ...

  8. repeater的command事件用法

    当Repeater里面循环控件时就会用到command, 是Repeater控件的原生事件用法 Repeater里面如果循环控件,控件的ID是会被改变的 repeater.itemcommand+= ...

  9. Selenium二次封装-Python版本

    from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from seleni ...

  10. The Apache Tomcat installation at this directory is version 8.5.24 Tomcat 8.0 installation is expect

    在一台新电脑上搭建Java开发环境,JDK 是1.8,Tomcat下载了Tomcat 8.5.24,已经配置好了Java和Tomcat的环境变量,开发工具是Eclipse MARS,准备在Eclips ...