Java数据结构之用数组实现队列的入队和出队操作

package LinkList;

public class QueueByArray{

    // 数组长度
    int len = 20;
    // 数组
    int[] arr = new int[len];

    // 队头标志
    int head_flag = 0; // 与队列中第一个元素对齐

    // 队尾标志
    int tail_flag = -1; // 与队列中最后一个元素对齐

    int size = 0; // 队列中元素的个数

    public QueueByArray(){


    }

    public QueueByArray(int len){

        this.len = len;
        arr = new int[len];
    }


    public void enQueue(int a){

        if(size == len){

            QueueExpand(); // 队列扩容
        }
        else if(tail_flag == len -1){

            tail_flag = -1;
        }

        tail_flag++;
        arr[tail_flag] = a;

        size++; // 队列长度加1

    }

    public void enQueue_lenfix(int a){ // 队列长度固定,不可扩容

        if(size == len){

            System.out.println("队列满!无法入队!");
        }
        else if(tail_flag == len -1){

            tail_flag = -1; // 队列未满,队尾标志到数组最后一个位置,前移该标志
        }

        tail_flag++;
        arr[tail_flag] = a;

        size++; // 队列长度加1

    }

    public int deQueue(){

        if(size == 0){

//            System.out.println("队空!无法出队!");
            return -1;
        }

        int a = arr[head_flag]; // 取队头元素出队

//        System.out.println("出队:" + a);

        head_flag++; // 队头元素后移

        if(head_flag == len){

            head_flag = 0;
        }

        size--; // 队列元素个数减1

        return a;
    }

    public void QueueExpand(){

        int[] arr1 = new int[len * 2];
        if(tail_flag < head_flag){

            System.arraycopy(arr,head_flag,arr1,0,len - head_flag + 1);
            System.arraycopy(arr,0,arr1,len - head_flag,tail_flag + 1);

        }
        else{

            System.arraycopy(arr,head_flag,arr1,0,tail_flag - head_flag + 1);
        }

        arr = arr1;

        head_flag = 0;
        tail_flag = len - 1;

        len = len * 2;
    }

    public void PrintQueue(){

        if(size == 0){

            System.out.println("队空!");
            return;
        }

        System.out.print("打印队列:队头" + "\t");

        if(tail_flag < head_flag) {

            for (int i = head_flag; i < len; i++) {

                System.out.print(arr[i] + "\t");
            }
            for(int i = 0;i <= tail_flag;i++){

                System.out.print(arr[i] + "\t");
            }
        }
        else{

            for(int i = head_flag;i <= tail_flag;i++){

                System.out.print(arr[i] + "\t");
            }
        }
        System.out.print("队尾");
    }

    public void PrintStackByQueue(){

        System.out.println("  栈顶");

        if(tail_flag < head_flag) {

            for(int i = tail_flag;i >= 0;i--){

                System.out.println("|  " + arr[i] + "  |");
            }
            for (int i = len - 1; i >= head_flag; i--) {

                System.out.println("|  " + arr[i] + "  |");
            }
        }
        else{

            for(int i = tail_flag;i >= head_flag;i--){

                System.out.println("|  " + arr[i] + "  |");
            }
        }
        System.out.println("  栈底");
    }

    public boolean isEmpty(){

        return size != 0;
    }

    public static void main(String[] args) {

        QueueByArray queue = new QueueByArray(5);

        queue.enQueue_lenfix(1);
        queue.enQueue_lenfix(2);
        queue.enQueue_lenfix(3);
        queue.enQueue_lenfix(4);
        queue.enQueue_lenfix(5);

//        queue.enQueue(1);
//        queue.enQueue(2);
//        queue.enQueue(3);
//        queue.enQueue(4);
//        queue.enQueue(5);

        queue.PrintQueue();
        System.out.println();
//
//        queue.deQueue();
//        queue.deQueue();
//        queue.deQueue();
//
//        queue.PrintQueue();
//        System.out.println();

//        queue.enQueue(6);
//        queue.enQueue(7);
//
//        queue.deQueue();
//        queue.PrintQueue();
//
//        System.out.println();

        queue.deQueue();
        queue.deQueue();
        queue.deQueue();
        queue.deQueue();
        queue.deQueue();
        queue.deQueue();

        queue.deQueue();
        queue.deQueue();
        queue.deQueue();
        queue.deQueue();

    }
}

输出

出队:1
打印队列:队头	2	3	4	5	6	7	队尾
出队:2
出队:3
出队:4
出队:5
出队:6
出队:7
队空!无法出队!
队空!无法出队!
队空!无法出队!
队空!无法出队!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值