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)。解决了移动数据的时间损耗。

      队列的链式存储结构

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

      建议:

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

      

  • 相关阅读:
    教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神
    那些年,我们在Django web开发中踩过的坑(一)——神奇的‘/’与ajax+iframe上传
    刷题记录:[De1CTF 2019]Giftbox && Comment
    刷题记录:[强网杯 2019]Upload
    刷题记录:[XNUCA2019Qualifier]EasyPHP
    [RoarCTF 2019]simple_uplod
    [RoarCTF 2019]Online Proxy
    [RoarCTF]Easy Java
    [RoarCTF]Easy Calc
    刷题记录:[DDCTF 2019]homebrew event loop
  • 原文地址:https://www.cnblogs.com/changyaohua/p/4655520.html
Copyright © 2011-2022 走看看