zoukankan      html  css  js  c++  java
  • 栈和队列

    栈和队列

    1.栈

    栈:栈是一种仅支持在表位插入删除的线性表。栈底称为表头,栈顶称为表尾。

    栈的存储结构:

    • 顺序存储:

      • 顺序栈:用一组地址连续的内存单元依次存放从栈底到栈顶元素的结构。

        栈的入栈操作是:栈顶指针+1,元素入栈。

        栈的出栈操作是:元素出栈,栈顶指针-1。

      • 共享栈:两个栈共享栈顶空间,两个栈底设置为两端。

        共享栈是为了更有效的利用存储空间,两个栈的空间相互协调,当两个栈顶指针相邻=1时候栈满。

    • 链式存储:

      • 链栈:便于多个栈共享存储空间,且不存在栈满上溢的情况,通常使用单链表实现。

        链栈规定没有头节点,指针指向栈顶元素。

        采用链栈便于节点的插入删除。

    栈的应用:

    • 数制转换:

      N=(N/d)d+N%d*

      由于输出的顺序是由个位到十位往上的,所以我们可以用栈来依次存储输出的结果,最后依次出栈次序就对了。

    • 括号匹配:

      每读入一个右括号就查看栈顶,如果有左括号就将其出栈,不然就是非法情况,如果读入左括号,就将其入栈。起始结束条件都是栈为空。

    • 行编辑问题:

    • 表达式求值问题:

    • 迷宫求解问题:

    • 递归问题:

    2.队列

    队列:允许插入一端叫做队尾,允许删除一端叫做队头,是从队尾入队,队头出队的结构。

    队列的存储结构:

    • 顺序存储:
      • 队列
      • 双端队列:允许在队头队尾都进行插入删除操作的结构。
      • 循环队列:在普通队列的基础上加了两个指针,分别指向队头和队尾元素。
    • 链式存储:
      • 链队列:需要两个分别表示队头队尾的指针。

    队列的应用:

    • 层次遍历:

      1. 根节点入队

      2. 若队空则结束遍历,反之重复3

      3. 队列第一个节点出队,访问。如果有左孩子就入队,如果有右孩子就入队,返回2

    • 计算机系统中的应用:

      • 解决主机与外部设备之间速度不匹配问题:设置缓冲区解决输入速度比打印速度快的问题,缓冲区就是一个队列。
      • 解决多用户引起的资源竞争问题:消息队列。
  • 相关阅读:
    使用Logstash把MySQL数据导入到Elasticsearch中
    通过Metricbeat实现外部对Elastic Stack的监控
    使用Elasticsearch的processors来对csv格式数据进行解析
    redis学习网址
    部署文件:filebeat->kafka集群(zk集群)->logstash->es集群->kibana
    ios实例开发精品文章推荐(8.13)
    ios实例开发精品文章推荐(8.12)11个处理触摸事件和多点触摸的JS库
    Android开发环境——模拟器AVD相关内容汇总
    Android开发环境——Eclipse ADT相关内容汇总
    Android开发环境——SDK相关内容汇总
  • 原文地址:https://www.cnblogs.com/k-will/p/12723264.html
Copyright © 2011-2022 走看看