队列和循环队列的唯一区别就是,队列的front和rear对应的元素下标被影射成front%maxSize,rear%maxSize。

/**

* 循环队列

* @param  泛型T

*/

public class CircleSequenceQueue {

private T[] data;

private int front;

private int rear;

public CircleSequenceQueue(int capacity) {

data = (T[]) new Object[capacity];

front = 0;// 队头指针,指向实际队头元素

rear = 0;// 队尾指针,指向实际队尾元素的下一个位置

}

public boolean isEmpty() {

if (front == rear) {

return true;

} else {

return false;

}

}

public boolean isFull() {

if (rear - front >= data.length) {

return true;

} else {

return false;

}

}

public void insert(T t) throws Exception {

if (isFull()) {

throw new Exception("push into full queue exception");

}

data[rear % data.length] = t;

rear++;

}

public void remove() throws Exception {

if (isEmpty()) {

throw new Exception("remove from empty queue exception");

}

front++;

}

/**

* 取得队头元素

*

* @return

* @throws Exception

*/

public T getFront() throws Exception {

if (isEmpty()) {

throw new Exception("remove from empty queue exception");

}

return data[front % data.length];

}

public void show() {

System.out.print("front:" + front + ",rear:" + rear + ",[");

for (int i = front; i

System.out.print(data[i % data.length]);

if (i != rear - 1) {

System.out.print(",");

}

}

System.out.println("]");

}

public static void main(String[] args) throws Exception {

CircleSequenceQueue queue = new CircleSequenceQueue<>(10);

queue.show();

// 插入操作

queue.insert(1);

queue.show();

queue.insert(2);

queue.show();

queue.insert(3);

queue.show();

queue.insert(4);

queue.show();

queue.insert(5);

queue.show();

queue.insert(6);

queue.show();

queue.insert(7);

queue.show();

queue.insert(8);

queue.show();

queue.insert(9);

queue.show();

queue.insert(10);

queue.show();

// 删除操作

queue.remove();

queue.show();

queue.remove();

queue.show();

queue.remove();

queue.show();

queue.remove();

queue.show();

queue.remove();

queue.show();

// 插入操作

queue.insert(11);

queue.show();

queue.insert(12);

queue.show();

queue.insert(13);

queue.show();

queue.insert(14);

queue.show();

queue.insert(15);

queue.show();

}

}

java循环队列_java实现循环队列(顺序队列)相关推荐

  1. java数据结构 队列_Java数据结构与算法[原创]——队列

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本文介绍数据结构中的队列(queue)的概念.存储结构.队列的特点,文末给出ja ...

  2. java for 递归_Java/For循环/递归函数循环

    首先:java的重点和难点,命名和缓存 这次咱们的内容主要用到: 命名规则:大小写字母,下划线,美元符号$,数字,且数字不能打头 变量的声明:数据类型划分内存空间,命名,赋值 方法的声明:修饰符列表, ...

  3. java while语句_Java while循环语句

    Java while循环语句 循环语句除了for循环之外还有while和do..while,接下来我们先来看一下while循环,首先学习while循环的语法结构,如下图所示: 图6-29:while循 ...

  4. java 循环嵌套_Java的循环结构及嵌套循环

    Java的循环结构及嵌套循环 Java的循环结构while 循环结构do...while 循环结构for 循环结构 Java的嵌套循环概念循环控制语句breakcontinuereturn forea ...

  5. java lamda循环条件_Java lambda 循环累加求和代码

    java 8 stream 提供了下面几种类型的求和 Stream::mapToInt Stream::mapToDouble Stream::mapToLong public void test() ...

  6. java while语句_Java while循环

    Java while循环用于重复程序的一部分几次或重复执行一个代码块. 如果迭代次数不固定,建议使用while循环. 语法: while(condition){ //code to be execut ...

  7. java collection 遍历_Java for循环对集合的遍历

    原标题:Java for循环对集合的遍历 Java集合类的使用可以说是无处不在,总的我们可以将之分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合 ...

  8. java for循环死循环_Java for循环进化

    java for循环死循环 Iteration is one of the most basic requirement in any programming language & of al ...

  9. java for循环 标记_Java for循环

    Java for循环用于多次迭代程序的一部分,或者多次执行同一个代码块.如果迭代次数是固定的,建议使用for循环.java中有三种类型的for循环分别是简单for循环,for-each(增强型for循 ...

最新文章

  1. Nodejs+express+jade配置
  2. ubuntu下搭建一个数据化处理的开发环境
  3. shell-grep命令详解(转)
  4. 【离散数学中的数据结构与算法】二 欧几里得算法与裴蜀等式
  5. ES6一些常用的基本语法
  6. Editplus中添加System.out.println()快捷键
  7. python数据可视化源码_Python数据分析:数据可视化实战教程
  8. AndroidStudio安卓原生开发_Android扫描附近指定的蓝牙设备_通过设备名称过滤_计算距离_离扫描设备近的显示的时候放在前面---Android原生开发工作笔记128
  9. ASP.NET MVC3书店--第二节 控制器(转)
  10. VASP服务器第一次安装各种软件(上)
  11. Flash 第二章 基本绘图工具-课堂笔记
  12. 一周搞定scrapy之3,将爬取到的起点中文网信息保存到mysql
  13. 大圆航线、恒向线绘制
  14. 随机森林原始论文_2020年还需要阅读的10篇人工智能论文(附链接)
  15. 短除法求解最大公约数c语言,[编程入门]最大公约数与最小公倍数-题解(C语言代码)(短除法)...
  16. oracle实用教程选择题,第3章 表与表数据操作 Oracle实用教程(第3版)PPT.ppt
  17. 第二部分 项目管理标准
  18. Android检测太极阴,太极阴xposed安卓最新版
  19. [c语言]进值转换的详细代码实现(二进制,十进制,十六进制等)
  20. 嵌入式开发对学历门槛要求高吗?

热门文章

  1. 专家解释即将到来的BCH网络升级
  2. 跨链原子互换时代来临,BCH潜力无限!
  3. Apache Falcon数据集管理和数据处理平台
  4. kafka 监控(eagle)
  5. lvs中dr模式配置脚本
  6. 接班 RT 系统?Windows 10 云服务版首次亮相
  7. Socket阻塞,非阻塞,同步,异步
  8. 下一跳网关和转发接口的使用情况
  9. 关于jConfirm回传的解决方案
  10. 蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例