新闻、帮助、产品更新动态

最新的业界新闻,产品系统更新开发动态,帮助教程和活动发布

万字长文带你漫游数据结构世界(五)队列

发布日:2022-01-19 12:58       阅读数:

既然前面有先进后出的数据结构,那我们必定也有先进先出的数据结构,疫情的时候,排队估计大家都有测过核酸,那排队老长了,排在前面先测,排在后面后测,这道理大家都懂。
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
队列的特点是先进先出,以下是例子:

一般只要说到先进先出(FIFO),全称First In First Out,就会想到队列,但是如果你想拥有队列即可以从队头取出元素,又可以从队尾取出元素,那就需要用到特殊的队列(双向队列),双向队列一般使用双向链表实现会简单一点。
下面我们用Java实现简单的单向队列:
class Node<T> {
    public T data;
    public Node next;

    public Node(T data) {
        this.data = data;
    }
}

public class MyQueue<T> {
    private Node<T>  head;
    private Node<T>  rear;
    private int size;

    public MyQueue() {
        size = 0;
    }

    public void pushBack(T element) {
        Node newNode = new Node(element);
        if (isEmpty()) {
            head = newNode;
        } else {
            rear.next = newNode;
        }
        rear = newNode;
        size++;
    }

    public boolean isEmpty() {
        return head == null;
    }

    public T popFront() {
        if (isEmpty()) {
            throw new NullPointerException("队列没有数据");
        } else {
            Node<T> node = head;
            head = head.next;
            size--;
            return node.data;
        }
    }

    public void dispaly() {
        Node temp = head;
        while (temp != null) {
            System.out.print(temp.data +" -> ");
            temp = temp.next;
        }
        System.out.println("");
    }
}

测试代码如下:

public class MyStackTest {
    public static void main(String[] args) {
        MyStack<Integer> myStack = new MyStack<>();
        myStack.push(1);
        myStack.push(2);
        myStack.push(3);
        myStack.push(4);
        myStack.display();

        System.out.println(myStack.pop());

        myStack.display();

    }
}

运行结果:

1 -> 2 -> 3 -> 
1
2 -> 3 -> 
2
3 -> 
常用的队列类型如下:
单向队列:也就是我们说的普通队列,先进先出。
双向队列:可以从不同方向进出队列
优先队列:内部是自动排序的,按照一定顺序出队列
阻塞队列:从队列取出元素的时候,队列没有元素则会阻塞,同样如果队列满了,往队列里面放入元素也会被阻塞。
循环队列:可以理解为一个循环链表,但是一般需要标识出头尾节点,防止死循环,尾节点的next指向头结点。
队列一般可以用来保存需要顺序的数据,或者保存任务,在树的层次遍历中可以使用队列解决,一般广度优先搜索都可以使用队列解决。

编辑:航网科技   来源:腾讯云

本文版权归原作者所有 转载请注明出处

联系我们

客服部:深圳市龙华区龙胜商业大厦5楼B5区

业务部:深圳市南山区讯美科技广场2栋12楼1202

资质证书

  • Copyright © 2011-2020 www.hangw.com. All Rights Reserved 深圳航网科技有限公司 版权所有 增值电信业务经营许可证:粤B2-20201122 - 粤ICP备14085080号

    在线客服

    微信扫一扫咨询客服


    全国免费服务热线
    0755-36300002

    返回顶部