效果图
思路分析
cust.aowei.queue
ArrayQueueDemo.java
- 使用数组模拟队列
- 编写ArrayQueue类
- maxSize 表示数组最大容量
- front 队列头
- rear 队列尾
- arr 用于存放数据的数组,模拟队列
- 创建队列的构造器
- front=-1;指向队列头部,分析出front是指向队列头的前一个位置
- rear=-1;指向队列尾,指向队列尾的数据(队列最后一个数据
- 判断队列是否满
- 判断队列是否为空
- 添加数据到队列
- 获取队列数据,出队列
- 显示队列所有数据
具体实现代码
package cust.aowei.queue;
import java.util.Scanner;
public class ArrayQueueDemo {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("数组模拟队列");
ArrayQueue arrayQueue = null;
System.out.print("输入队列长短:");
int size = in.nextInt();
arrayQueue = new ArrayQueue(size);
while(true){
System.out.println("1:显示队列");
System.out.println("2:添加数据");
System.out.println("3:取出数据");
System.out.println("0:退出程序");
int input = in.nextInt();
switch(input){
case 1:
arrayQueue.showQueue();
break;
case 2:
System.out.print("输入数据:");
int d = in.nextInt();
arrayQueue.addQueue(d);
break;
case 3:
arrayQueue.getQueue();
break;
case 0:
System.exit(0);
break;
}
}
}
}
class ArrayQueue{
private int maxSize;
private int front;
private int rear;
private int [] arr;
public ArrayQueue(int maxSize){
this.maxSize = maxSize;
front = -1;
rear = -1;
arr = new int[maxSize];
}
public boolean isFull(){
return rear == maxSize - 1;
}
public boolean iSNull(){
return rear == front;
}
public void addQueue(int i){
if(this.isFull()){
System.out.println("队列已满");
return;
}else{
rear++;
arr[rear]=i;
}
}
public void getQueue(){
if(this.iSNull()){
System.out.println("队列为空");
return;
}else{
front++;
System.out.println(arr[front]);
}
}
public void showQueue(){
if(this.iSNull()){
System.out.println("队列为空");
return;
}else{
System.out.println("显示队列");
for (int i =front+1;i<rear+1;i++){
System.out.print(arr[i]+"\t");
}
}
System.out.println();
}
}
模拟 环形队列 的代码实现
package cust.aowei.queue;
import java.util.Scanner;
public class CircleQueueDemo {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("数组模拟环形队列");
CircleQueue circleQueue = null;
System.out.print("输入队列长短:");
int size = in.nextInt();
circleQueue = new CircleQueue(size);
while(true){
System.out.println("1:显示队列");
System.out.println("2:添加数据");
System.out.println("3:取出数据");
System.out.println("0:退出程序");
int input = in.nextInt();
switch(input){
case 1:
circleQueue.showQueue();
break;
case 2:
System.out.print("输入数据:");
int d = in.nextInt();
circleQueue.addQueue(d);
break;
case 3:
circleQueue.getQueue();
break;
case 0:
System.exit(0);
break;
}
}
}
}
class CircleQueue{
private int maxSize;
private int front;
private int rear;
private int [] arr;
public CircleQueue(int maxSize){
this.maxSize = maxSize+1;
front =0;
rear = 0;
arr = new int[maxSize+1];
}
public boolean isFull(){
return (rear+1) % maxSize == front;
}
public boolean iSNull(){
return rear == front;
}
public void addQueue(int i){
if(this.isFull()){
System.out.println("队列已满");
return;
}else{
arr[rear]=i;
rear = (rear + 1) % maxSize;
}
}
public void getQueue(){
if(this.iSNull()){
System.out.println("队列为空");
return;
}else{
System.out.println(arr[front]);
front = (front +1) % maxSize;
}
}
public void showQueue(){
if(this.iSNull()){
System.out.println("队列为空");
return;
}else{
System.out.println("显示队列");
for (int i =front;i<front+this.size();i++){
System.out.print(i%maxSize+" "+arr[i%maxSize]+"\t");
}
}
System.out.println();
}
public int size(){
return (rear + maxSize - front) % maxSize;
}
}