• 数据结构之栈和队列


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

      栈的概念

      栈(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)


  • 相关阅读:
    Oracle ——优化内存
    用 C# 实现 HTTP 协议多线程下载文件
    Oracle 为表某个字段进行字母数字组合编码
    Oracle 11g Release 1 (11.1)——自动存储管理(Automatic Storage Management,ASM)
    Oracle 11g Release 1 (11.1) Oracle Text 如何创建 CTXCAT 索引
    Oracle ——如何确定性能差的 SQL
    MySQL 5.5/5.6——概述 MySQL 客户端程序
    Oracle 数据库统计信息描述
    Oracle Database Instant Client
    HTTP 协议演示——HTTP 协议(45)
  • 原文地址:https://www.cnblogs.com/mohanchen/p/9308597.html
Copyright © 2020-2023  润新知