zoukankan      html  css  js  c++  java
  • 数据结构复习之栈和队列

    栈的概念

      栈(stack)是限定只能在表尾进行插入和删除操作的线性表。

      栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。

      允许插入和删除的一段称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。

      栈的插入操作,叫做进栈,也称压栈、入栈。(push)

      栈的删除操作,叫做出栈,也有叫做弹栈。(pop)

    栈的存储方式

      栈的顺序存储结构

        两栈共享空间

      栈的链式存储结构

      两种方式的比较:

        时间性能:两种存储方式的入栈和出栈的时间复杂度都为O(1)。

        空间性能:顺序栈需要事先确定一个固定长度,可能会存在内存空间浪费的问题,但它的优势是存取性能高。

             而链栈则要求每个元素都有指针域,这同时也增加了一些内存开销,但对于栈的长度无限制。

     栈的应用

        编译器使用栈实现递归。

        计算机处理标准表达式:

          1、将中缀表达式转化为后缀表达式(栈用来进出运算的符号)。

          2、将后缀表达式进行运算得出结果(栈用来进出运算的数字)。

    队列的概念

      队列(queue)是只允许在一端进行插入,而在另外一端进行删除操作的线性表。

      队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为对头。

    栈的存储方式

      队列的顺序存储结构

        循环队列

          队列满的条件是:(rear + 1) % QueueSize == front

          计算队列长度公式为:(rear - front + QueueSize) % QueueSize

        循环队列的好处

          可以避免数组插入和删除时需要移动数据,使原本插入和删除时O(n)的时间复杂度变成O(1)。解决了移动数据的时间损耗。

      队列的链式存储结构

        其实质是线性表的单链表,只不过它只能尾仅头出而已,简称为链队列。

      建议:

        总的来说,在可以确定队列长度最大值的情况下,建议使用循环队列,如果无法预估队列长度时,使用链队列。

      

  • 相关阅读:
    1、TensorFlow简介
    4、numpy+pandas速查手册
    3、pandas
    2、Numpy常用函数
    11、C内存四区模型
    1、Numpy基础
    10、C++函数
    开始
    创建与删除SQL约束或字段约束
    Halcon
  • 原文地址:https://www.cnblogs.com/changyaohua/p/4655520.html
Copyright © 2011-2022 走看看