循环队列的java结构_java数据结构之循环队列(数组实现)
package com.ws.隊列.數組環形隊列;
//環形數組隊列
//判斷滿:尾+1%隊列長度==頭
//添加數據:要(尾+1)%數組長度
//取出數據:要(頭+1)%數組長度 因為這兩個都是循環的,相當于一個圓環,%數組長度就是轉圈
//隊列有效數據個數:(尾+數組長度-頭)%數組長度 數組因為是個圈,所以可能出現頭>尾的情況,所以要提前轉一圈,保證尾>頭
//取數據:i%數組長度
//因為到最后一個時判斷空是尾+1然后取余,實際數組最后一個空間存不上,所以實際的有效隊列長度是maxSize-1
import java.util.Scanner;
public class ArrayQueue {
public static void main(String[] args) {
//測試
Array array=new Array(3);
char key=' ';//接收用戶輸入
Scanner scanner=new Scanner(System.in);
boolean loop=true;
while (loop){
System.out.println("a:顯示隊列");
System.out.println("b:退出程序");
System.out.println("c:添加數據到隊列");
System.out.println("d:從隊列取出數據");
System.out.println("e:顯示隊列頭數據");
key=scanner.next().charAt(0);//接收一個字符
switch (key){
case 'a':
array.printqueue();
break;
case 'c':
System.out.println("輸入一個數");
int value=scanner.nextInt();
array.addArray(value);
break;
case 'd':
try {
int get=array.getArray();
System.out.println("取出的數據是:"+get);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 'e':
try {
System.out.println("隊列頭數據是:"+array.printtou());
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 'b':
scanner.close();
loop=false;
break;
default:
break;
}
}
System.out.println("程序退出");
}
}
//使用數組模擬一個隊列
class Array{
private int maxSize;//數組最大容量
private int tou;//隊列頭
private int wei;//隊列尾
private int arr[];//數組,存數據
//創建隊列構造器
public Array(int maxSize){
this.maxSize=maxSize;
arr=new int[maxSize];
tou=0;//隊列頭數據
wei=0;//隊列尾數據
}
//判斷隊列是否滿
public boolean ifMax(){
return (wei+1)%maxSize==tou;
}
//判斷隊列是否為空
public boolean ifFull(){
return tou==wei;
}
//添加數據到隊列
public void addArray(int queue){
//判斷隊列是否滿
if (ifMax()){
System.out.println("隊列滿不能添加數據");
return;
}
//直接將數據加入
arr[wei]=queue;
//尾后移,得考慮取模
wei=(wei+1)%maxSize;
}
//出隊列
public int getArray(){
//判斷隊列是否為空
if (ifFull()){
//拋出異常
throw new RuntimeException("隊列為空!不能取數據");
}
//指向隊列第一個元素
int value=arr[tou];
tou=(tou+1)%maxSize;
return value;
}
//顯示隊列的所有數據
public void printqueue(){
if (ifFull()){
System.out.println("隊列為空,沒有數據");
return;
}
//從頭開始遍歷,遍歷有效數據個數
for (int i=tou;i
System.out.printf("arr[%d]=%d\n",i%maxSize,arr[i%maxSize]);
}
}
//求出當前隊列有效數據個數
public int size(){
return (wei+maxSize-tou)%maxSize;//就是轉圈
}
//顯示隊列的頭是
public int printtou(){
//判斷隊列空
if (ifFull()){
throw new RuntimeException("隊列空,無頭數據");
}
return arr[tou];
}
}
標簽:java,隊列,System,int,maxSize,println,數據結構,out
來源: https://blog.csdn.net/wangshuo2020/article/details/112403087
總結
以上是生活随笔為你收集整理的循环队列的java结构_java数据结构之循环队列(数组实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2011款蒙迪欧致胜雨刮器坏了,刮着刮就
- 下一篇: 克隆需要验证_[实验技巧]CRISPR实