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

      栈和队列是两种应用非常广泛的数据结构,它们都来自线性表数据结构,都是“操作受限”的线性表。

      栈的概念

      栈(Stack):是限制在表的一端进行插入和删除操作的线性表。又称为后进先出LIFO (Last In First Out)或先进后出FILO (First In Last Out)线性表。

      栈顶(Top):允许进行插入、删除操作的一端,又称为表尾。用栈顶指针(top)来指示栈顶元素。

      栈底(Bottom):是固定端,又称为表头。

         空栈:当表中没有元素时称为空栈。

      栈的抽象数据类型定义:

         ADT Stack{
        数据对象:D ={ ai|ai∈ElemSet,  i=1,2,…,n,n≥0 }
        数据关系:R ={<ai-1, ai>|ai-1,ai∈D,  i=2,3,…,n }
        基本操作:初始化、进栈、出栈、取栈顶元素等
      } ADT Stack

      栈的顺序存储结构简称为顺序栈,和线性表相类似,用一维数组来存储栈。根据数组是否可以根据需要增大,又可分为静态顺序栈和动态顺序栈。  

    • 静态顺序栈实现简单,但不能根据需要增大栈的存储空间;
    • 动态顺序栈可以根据需要增大栈的存储空间,但实现稍为复杂。

      栈的链式存储结构表示

      栈的链式存储结构称为链栈,是运算受限的单链表。其插入和删除操作只能在表头位置上进行。因此,链栈没有必要像单链表那样附加头结点,栈顶指针top就是链表的头指针。

      栈的常见应用实例:

    • 数值转换
    • 括号匹配判断
    • 递归调用的实现

      队列的概念

         队列(Queue):也是运算受限的线性表。是一种先进先出(First In First Out ,简称FIFO)的线性表。只允许在表的一端进行插入,而在另一端进行删除。
           队首(front) :允许进行删除的一端称为队首。
           队尾(rear) :允许进行插入的一端称为队尾。
      队列中没有元素时称为空队列。
      队列的抽象概念表示:

       ADT Queue{
        数据对象:D ={ ai|ai∈ElemSet,  i=1, 2, …, n, n >= 0 }
        数据关系:R = {<ai-1, ai> | ai-1, ai∈D,  i=2,3,…,n }
               约定a1端为队首,an端为队尾。
        基本操作:
          Create():创建一个空队列;
          EmptyQue():若队列为空,则返回true ,否则返回flase ;
          ⋯⋯
          InsertQue(x) :向队尾插入元素x;
          DeleteQue(x) :删除队首元素x;
      } ADT Queue

      队列的顺序存储结构:利用一组连续的存储单元(一维数组) 依次存放从队首到队尾的各个元素,称为顺序队列。

      队列的链式存储结构:队列的链式存储结构简称为链队列,它是限制仅在表头进行删除操作和表尾进行插入操作的单链表。
      

      为队列分配的向量空间看成为一个首尾相接的圆环,并称这种队列为循环队列(Circular Queue)


  • 相关阅读:
    Prism 4 文档 ---第6章 高级MVVM场景
    Prism 4 文档 ---第5章 实现MVVM模式
    Prism 4 文档 ---第4章 模块化应用程序开发
    Prism 4 文档 ---第3章 管理组件间的依赖关系
    Prism 4 文档 ---第2章:初始化Prism应用程序
    阿里人都在使用的在线诊断工具—Arthas
    开发人员如何规范你的Git commit?
    重磅:Java 16 正式发布了!
    MySQL 要分表分库怎么进行数据切分?
    Kafka 中所谓的 ‘零拷贝’ 技术到底是什么?
  • 原文地址:https://www.cnblogs.com/mohanchen/p/9308597.html
Copyright © 2011-2022 走看看