栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

队列(Queue)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

队列(Queue)

一.概念

只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头(Head/Front)

 

二,队列的使用

在Java中,队列是一个接口,底层是用双向链表实现的 

  • Boolean  offer(E e)            入队列
  • E poll                                      出队列
  • peek                                        获取队头元素
  • int size                                     队列有效元素个数
  • Boolean   isEmpty                    队列是否为空  

 注意:Queue是个接口,在实例化时必须实例化linkedList的对象,因为linkedList实现了Queue接口

import java.util.linkedList;
import java.util.Queue;

public class Test {
    public static void main(String[] args) {
        Queue qu = new linkedList<>();
        qu.offer(10);
        qu.offer(20);
        qu.offer(30);
        qu.offer(40);
        qu.offer(50);
        qu.offer(60);

        System.out.println(qu.size());
        System.out.println(qu.peek());
        System.out.println(qu.poll());

        System.out.println(qu.peek());
        System.out.println(qu.size());

        qu.poll();
        qu.poll();
        qu.poll();
        qu.poll();
        qu.poll();

        if (qu.isEmpty()){
            System.out.println("队列为空!");
        }else{
            System.out.println("队列不为空!");
        }
    }
}

 三,循环队列

 关于循环队列:

  • 他解决了,假溢出问题,可以对空间进行循环利用
  • 通常用数组实现
  • 如何区分循环队列空与满
  1.  通过添加 size 属性记录
  2. 保留一个位置
  3. 使用标记

四,模拟实现Queue 

//模拟实现队列 --- 底层使用的双向链表----在集合中Queue是一个接口
public class Queue {

    public static class ListNode{
        ListNode next;
        ListNode prev;

        E value;

        public ListNode(E value){
            this.value = value;
        }
    }

    ListNode first;
    ListNode last;
    int size;

    //入队列
    public void offer(E e){
        ListNode newNode = new ListNode<>(e);

        //队列为空的情况
        if (first == null){
            first = newNode;
        }else{
            //队列不为空
            newNode.prev = last;
            last.next = newNode;
        }
        last = newNode;
        size++;
    }

    //出队列
    public void poll(){
        E value = null;
        //队列为空
        if (first == null){
            throw new RuntimeException("队列为空,无法出队列!");
        }

        //队列只有一个元素
        if (last == first){
            value = first.value;
            first = null;
            last = null;
        }else {
            //队列有多个元素
            value = first.value;
            first = first.next;
            first.prev.next = null;
            first.prev = null;
        }
        size--;
        System.out.println(value);
    }

    //获取队头元素
    public void peek(){
        E value = null;
        //队列为空
        if (first == null){
            throw new RuntimeException("队列为空,无法获取队列的队头元素!");
        }else {
            //队列不为空
            System.out.println(first.value);
        }
    }

    //获取元素个数
    public void size(){
        System.out.println(size);
    }

    //判断是否为空
    public void isEmpty(){
        if (size == 0){
            System.out.println("队列为空!");
        }else{
            System.out.println("队列不为空!");
        }
    }

    public static void main(String[] args) {
        Queue q = new Queue<>();

        q.isEmpty();     //  队列为空
        q.size();        //  0


        q.offer(1);
        q.offer(2);
        q.offer(3);
        q.offer(4);
        q.offer(5);

        q.poll();       //  1
        q.isEmpty();    //  队列不为空
        q.peek();       //  2
        q.size();       //  4

        q.poll();       //  2
        q.poll();
        q.poll();
        q.poll();      // 5

        q.isEmpty();    // 队列为空
        q.peek();      // 抛异常

    }
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353474.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号