• 35 _ 队列1 _ 什么是队列.swf


    队列是一种可以实现一个先进先出的存储结构

    什么是队列?

    队列(Queue)也是一种运算受限的线性表。它只允许在表的一端进行插入,而在另一端进行删除。允许删除的一端称为队头(front),允许插入的一端称为队尾(rear)。

    栈,只能在栈顶进行操作,队列是一端进入,一端输出

    队列也是头部和尾部

    rear翻译的意思是:

    后方的
    font是前段的
     
    队列分为两种:一种是使用数组来实现,一种是使用链表来实现
     

     队列添加数据只能在rear尾部添加,在font端进行删除

    静态队列都是循环队列

    1、静态队列为啥必须是循环队列

    我们来分析下:

    采用普通数组来实现队列会出现的问题:

    pFont指向队列的第一个元素

    pRear执行对应的最后的一个元素的下一个节点,该节点不存储有效的数据,就像链表的phead一样。例如上面存储 1 2 3 4 5 ,prear就在存储5节点的下一个节点,有效的数据是存储在 1 2 3 4 5 这五个节点中的。这样设计是便于队列的操作

    删除元素的时候pFont向上移动,删除元素是在头部删除

    添加元素的时候pRea向上移动

    如果使用普通的数组来实现队列,当删除元素pFont向上移动的时候,例如删除-1,这个时候pFont向上移动到-2存储的位置,这个时候采用普通数组的方式存储-1的这个内存空间就被释放了,不能再被使用了,这种叫做队列的假溢出

    添加元素和删除元素Frear和pFont都只能向上移动

    当pFont向上移动和pRear重合的时候,说明队列为null

    上面这种情况,rear已经到了数组的最尾的节点,rear不能再向上移动了,记住rear节点不存在有效的数据值,相当于链表中的pHead节点,现在队列中只存储了c这个值,现在我们要存储中这个值,假设rear是循环链表,此时将rear移动到链表的第一个元素节点的位置

    在h的位置就能够存储中字了

    现在队列中就有两个值,一个c,一个是中

    当我们要删除一个元素的时候,pFont向上移动变成

     

    此时队列中只有一个中字

    当此时在添加一个国字,pRear向上移动

    此时,我们删除中字,这个时候pFont已经达到了最后,不能再向上移动了,要不然就溢出了,让pFont指向第一个元素

    所以数组现实队列必须是循环队列。

  • 相关阅读:
    golang 引用相对路径package
    LiteIDE 在 Windows 下为 Go 语言添加智能提示代码补全
    C#代码实现把网页文件保存为mht文件
    AE开发中关于 “无法嵌入互操作类型.........请改用适用的接口”问题的解决方法
    Windows下visual studio code搭建golang开发环境
    Eclipse配置开发Go的插件——Goclipse
    go语言条件语句 if else
    Go语言基础:method
    GO语言基础之method
    go中的接口
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/6946547.html
Copyright © 2020-2023  润新知