数组模拟队列
队列也是一种线性数据结构,从一端(队尾)添加元素,从另一端(队首)取出元素
当font == rear时,队列为空
当rear==maxsize-1,队列满
package database;
public class ArrQueueDemo {
public static void main(String[] args) {
//创建一个队列
ArrayQueue queue = new ArrayQueue(3);
Scanner scanner =new Scanner(System.in);
char key =' ';
boolean loop =true;
while (loop){
System.out.println("s(show):显示队列");
System.out.println("a(add):添加队列");
System.out.println("g(get):取出队列");
System.out.println("h(head):查看头队列");
System.out.println("e(exit):退出");
key = scanner.next().charAt(0);
switch (key){
case 's':
queue.showQueue();
break;
case 'a':
System.out.println("输入一个数");
int value =scanner.nextInt();
queue.addQueue(value);
break;
case 'g':
try {
int getnumber =queue.getQueue();
System.out.println(getnumber);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 'h':
try {
int headnumber =queue.headQueue();
System.out.println(headnumber);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 'e':
scanner.close();
loop=false;
break;
default:
break;
}
}
}
static class ArrayQueue{
private int maxsize;
private int font; //头指针
private int rear; //尾指针
private int [] arr; //数组
//构建队列的构造器
public ArrayQueue(int arrmaxsize){
maxsize =arrmaxsize;
arr =new int[maxsize];
font=-1;
rear=-1;
}
//判断队列是否满
public boolean isFull(){
return rear==maxsize-1;
}
//判断队列是否为空
public boolean isEmpty(){
return font==rear;
}
//添加数据到队列
public void addQueue(int n){
if (isFull()){
System.out.println("队列已满");
}
rear++;
arr[rear]=n;
}
//获取队列数据,出队列
public int getQueue(){
if (isEmpty()){
throw new RuntimeException();
}
font++;//后移
return arr[font];
}
//显示队列所有数据
public void showQueue(){
if ((isEmpty())){
throw new RuntimeException();
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
//显示头数据
public int headQueue(){
if (isEmpty()){
throw new RuntimeException();
}
return arr[font+1];
}
}
}
数组模拟环形队列
package database;
import java.util.Scanner;
public class CircleArrQueueDemo {
public static void main(String[] args) {
//有一个空间为空
CircleArrQueue queue = new CircleArrQueue(4);
Scanner scanner = new Scanner(System.in);
char key = ' ';
boolean loop = true;
while (loop) {
System.out.println("s(show):显示队列");
System.out.println("a(add):添加队列");
System.out.println("g(get):取出队列");
System.out.println("h(head):查看头队列");
System.out.println("e(exit):退出");
key = scanner.next().charAt(0);
switch (key) {
case 's':
queue.showQueue();
break;
case 'a':
System.out.println("输入一个数");
int value = scanner.nextInt();
queue.addQueue(value);
break;
case 'g':
try {
int getnumber = queue.getQueue();
System.out.println(getnumber);
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case 'h':
try {
int headnumber = queue.headQueue();
System.out.println(headnumber);
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case 'e':
scanner.close();
loop = false;
break;
default:
break;
}
}
}
}
class CircleArrQueue{
private int maxsize;
//font 指向第一个元素
private int font;
//rear 指向最后一个元素的后一个位置,空一个位置
private int rear;
private int [] arr;
//构建构造器
public CircleArrQueue(int arrmaxsize){
maxsize = arrmaxsize;
arr=new int[maxsize];
font=0;
}
//队列满
public boolean isFull(){
return (rear+1)%maxsize==font;
}
//队列空
public boolean isEmpty(){
return rear==font;
}
//添加数据
public void addQueue(int n){
if (isFull()){
System.out.println("队列已满");
return;
}
arr[rear]=n;
rear=(rear+1)% maxsize ; //队尾的索引后移
}
//从队列取出数据
public int getQueue(){
if (isEmpty()){
System.out.println("队列为空");
throw new RuntimeException();
}
int value=arr[font];
font =(font+1)%maxsize;
return value;
}
//显示出队列所有值
public void showQueue(){
if ((isEmpty())){
System.out.println("队列为空");
return;
}
for (int i = font; i <font+size(); i++) {
System.out.println(arr[i%maxsize]);
}
}
//有效值
public int size(){
return (rear-font+maxsize)%maxsize;
}
//显示出头节点
public int headQueue() {
if (isEmpty()) {
System.out.println("队列为空");
throw new RuntimeException();
}
return arr[font];
}
}