數據結構 環形隊列

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;
        }

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章