美文网首页程序员
数组队列的简易实现

数组队列的简易实现

作者: YAOPRINCESS | 来源:发表于2020-06-30 22:33 被阅读0次
    image.png

    看我画的图!
    我这里实现的是简易的单向队列


    front:指向第一个数据的前一个位置
    rear:指向最后一个数据的位置
    maxSize:数组的长度


    front和rear的初始值都为-1
    判断队列为空:front==rear
    判断队列为满:rear=maxSize-1


    它的进阶版为循环队列,请点击传送门


    以下为代码实现,演示请使用如下命令:
    javac -encoding utf-8 ArrayQueue.java
    java ArrayQueue


    import java.util.Scanner;
    
    //用数组实现队列
    public class ArrayQueue{
    
        private int front;//指向队列元素的上一个
        private int rear;//指向最后的队列元素
        private int maxSize;//队列的大小
        private int[] arrayQueue;//队列
    
        public static void main(String[] args) {
    
            ArrayQueue aq = new ArrayQueue(3);
            //局部变量必须显示赋值
            char key=' ';//接收用户输入的第一个字符
            Scanner scanner =new Scanner(System.in);//读取用户输入
    
            boolean flag = true;
            while(flag){
                System.out.println("s(show):显示整个队列内容");
                System.out.println("e(exit):退出程序");
                System.out.println("a(add):添加数据到队列");
                System.out.println("g(get):从队列取出数据");
                System.out.println("h(head):查看队列头数据");
                
                key=scanner.next().charAt(0);//第一个字符
                switch(key){
                    case 's':
                        aq.showQueue();
                        break;
                    case 'e':
                        scanner.close();
                        flag=false;
                        break;
                    case 'a':
                        System.out.println("请输入要添加的数据");
                        int data=scanner.nextInt();
                        aq.addQueue(data);
                        break;
                    case 'g':
                        try {
                            int result= aq.getQueue();
                            System.out.printf("取出的数据是%d\n",result);
                        } catch (Exception e) {
                            System.out.println(e.getMessage());
                        }
                        break;
                    case 'h':
                        try {
                            int result= aq.headQueue();
                            System.out.printf("队列头数据是%d\n",result);
                        } catch (Exception e) {
                            System.out.println(e.getMessage());
                        }
                        break;
                    default:
                        break;                    
                }
    
            }
            System.out.println("程序退出");
            
        }
    
        Public ArrayQueue(int size){
            maxSize=size;
            arrayQueue=new int[maxSize];
            front=-1;
            rear=-1;
        }
        //判断队列是否为空
        public boolean isEmpty(){
            // if(front==rear){
            //     return true;
            // }
            // return false;
            return rear==maxSize-1;
        }
    
        //判断队列是否已满
        public boolean isFull(){
            // if(rear==maxSize-1){
            //     return true;
            // }
            // return false;
            return rear==maxSize-1;
        }
    
        //添加元素
        public void addQueue(int param){
            if(isFull()){
                System.out.println("队列已满,不能加数据");
                return;
            }
            rear++;
            arrayQueue[rear]=param;
        }
    
        //取出元素
        public int getQueue(){
            if(isEmpty()){
                throw new RuntimeException("队列为空,不能取数据");
            }
            front++;
            return arrayQueue[front];
        }
    
        //打印队列
        public void showQueue(){
            if(isEmpty()){
                System.out.println("队列空的,没有数据");
                return;
            }
            for(int data:arrayQueue){
                System.out.printf(data+"\n");
            }
        }
    
        //显示队列的头数据,不是取出数据
        public int headQueue(){
            if(isEmpty()){
                throw new RuntimeException("队列为空,没有数据");
            }
            return arrayQueue[front+1];
        }
    }
    

    相关文章

      网友评论

        本文标题:数组队列的简易实现

        本文链接:https://www.haomeiwen.com/subject/xbgfqktx.html