zoukankan      html  css  js  c++  java
  • 队列与堆栈的数据结构

    数据结构(堆与队列的线性结构与链式结构)

    • 特点
      • 先进后出(FILO)
      • 线性栈,限定仅在表尾(栈顶)进行插入和删除的线性表,栈满需要进行扩容操作
      • 链栈,栈顶一般放在单链表的头部,一般不需要设置头结点,添加到栈底的第一个元素指针域为null,之后每一个指针域都指向上一个添加的元素

    队列

    • 特点

      • 先进先出(FIFO,队尾入队头出),只能在一端(tail,elements.length-1 处)进行插入元素,而在另一端(head,索引为0处)进行删除元素操作。(头尾相接的队列称为循环队列)
      • 队列满的条件是(tail+1)%QueueSize==head
      • 通用计算队列长度的公式(tail-head+QueueSize)%QueueSize
    • 队列添加删除的细节

      • head 与 tail 是用来标记队列的指针。空队列时,两指针同时位于线性表索引为0处
      • 队列特点是(假设线性表索引是从左至右),添加元素,元素从队列右侧进入,tail++,tail向右移1位;删除元素,元素从左侧取出,head++,head 向右移1位,索引为0处值为null。

    线性 与 链式结构 比较

    • 不同
      • 线性数据结构,初始化指定Capacity(容量) ,查找根据索引查找,时间复杂度为O(1);增删需要调整各元素的位置,时间复杂度为O(n)
      • 链式数据结构,增删元素时间复杂度为O(1);指定索引处增删时间复杂度为O(n),因为需要进行遍利,同理查找元素的复杂度为O(n),链式数据结构没有容量限制,但是内存是有限的

    堆 与 队列 相互转换

    • 原理:堆与队列是线性表与链表的不同逻辑结构实现,物理存储结构都是基于线性表或链表

    • 结构转换

      • 堆栈的栈顶(即元素进出的位置),可以当作队列的头部;堆栈的栈底,可以当作队列的尾部
    • 转换源码细节(强烈推荐去查阅API)

      • 线性结构,参考Java的ArrayDeque 的增删操作
      • 链式结构,参考Java的LinkedList 的增删操作
  • 相关阅读:
    angularIO 路由守卫
    vue-property-decorator用法
    windows mysql 忘记密码
    OSPF 做负载均衡
    NLB 部署网络负载平衡
    flexible.js 布局详解
    python setup.py 构建
    python Zope.interface安装使用
    lnmp菜单
    linux下的文件删除原理
  • 原文地址:https://www.cnblogs.com/luckyCoder/p/12733020.html
Copyright © 2011-2022 走看看