package com.數據結構;
import java.util.Scanner;
public class 環形隊列 {
public static void main(String[] args){
LinkedArray queue = new LinkedArray(5);
Scanner scanf = new Scanner(System.in);
boolean flag = true;
while(flag){
System.out.println("L 顯示隊列");
System.out.println("A 增加數據");
System.out.println("G 取數首數據");
System.out.println("S 鏈表數據數量");
System.out.println("E 退出程序");
String ch = scanf.next();
try{
switch (ch){
case "L" :{
queue.look();
}break;
case "A" :{
queue.add(scanf.nextInt());
}break;
case "G" :{
System.out.println("數據爲"+queue.qv());
}break;
case "E" :{
flag= false;
break;
}
case "S" :System.out.println("元素數量:"+queue.queueSize());
}
}catch(Exception e){
e.printStackTrace();
}
}
scanf.close();
}
}
class LinkedArray{ //功能 :增加數據 取出數據 遍歷鏈表 判斷是否爲空 判斷是否已滿 獲取元素數量
private int maxSize; //最大容量爲maxSize-1 因爲我們約定tail爲最後一個元素的後一位 所以會空出一個位置
private int head ; //指向第一個數據 初始值0
private int tail ;//執行最後一個元素的後一個位置 初始值0
private int[] array ;
public LinkedArray(int maxSize){ //構造方法
this.maxSize = maxSize;
array = new int[maxSize] ;
}
public boolean max(){ //是否已滿
return ((tail+1+maxSize)%maxSize==head);
}
public boolean empty(){ //是否是空的
return tail==head;
}
public void add(int data){ //增加數據
if(max()){
throw new RuntimeException("隊列已滿~~~");
}
array[tail] = data ;
tail = (tail+1)%maxSize;
System.out.println("添加數據成功~~~");
}
public int qv(){ //取出首元素
if(empty()){
throw new RuntimeException("隊列是空的~~~");
}
int value = array[head];
head = (head +1)%maxSize;
return value;
}
public int queueSize(){ //獲取元素數量
return (this.tail+this.maxSize-this.head)%maxSize;
}
public void look(){
for(int i=head;i!=this.tail;){
System.out.println(array[i]);
i = (i +1)%maxSize;
}
}
}
數據結構 環形隊列
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.