zoukankan      html  css  js  c++  java
  • (二)栈和队列的顺序存储结构

    - 栈

    • 顺序栈,即栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。通常的习惯做法是以top=0表示空栈。由于栈在使用过程中所需最大空间的大小很难估计,因此,一般来说,在初始化设空栈时不应限定栈的最大容量。一个较合理的做法是:先为栈分配一个基本容量,然后在应用过程中,当栈的空间不够使用时再逐段扩大。为此,可设定两个常量:STACK_INIT_SIZE(存储空间初始分配量)和 STACKINCREMENT(存储空间分配量),并以下述类型说明作为顺序栈的定义。
      typedef struct{
        SElemType * base;
        SelemType * top;
        int stacksize;
      }SqStack;
      
      stacksize:指示栈的当前可使用的最大容量。
      base:栈底指针
      top:栈顶指针

      栈的初始化操作为:按设定的初始化分配量进行第一次存储分配,base栈底指针,在顺序栈中,它始终指向栈底的位置,若base值为NULL,则表明栈结构不存在。top为栈顶指针其初始值指向栈底,即top=base可作为栈空的标记,每当插入新的栈顶元素时,指针top增1;删除栈顶元素时,指针top减1,因此,非空栈中的栈顶指针始终在栈顶元素的下一个位置上。如下图:

    - 队列

    • 循环队列,和顺序栈类似,在队列的顺序存储结构中,除了用一组地址连续的存储单元依次存放在队列头到队列尾的元素之外,尚需附设两个指针front和rear分别指示队列头元素和队列尾元素位置。初始化建空队列时,令front = rear = 0,每当插入新的队列尾元素时,“尾指针增1”;每当删除队列头元素时,“头指针增1”。因此,在非空队列中,头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置。
      • 假设当前队列分配的最大空间为5,则当队列处于(d)的状态时不可再继续插入新的队列元素,否则会因数组越界而遭致程序代码被破坏。然而此时又不宜入顺序栈那样,进行存储再分配扩大数组空间,因为队列的实际可用空间并未占满。因此,巧妙的将顺序队列臆造为一个环状的空间,称之为循环队列。 

      • 指针和队列元素之间的关系不变,继续插入,队列空间均被占满,如下图所示,此时front = rear;反之,相继删除,使队列呈“空”的状态,此时也满足front = rear,因此通过front = rear无法判断队列是“空”还是“满”。可有两种处理方法:其一是另设一个标志位以区别队列是“空”还是“满”;其二是少用一个元素空间,约定以“队列头指指针在队列尾指针的下一位置(指环状的下一位置)”上作为队列呈“满”状态的标志。因此,如果应用程序中设有循环队列,则必须为它设定一个最大队列长度;若无法预估所用队列的最大长度,则宜采用链队列。

    目录

  • 相关阅读:
    sql分页查询
    SQL语句优化技术分析
    大型数据库的设计原则与开发技巧
    Microsoft SharePoint Server 2010 的新增功能
    Installing SharePoint 2010 on Windows 7
    Missing the ManageContent and structure in MOSS 2010
    Simple SharePoint 2010 + Silverlight + Client Object Model Example
    SharePoint 2010 Central AdminCreate/Extend Web Application button on Ribbon are disabled
    利用SharePoint Designer 修改列表页面实例
    数据库设计中的14个技巧
  • 原文地址:https://www.cnblogs.com/cgy-home/p/15240596.html
Copyright © 2011-2022 走看看