zoukankan      html  css  js  c++  java
  • 【数据结构】队列

      如何理解队列,我们可以想象成排队,先进先出。与栈相比的是,栈只支持俩个基本操作: 入栈 push() 和出栈 pop() 。队列和栈很相似,最基本的操作也是俩个: 入队 enqueue() ,将一个数据放在队列尾部; 出队dequeue() ,从队列头部取一个元素。所以,队列和栈一样,也是一中操作受限的线性表数据结构。


    顺序队列华为链式队列:

      和栈一样,队列可以用数组来实现,也可以用链表来实现。用数组实现的队列叫做顺序队列,用链表实现的队列叫做链式队列。


    顺序队列的数据搬移:

      在有限的的空间情况下,随着不停地入队、出队操作, head 和 tail 都会持续向后移动。当 tail 移动到最右边,即使数组中还有空闲空间,也无法继续往队列中添加数据了。此时可以使用数据搬移操作,即在出队的时候不进行数据搬移,如果没有空闲空间了,我们在入队的时候集中出发一次数据搬移的操作。


    循环队列:

      队空的判断条件为: head  == tail,队满的条件: (tail+1)%n = head。


    阻塞队列和并发队列:

      阻塞队列其实是在队列的基础上增加了阻塞操作。简单来说,就是队列为空的时候,从队头读取数据会被阻塞,而队列满了以后,插入数据操作就会被阻塞。这其实就是一个生产者-消费者模型。

  • 相关阅读:
    DotnetCore 单文件发布
    Parallel.ForEach 之 MaxDegreeOfParallelism
    Quartznet速记
    C# SendAysnc 超时
    微耕门禁跨网段搜索代理
    服务守护DOS脚本
    Flutter速记
    ShowDoc速记
    Docker运行dotnetcore
    Redis速记
  • 原文地址:https://www.cnblogs.com/guangluwutu/p/11789614.html
Copyright © 2011-2022 走看看