• 数据结构(二) 栈和队列


     二、栈和队列

      1、栈的表示与实现

      2、栈的应用

      3、队列的表示和实现

        链队列

        循环队列

    栈和队列

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

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

             LIFO:后进先出。

    栈的实现

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

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

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

    队列(queue)

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

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

      1、  链队列

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

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

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

      2、  循环队列

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

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

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

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

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

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

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

  • 相关阅读:
    Codeforces 1166 D. Cute Sequences 构造
    ZOJ 4103 浙江省第16届大学生程序设计竞赛 D题 Traveler 构造
    ZOJ 4100 浙江省第16届大学生程序设计竞赛 A题 Vertices in the Pocket 线段树+并查集
    若干结论和定理(持续更新)
    三类经典贪心问题
    2018 ICPC Asia Xuzhou Regional M. Rikka with Illuminations
    Educational Codeforces Round 99
    2018 CCPC-Final K
    2020浙江省赛 Huge Clouds
    BZOJ1030 文本生成器(AC自动机+DP)
  • 原文地址:https://www.cnblogs.com/bigbigbigo/p/8616852.html
Copyright © 2020-2023  润新知