数据结构java学习(三)循环队列
@
和栈一样,队列也是表,但是使用队列的特点是先进先出。
队列模型
$\color{black}{队列的基本操作是入队,它是在表的末端插入一个元素,和出队,它是删除在表开头的一个元素}$
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学习(三)循环队列的更多相关文章
- JavaScript数据结构与算法(四) 循环队列的实现
实现击鼓传花,需要用到上一章所述队列类Queue TypeScript方式实现源码 let hotPotato = (nameList, num) => { let queue = new Qu ...
- Java数组实现循环队列的两种方法
用java实现循环队列的方法: 1.添加一个属性size用来记录眼下的元素个数. 目的是当head=rear的时候.通过size=0还是size=数组长度.来区分队列为空,或者队列已满. 2.数组中仅 ...
- 《java学习三》并发编程 -------线程池原理剖析
阻塞队列与非阻塞队 阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞.试图从空的阻塞队列中获取元素的线程将会被阻塞,直到 ...
- 《java学习三》jvm性能优化-------调优
常见参数配置 -XX:+PrintGC 每次触发GC的时候打印相关日志 -XX:+UseSerialGC 串行回收 -XX:+PrintGCDetails 更详细的GC日志 -X ...
- Java学习笔记--循环总结
关键字break和continue除了在switch语句中使用break,还可以在一个循环中使用break立即终止该循环. 循环语句有三类: while循环, do-while循环和for循环.循环中 ...
- JAVA学习<三>
1.Java中运算符的优先级: 2.条件语句If: 如果 if 条件成立时的执行语句只有一条,是可以省略大括号滴!但如果执行语句有多条,那么大括号就是不可或缺的. public class Hello ...
- 《java学习三》jvm性能优化------jconsul
利用jconsul检测线程死锁, 死锁的线程,会有 已锁定 三个字 visualVm 也在jdk里 VisualVM 是一款免费的,集成了多 ...
- java学习:循环结构的使用规则和注意事项
循环结构的基本组成部分,一般可分为四部分: 初始化语句:在循环开始最初执行,而且只做唯一一次 条件判断:如果成立,则循环继续:如果不成立,则循环退出. 循环体:重复要做的事情内容,若干行语句. 进步语 ...
- Java学习—— for循环
For双重循环 /* 循环语句嵌套 */ class ForForTest { public static void main(String[] args) { /*int x,y = 0; for( ...
随机推荐
- css的relative与absolute(一)
relative与absolute是position的两个值,本文对这两个值得关系进行了一个小实验 实验一: 首先定义了两个div元素,代码如下所示: <!doctype html> &l ...
- sqlplus--spool基础运用
set heading offset feedback offset echo offset newp noneset termout offspool /home/orarun/scripts/da ...
- [patl2-018]多项式A除以B
解题关键:多项式除法的模拟. #include<cstdio> #include<cstring> #include<algorithm> #include< ...
- ubuntu16.04 安装caffe2
1.使用conda创建环境 conda create --name caffe2env python=3.6 ---------------------------------success----- ...
- PCL—点云分割(RanSaC)低层次点云处理
博客转载自:http://blog.csdn.net/app_12062011/article/details/78131318 点云分割 点云分割可谓点云处理的精髓,也是三维图像相对二维图像最大优势 ...
- Conda / Miniconda——软件包管理系统使用
conda是一个非常好的python包管理软件,但是它的Minicoda是一个非常好的生信软件包管理软件,更多conda介绍多google. Miniconda简直就是生信人的福音,尤其是像我这种传统 ...
- rpush()
批量插入多个value,并为消息队列模式 $pipe->rpush($key,$vlaues);//$values是多个value组成的一个数组
- Python程序设计7——文件读写
1 文件读写简介 文件读写是应用程序中的常用操作.下面介绍Python中进行文件读写.Python的文件读写是非常简单的. 1.1 open函数 open函数一般有了两个必须参数,一个是文件名参数,另 ...
- c++调用shell命令
system()这个函数就不说了,不能读取返回值. #include<cstdio> int main() { FILE *fp; ]={}; fp=popen("ssh roo ...
- c++中怎么实现Java中finally语句
所有学习c++的书籍都明确提出了,不要使用goto, 以免造成程序流程的混乱,使理解和调试程序都产生困难. 但是我们遇到这样一个场景怎么办:就是不管程序执行成功与否,都要执行一些资源释放语句,相当ja ...