java队列详解

队列的简述

  • 队列是一种数据结构,有点类似于栈,只是在队列中第一个插入的数据项会最先被移除,而在栈中,最后插入的数据项最先被移除,队列的作用就像电影院前的人们站成排的一样,第一个进入队尾的人最先拿到票,最后的人最后才能买到票
  • 如图
    在这里插入图片描述- 在计算机的操作系统里,有各种队列在安静的工作着,打印作业在打印队列中等待订单,当键盘敲击时,也有一个存储建入内容的队列,同样,使用文字处理程序敲击一个键,而计算机又要暂时去做其他要做的事,但是敲击的内容不会丢失,它会排在队列中等待,直到文字处理程序有时间来读取它,利用队列辩证了键入内容在处理时其顺序不会改变。

    在这里插入图片描述但是会发现当移除队列中的数据后,队列中的数据项不会总从数组的0处下标开始,移除了一些数据项后,对头的指针会指向一个较高的下标位置

    在这里插入图片描述所以当为了避免这种问题就有了循环队列
循环式处理
  • 为了避免队列不满却不能插入新数据项的问题,可以让队头队尾指正绕回到数组的开始位置,这就是循环队列,用两个图就可以看得很清楚
    在这里插入图片描述在这里插入图片描述
   // 数组里面元素的个数
    private int maxSize;
    // 定义的数组
    private long[] queArray;
    // 对头
    private int front;
    // 队尾
    private int rear;
    // 记录 数据项计数
    private int nItems;

    public Queue(int s) {
        maxSize = s;
        queArray = new long[maxSize];
        front = 0;
        rear = -1;
        nItems = 0;
    }

    //  插入队列 条件是队列不满才会插入
    public void insert(long j) {
     
            if (rear == maxSize - 1) 
                rear = -1;
            queArray[++rear] = j;
            nItems++;

    }

    //    删除队列
    private long remove() {
        long temp = queArray[front++];
        if (front == maxSize) 
            front = 0;
        nItems--;
        return temp;
    }

    public long peekFront() {
        return queArray[front];
    }

    public boolean isEmpty() {
        return (nItems == 0);
    }

    public boolean isFull() {
        return (nItems == maxSize);

    }

    public int size() {
        return nItems;
    }

    public static void main(String[] args) {

        Queue queue = new Queue(5);

        queue.insert(10);
        queue.insert(20);
        queue.insert(30);
        queue.insert(40);


        queue.remove();
        queue.remove();
        queue.remove();
        queue.remove();

        queue.insert(50);
        queue.insert(60);
        queue.insert(70);
        queue.insert(80);
        while (!queue.isEmpty()) {
            long l = queue.remove();
            System.out.print(l);
            System.out.print("");
        }
        System.out.println(" ");
    }
  • 队列的效率
    和栈一样,队列中插入数据项和移除数据项的时间复杂度均为O(1)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值