美文网首页
数据结构之队列应用

数据结构之队列应用

作者: 活出野性的自己 | 来源:发表于2018-11-15 14:37 被阅读0次
循环队列

循环队列的实现:这里假设tail指向的元素是空的(即tail指向最后一个元素的下一个位置)
这里约定循环队列的结构:

  1. 循环队列有一个容量n,当循环队列满的时候共有n-1个元素,会浪费一个元素空间;为何如此设计,这样便于判断队列为空或者为满
  2. 插入元素时,先判断队列是否满,满了则插入失败;不满则直接插入到tail指向的位置,并将tail=(tail+1)%n
  3. 删除元素时,先判断队列是否为空,空则删除失败;非空则删除head指向的元素,并且head=(head+1)%n
  4. 关键点:如何判断队列为空或者已满,为空:head==tail, 已满:(tail+1)%n == head
循环队列插入删除示意图.jpg

java代码实现如下:

public class CircularQueue {

    private static final int CAPACITY = 4;
    Integer[] queueArr = new Integer[CAPACITY];
    int head = 0;
    int tail = 0;

    public static void main(String[] args) {
        CircularQueue circularQueue = new CircularQueue();
        circularQueue.enqueue(1);
        circularQueue.enqueue(2);
        circularQueue.enqueue(3);

        circularQueue.enqueue(4); //插入失败

        circularQueue.dequeue();
        circularQueue.dequeue();

        circularQueue.enqueue(5);
        circularQueue.enqueue(6);

        System.out.println("head=" + circularQueue.head);
        System.out.println("tail=" + circularQueue.tail);

        for (Integer val : circularQueue.queueArr) {
            System.out.println(val);
        }
    }

    public boolean enqueue(int val) {
        //判断是否已满
        if ((tail + 1) % CAPACITY == head) {
            return false;
        }

        queueArr[tail] = val;
        tail = (tail + 1) % CAPACITY;
        return true;
    }

    public Integer dequeue() {
        //判断是否为空
        if (head == tail) {
            return null;
        }

        int dequeueVal = queueArr[head];
        queueArr[head] = null; //记得置为null

        head = (head + 1) % CAPACITY;

        return dequeueVal;
    }

}

相关文章

  • 队列和栈的应用

    队列和栈的使用 标签(空格分隔): algorithm 队列和栈的应用 1.队列的应用 队列是一种常见的数据结构,...

  • 数据结构之队列应用

    循环队列 循环队列的实现:这里假设tail指向的元素是空的(即tail指向最后一个元素的下一个位置)这里约定循环队...

  • JavaScript数据结构之队列

    接上篇-数据结构之栈 数据结构之---队列 1.队列的定义 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端...

  • Java实现队列

    队列是一种先进先出的数据结构,和栈刚好相反,队列在算法中也应用广泛。本文,我们主要探讨Java实现队列。 队列 队...

  • 算法 - 队列类型

    队列 一个先进先出的数据结构 javascript中没有队列,但可以用Array实现队列的所有功能 队列的应用场景...

  • 数据结构之队列的链式存储结构

    之前写了队列的顺序存储结构,队列的定义及操作见 数据结构之队列的顺序存储结构 队列的链式存储结构与操作实现 队列接...

  • 数据结构之队列

    数据结构之队列 定义 队列,是一种先进先出(FIFO, firt in first out)的线性表。队列的特性是...

  • skynet 源码阅读笔记 —— 消息调度机制

    基本数据结构之消息队列 skynet 采用了二级消息队列模式,其中顶层消息队列为 global_queue,而底层...

  • 【数据结构】【C#】012-队列应用:💻键盘缓冲

    C#数据结构:队列应用:键盘输入循环缓冲区问题 在操作系统中,循环队列经常用于实时应用程序。例如,当程序正在执行其...

  • c++ 实现队列

    相关资料: 用C++实现一个队列 数据结构代码实现之队列的链表实现(C/C++)

网友评论

      本文标题:数据结构之队列应用

      本文链接:https://www.haomeiwen.com/subject/ffjyfqtx.html