首先定义一个接口
package com.RoundQueue;
public interface IQueue {
boolean isEmpty();
boolean isFull();
void add(Object data);
void delete();
void print();
}
实现接口
package com.RoundQueue;
import java.util.Scanner;
public class MyQueue implements IQueue {
private int maxSize;
private int head, tail;
private Object[] queue;
private int counter;
public MyQueue(int maxSize) {
super();
this.maxSize = maxSize;
this.head = 0;
this.tail = 0;
this.counter = 0;
this.queue = new Object[maxSize];
}
@Override
public boolean isEmpty() {
return counter == 0;
}
@Override
public boolean isFull() {
return counter == maxSize;
}
@Override
public void add(Object data) {
if (isFull()) {
System.out.println("队已满,此元素无法入队");
return;
}
queue[tail] = data;
tail = (tail + 1) % maxSize;
counter++;
System.out.println("元素[" + data + "]入队成功");
}
@Override
public void delete() {
if (isEmpty()) {
System.out.println("队已空,无元素出队");
return;
}
int data = head;
head = (head + 1) % maxSize;
counter--;
System.out.println("元素[" + queue[data] + "]出队成功");
}
@Override
public void print() {
if (isEmpty()) {
System.out.println("队列已空,无法输出数据。");
} else if (isFull()) {
if (head == 0) {
for (int i = 0; i < maxSize; i++) {
System.out.print(queue[i] + " ");
}
} else {
for (int i = head; i < maxSize; i++) {
System.out.print(queue[i] + " ");
}
for (int i = 0; i < head; i++) {
System.out.print(queue[i] + " ");
}
}
} else {
for (int i = head; i < (head + (tail + maxSize - head) % maxSize); i++) {
System.out.print(queue[i % maxSize] + " ");
}
}
System.out.println();
}
public int getMaxSize() {
return this.maxSize;
}
}
建立一个测试类
package com.RoundQueue;
public class QueueTest {
public static void main(String[] args) {
MyQueue queue = new MyQueue(5);
queue.print();
queue.add(0);
queue.add(1);
queue.add(2);
queue.add(3);
queue.add(4);
queue.print();
queue.delete();
queue.delete();
queue.delete();
queue.print();
queue.add(1);
queue.add(2);
queue.add(2);
queue.print();
queue.delete();
queue.add("b");
queue.print();
}
}
菜单
package com.zhaojun.test0925.tasklist.RoundQueue;
import java.util.Scanner;
public class Index {
static MyQueue initQueue() {
int len;
MyQueue queue;
do {
Scanner sc = new Scanner(System.in);
System.out.println("输入一个整数");
try {
len = sc.nextInt();
queue = new MyQueue(len);
System.out.println("您有一个长度为" + queue.getMaxSize() + "的队");
break;
} catch (Exception e) {
System.out.println("输入整数有误");
}
} while (true);
return queue;
}
public static void meanu() {
MyQueue queue = Index.initQueue();
meanuHome(queue);
}
public static void meanuHome(MyQueue queue) {
System.out.println("----队列系统-----");
String tip = "** 1.入队\r\n** 2.出队\r\n** 3.查看\r\n** 0.退出";
System.out.println(tip);
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
switch (num) {
case 1:
System.out.println("输入入队元素");
Object data = sc.next();
queue.add(data);
meanuHome(queue);
break;
case 2:
queue.delete();
meanuHome(queue);
break;
case 3:
System.out.print("队里的元素有:");
queue.print();
meanuHome(queue);
break;
default:
System.out.println("退出");
break;
}
}
public static void main(String[] args) {
meanu();
}
}