2025-01-10 队列,环形队列

This commit is contained in:
liangjinglin 2025-01-11 00:36:56 +08:00
parent 6be199baf1
commit 190af1636a
2 changed files with 155 additions and 0 deletions

View File

@ -0,0 +1,85 @@
package queue;
import java.util.Scanner;
public class ArrayCircleQueue {
private int maxSize;
private int front;//队列头前一个位置
private int rear;//队列尾的位置
private int[] queue;
public ArrayCircleQueue(int maxSize){
this.maxSize = maxSize;
queue = new int[this.maxSize];
front = 0;
rear = 0;
}
public boolean isFull() {
return (rear + 1) % this.maxSize == front;
}
public boolean isEmpty() {
return rear == front;
}
public void addQueue(int data){
if (isFull()){
System.out.println("队列已满");
return;
}
queue[rear] = data;
rear = (rear + 1) % maxSize;
}
public String getQueue(){
if(isEmpty()){
System.out.println("队列为空");
return "队列为空";
}
int data = queue[front];
front = (front + 1) % maxSize;
return "获取到的数据为:" + data;
}
public void showQueue() {
if(isEmpty()){
System.out.println("队列为空");
}
System.out.println("当前队列为:");
int size = (rear + maxSize - front) % maxSize;
for (int i = front; i < front + size; i ++) {
System.out.print(queue[i%maxSize] + " ");
}
}
public int size(){
return (rear + maxSize - front) % maxSize;
}
public static void main(String[] args) {
ArrayCircleQueue arrayQueue = new ArrayCircleQueue(5);
Scanner scan = new Scanner(System.in);
while (true) {
System.out.println("a存数, g取数, s查看, exit退出:");
String handle = scan.next();
if ("exit".equals(handle)){
break;
}
if ("a".equals(handle)){
System.out.println("请输入入队数据:");
int data = scan.nextInt();
arrayQueue.addQueue(data);
}
if ("g".equals(handle)){
String resp = arrayQueue.getQueue();
System.out.println(resp);
}
if ("s".equals(handle)){
arrayQueue.showQueue();
}
}
scan.close();
}
}

View File

@ -0,0 +1,70 @@
package queue;
import java.util.Scanner;
public class ArrayQueue {
private int maxSize;
private int front;//队列头前一个位置
private int rear;//队列尾的位置
private int[] queue;
public ArrayQueue(int maxSize){
this.maxSize = maxSize;
queue = new int[this.maxSize];
front = -1;
rear = -1;
}
public boolean isFull() {
return rear == this.maxSize - 1;
}
public boolean isEmpty() {
return rear == front;
}
public void addQueue(int data){
if (isFull()){
System.out.println("队列已满");
return;
}
rear ++;
queue[rear] = data;
System.out.println("当前队列:");
for(int n : queue){
System.out.print(n + " ");
}
}
public String getQueue(){
if(isEmpty()){
System.out.println("队列为空");
return "队列为空";
}
front++;
return "获取到的数据为:" + queue[front];
}
public static void main(String[] args) {
ArrayQueue arrayQueue = new ArrayQueue(5);
Scanner scan = new Scanner(System.in);
while (true) {
System.out.println("a存数, g取数, exit退出:");
String handle = scan.next();
if ("exit".equals(handle)){
break;
}
if ("a".equals(handle)){
System.out.println("请输入入队数据:");
int data = scan.nextInt();
arrayQueue.addQueue(data);
}
if ("g".equals(handle)){
String resp = arrayQueue.getQueue();
System.out.println(resp);
}
}
scan.close();
}
}