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

    栈和队列

    1.栈

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

    栈的存储结构:

    • 顺序存储:

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

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

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

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

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

    • 链式存储:

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

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

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

    栈的应用:

    • 数制转换:

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

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

    • 括号匹配:

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

    • 行编辑问题:

    • 表达式求值问题:

    • 迷宫求解问题:

    • 递归问题:

    2.队列

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

    队列的存储结构:

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

    队列的应用:

    • 层次遍历:

      1. 根节点入队

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

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

    • 计算机系统中的应用:

      • 解决主机与外部设备之间速度不匹配问题:设置缓冲区解决输入速度比打印速度快的问题,缓冲区就是一个队列。
      • 解决多用户引起的资源竞争问题:消息队列。
  • 相关阅读:
    Asp.Net Core MVC + Code First + Mysql 项目创建以及相关配置
    linux安装 docker compose v2
    压缩、解压 解决 客户端查询大批量数据时等待时间过长的问题
    c# 通过经纬度 查询地址、区域信息
    excel 文件转 dataset ,jqgrid 中 模糊查询与下拉联动的实现
    jqgrid mvc 导出excel
    SQL学习笔记三表的字段操作
    SQL学习笔记高级教程
    安装docker
    SQL学习笔记一数据类型
  • 原文地址:https://www.cnblogs.com/k-will/p/12723264.html
Copyright © 2011-2022 走看看