数据结构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( ...
随机推荐
- JavaScript组合模式---引入
首先:使用一个例子来引入组合模式,需求为(1)有一个学校有2个班(一班,二班)(2)每个班级分2个小组(一班一组,一班二组,二班一组,二班二组)(3)学校计算机教室有限,每一个小组分着来上课 然后:根 ...
- 重启Oracle服务
转自:https://blog.csdn.net/wu2700222/article/details/78021207 #su– oracle sqlplus/ as sysdba //关闭服务 sh ...
- oracle错误-ORA-12519, TNS:no appropriate service handler found
转自:https://blog.csdn.net/u013147600/article/details/48380841
- Spring装配各种类型bean
一.单属性值的装配 //setter注入,提供无参构造器,提供setXX方法 <property name="" value=""></pro ...
- python爬虫(4)--Cookie的使用
Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密) 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么 ...
- Absolute Layout
----------------siwuxie095 根面板 contentPane 的默认布局为 Border Layout,将其 切换为 Absolute Layout Absolute Layo ...
- __call()和__callStatic()方法
__call() 当对象访问不存在的方法时,__call()方法会被自动调用__callStatic() 当对象访问不存在的静态方法时,__callStatic()方法会被自动调用 这两个方法在PHP ...
- C++输出斐波那契数列的几种方法
定义: 斐波那契数列指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 这个数列从第三项开始,每一项都等于前两项之和. 以输出斐波那 ...
- 时间获取_Date\SimpleDateFormat\Calendar类
1.获取当前的日期,并把这个日期转换为指定格式的字符串,如2088-08-08 08:08:08 import java.text.SimpleDateFormat; import java.uti ...
- (转)Linux网络协议栈(三)——网络设备(1)
网络设备(network device)是内核对网络适配器(硬件)的抽象与封装,并为各个协议实例提供统一的接口,它是硬件与内核的接口,它有两个特征:(1) 作为基于硬件的网络适配器与基于软件的协 ...