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)


  • 相关阅读:
    【SCOI2012】滑雪
    【NOI2008】假面舞会
    ※初赛知识总结※
    【FJSC2012】足球
    【中山市选2011】杀人游戏
    【SDOI2008】洞穴勘测
    【SNOI2017】炸弹
    【LGOJ1606】白银莲花池
    int类型中为什么负数比正数多了一个数?
    utf8、utf16、utf32之间的格式
  • 原文地址:https://www.cnblogs.com/mohanchen/p/9308597.html
Copyright © 2011-2022 走看看