JAVA数据结构---循环队列
来源:互联网 发布:淘宝动态评分查询 编辑:程序博客网 时间:2024/06/05 01:08
本程序循环队列使用数组实现的,
queueSize默认情况下的长度为10,初始化时候可以传递参数;
count表示队列中实际存入数据的多少;
头指针head和尾指针tail
代码分为三个文件:
定义接口CirQueInf.java
定义循环队列CirQue.java
测试主类MainTest.java
接口:
public interface CirQueIntf<T> { // 从尾入 public abstract void enQueue(T t); // 从头部出 public abstract void deQueue(); // 循环队列元素的个数 public abstract int Count(); // 判断队列是否为空 public abstract boolean isEmpty(); // 判断队列是否满 public abstract boolean isFull(); // 打印队列 public abstract void printQueue();}
循环队列:
public class CirQue<T> implements CirQueIntf<T> { // 定义数据 T[] a; private static final int DEFAULT_SIZE = 10; int head; int tail; int count; int queueSize; // 构造函数 @SuppressWarnings("unchecked") public CirQue() { a = (T[]) new Object[DEFAULT_SIZE]; head = 0; tail = 0; count = 0; queueSize = DEFAULT_SIZE; } @SuppressWarnings("unchecked") public CirQue(int num) { a = (T[]) new Object[num]; head = 0; tail = 0; count = 0; queueSize = num; } // 接口实现 public void enQueue(T t) { // 循环队列为空,起点不一定是0,需要变换 if (isEmpty() == true) { a[tail] = t; count++; } // 循环队列不为空,也没有满,可以装入元素,需要变换 else if (isFull() == false && isEmpty() == false) { if (tail >= 0 && tail <= queueSize - 2) { tail++; a[tail] = t; count++; } else if (tail == queueSize - 1) { a[0] = t; tail = 0; count++; } } // 循环队列已经满了,不能装入元素 else if (isFull() == true) System.out.println("循环队列已经满了,请先退出队列."); } // 退出队列 public void deQueue() { // 循环队列为空 if (isEmpty() == true) { System.out.println("队列为空,无法删除."); } // 循环队列不为空 else if (isEmpty() == false) { if (head >= 0 && head <= queueSize - 2) { head++; count--; } else if (head == queueSize - 1) { head = 0; count--; } } } // 队列里元素的个数 public int Count() { System.out.println("当前队列的长度是:" + count); return count; } // 队列是否为空 public boolean isEmpty() { if (count == 0) return true; else return false; } // 循环队列是否满了 public boolean isFull() { if (count == queueSize) return true; else return false; } // 打印循环队列 public void printQueue() { if (isEmpty() == true) { System.out.println("队列为空,没有元素"); } else if (isEmpty() == false) { for (int i = head; i <= head + count - 1; i++) { if (i <= queueSize - 1) { System.out.print(a[i] + " "); } else { System.out.print(a[i % queueSize] + " "); } } } System.out.println(); System.out.println("长度" + count); }}
测试主类:
public class MainTest { public static void main(String[] args) { CirQue<String> cq = new CirQue<String>(5); System.out.println("\n进行退队操作如下:"); cq.deQueue(); System.out.println("\n进行入队操作如下:"); cq.enQueue("111"); cq.printQueue(); cq.enQueue("222"); cq.printQueue(); cq.enQueue("333"); cq.printQueue(); cq.enQueue("444"); cq.printQueue(); cq.enQueue("555"); cq.printQueue(); cq.enQueue("666"); cq.printQueue(); System.out.println("\n进行退队操作如下:"); cq.deQueue(); cq.printQueue(); cq.deQueue(); cq.printQueue(); System.out.println("\n证明循环队列如下:"); cq.enQueue("7777"); // 7777加入时候,head=2,tail=0,实现了循环 cq.printQueue(); }}
测试结果
进行退队操作如下:队列为空,无法删除.进行入队操作如下:111 长度1111 222 长度2111 222 333 长度3111 222 333 444 长度4111 222 333 444 555 长度5循环队列已经满了,请先退出队列.111 222 333 444 555 长度5进行退队操作如下:222 333 444 555 长度4333 444 555 长度3证明循环队列如下:333 444 555 7777 长度4
1 0
- JAVA数据结构---循环队列
- 数据结构:循环队列--Java实现
- 数据结构循环队列Java实现
- java数据结构 广搜,队列,循环队列
- 【数据结构】队列-循环队列
- 【数据结构-队列】循环队列
- 数据结构(队列):循环队列
- 数据结构学习----顺序循环队列(Java实现)
- JAVA数据结构之循环队列的实现
- Java数据结构实现之循环队列
- <八>java数据结构与算法 队列 与 循环队列
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
- Java数据结构07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
- 数据结构-08 队列(循环队列)
- 数据结构之循环队列
- 【Android进阶学习】shape和selector的结合使用
- 操作系统的死锁
- apt-get安装总是失败
- netty 详解
- 自定义View的总结(自定义滑动开关)
- JAVA数据结构---循环队列
- scrollview中RelativeLayout问题
- iOS9 HTTP不能正常使用的解决办法 HTTPS
- JS 数组
- Unity3d 5.0 UI穿透判断
- OpenGL es2.0 第一个例子
- 自定义ViewGroup的总结(侧滑特效)
- 用Python读写word
- 算法学习之Dijkstra单源最短路问题