zoukankan      html  css  js  c++  java
  • 数据结构(二) 栈和队列

     二、栈和队列

      1、栈的表示与实现

      2、栈的应用

      3、队列的表示和实现

        链队列

        循环队列

    栈和队列

             栈和队列都是特殊的线性表,它们的基本操作是线性表操作的子集,是操作受限的线性表。

             特点:只在表头进行插入与删除操作。表头端成为栈顶,表尾称栈底。

             LIFO:后进先出。

    栈的实现

             栈的实现有两种方法:顺序栈和链栈。

             顺序栈利用一组地址连续最大长度为MAX_STACK_SIZE的存储单元依次存放从栈底到栈顶的数据元素。

             在程序中同时使用多个栈的情形下,使用链式栈不但可以提高存储效率,同时还可达到共享存储的目的。链式栈一般不使用头节点。

    队列(queue)

             FIFO:先进先出,只允许在一端插入,在另一端删除。

             队列的两种存储结构:顺序存储、链式存储。

      1、  链队列

      链队列应有2个分别指示队头队尾的指针,即头指针与尾指针。

      如果从队列中退出一个元素,必须从单链表的第一个节点中取出队头元素,并删除此节点,而入队的新元素是存放在队尾处的,也就是单链表的最后一个元素的后面,并且此结点会成为新的队尾。

      Ps:队列适合于数据元素变动比较大的情形,一般不存在溢出的问题,如果程序中要使用多个队列,最好使用链队列,这样将不会出现存储分配问题,也不必进行数据元素的移动。

      2、  循环队列

      队列的顺序存储结构,实际是利用一个容量是maxSize的一维数组elem作为队列的元素的存储结构,并设立的两个front和rear分别表示队头和队尾。

      当队列的实际可用空间还没有使用完却不能再插入新元素,这种情形继续插入会产生溢出叫做“假溢出”。

      为了解决假溢出,我们把顺序队列从逻辑上看成一个环,成为循环队列,循环队列首尾相接。

      循环队列中,从front=rear无法判断是队空还是队满,有3中处理办法:

      A、 另设一个标志符区别队列是空还是队满。

      B、  用一个数据成员存储元素的个数。

      C、  少用一个元素空间,约定在队尾指针的下一位置作为队满的标志。

  • 相关阅读:
    Linux 内核编码风格
    三种批量插入数据的方法
    一次清除SQL SERVER错误日志的体会!
    打开潘多拉的魔盒——软件设计过程(1)——序
    bloom特效
    wcf基础知识之端口共享 portSharing
    高质量代码(一)
    Luence使用IKAnalyzer分词实例 及 IKAnalyzer扩展词库
    通过什么来衡量C# Socket服务的效能
    iOS开发进阶之静态链接库
  • 原文地址:https://www.cnblogs.com/bigbigbigo/p/8616852.html
Copyright © 2011-2022 走看看