数据结构 环形队列

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

    }
}

猜你喜欢

转载自blog.csdn.net/guyjy/article/details/106576539