• 二、队列


    1、队列介绍:

     

     2、数组模拟队列:

     

     

     代码实现:

    public class ArrayQueueDemo {
        public static void main(String[] args) {
    
        }
    }
    //使用数组模拟队列--编写一个ArrayQueue类
    class ArrayQueue{
        private int maxSize;//表示数组的最大容量
        private int front;//队列头
        private int rear;//队列尾
        private int[] arr;//用于存放数据的数组
        //创建队列的构造器
        public ArrayQueue(int maxSize){
            this.maxSize = maxSize;
            arr = new int[maxSize];
            front = -1;//指向队列头部,初始时候,没有数据时指向-1
            rear = -1;//指向队列尾部,初始时候,没有数据时指向-1
        }
    
        //判断队列是否满
        public boolean isFull(){
            return rear == maxSize-1;
        }
    
        //判断队列是否为空
        public boolean isEmpty(){
            return rear == front;
        }
    
        //添加数据到队列
        public void addQueue(int data){
            if(isFull()){
                System.out.println("队列满,不能添加数据");
                return;
            }
            rear ++;
            arr[rear] = data;
        }
    
        //获取队列的数据,出duilie
        public int getQueue(){
            if(isEmpty()){
                System.out.println("队列空,不能去数据");
                return 0;
            }
            front ++;
            return arr[front];
        }
    
        //显示队列的所有数据
        public void shouQueue(){
            if(isEmpty()){
                System.out.println("队列为空");
                return;
            }
            for(int i=front+1;i<rear+1;i++){
                System.out.printf("arr[%d]=%d
    ",i,arr[i]);
            }
        }
    
        //显示队列的头数据,不是取出数据
        public int headQueue(){
            if(isEmpty()){
                System.out.println("队列为空");
                return 0;
            }
            return arr[front+1];
        }
    }

     3、环形队列:

    //环形队列
    class CircleArray {
        private int maxSize;
        private int front;//初始值0
        private int rear;//初始值0
        private int[] arr;
    
        public CircleArray(int maxSize) {
            this.maxSize = maxSize;
            arr = new int[maxSize];
        }
    
        //判断队列是否满
        public boolean isFull(){
            return (rear+1)%maxSize == front;
        }
    
        //判断队列是否为空
        public boolean isEmpty(){
            return rear == front;
        }
    
        public void addQueue(int data){
            if(isFull()){
                System.out.println("队列满了,不能加入数据了");
                return;
            }
            arr[rear] = data;
            rear =(rear+1)%maxSize;
        }
    
        //获取队列的数据,出队列
        public int getQueue(){
            if(isEmpty()){
                System.out.println("队列为空,不能取数据");
                return 0;
            }
            int value = arr[front];
            front = (front+1)%maxSize;
            return value;
        }
    
        //显示队列的所有数据
        public void shouQueue(){
            if(isEmpty()){
                System.out.println("队列为空");
                return;
            }
            for(int i=0;i<arr.length;i++){
                System.out.printf("arr[%d]=%d",i%maxSize,arr[i%maxSize]);
            }
        }
    
        //求出当前队列有效数据的个数
        public int size(){
            return (rear + maxSize - front) % maxSize;
        }
    
        //显示队列的头数据,不是取出数据
        public int headQueue(){
            if(isEmpty()){
                System.out.println("队列为空");
                return 0;
            }
            return arr[front];
        }
    
    }
  • 相关阅读:
    单链队列
    栈的顺序存储表示
    顺序队列
    串的定长顺序存储表示
    串的堆分配存储
    双向循环链表
    单循环链表的表示和实现
    串的块链存储表示
    线性表的顺序表示和实现
    线性表的单链表表示和实现
  • 原文地址:https://www.cnblogs.com/zsy-code/p/13508232.html
Copyright © 2020-2023  润新知