首页 > 其他分享 >顺序栈的双端储存

顺序栈的双端储存

时间:2022-10-04 09:33:11浏览次数:41  
标签:储存 顺序 出栈 双端 top 一端 return false

顺序栈的双端储存

1.双端栈

在栈的共享技术中最常用的是两个栈的共享技术即双端栈:主要利用了栈“栈底位置不变,而栈顶位置动态变化”的特性。首先为两个栈申请一个共享的一维数组空间data[MaxSize],将两个栈的栈底分别放在一维数组的两端,分别是0M-1,让两个栈各自向中间延伸 。

2.初始化双端栈

2.1数据结构

typedef struct {
    ElemType data[MaxSize];
    ElemType top[2];
}DqStack;

2.2定义空栈

void InitStack(DqStack& S) 
{
    S.top[0] = -1;
    S.top[1] = MaxSize;
}

3进栈

3.1算法思想

  1. 判断栈是否满 栈为满的条件为两端的top相差为1

  2. 栈满则无法入栈,不满则可以入栈

  3. 利用判别器i 判断要插入的数据是哪一端

  4. 如果i为0则入 栈顶为S.top[0]的一端,为1则入 栈顶为S.top[1]的一端

3.2算法设计

int Push(DqStack& S, ElemType e, int i) 
{
    if (S.top[0] + 1 == S.top[1]) 
    {
        return false;
    }
    switch (i)
    {
        case 0 :
            S.data[++S.top[0]] = e;
            break;
        case 1:
            S.data[--S.top[1]] = e;
            break;
        default:
            return false;
    }
    return true;
}

4出栈

4.1算法思想

  1. 利用判别器i 判断要出栈的是哪一端

  2. i为0 则出栈的是S.top[0]一端,为1 则出栈的是S.top[1]一端

  3. 判断要出栈的哪一端 是否为空 为空则不能出栈

4.2算法设计

int Pop(DqStack& S, int i) 
{
    switch(i)
    {
    case 0:
        if (S.top[0] == -1) 
        {
            return false;
        }
        S.top[0]--;
        break;
    case 1:
        if (S.top[1] == MaxSize) 
        {
            return  false;
        }
        S.top[1]++;
        break;
    default:
        return false;
    }
    return true;
}
 

标签:储存,顺序,出栈,双端,top,一端,return,false
From: https://www.cnblogs.com/wlb429/p/16753243.html

相关文章

  • 栈之顺序栈
    栈之顺序栈1.栈的定义只允许在一端插入和删除的线性表允许插入和删除的一端称为栈顶(top)另一端称为栈底(bottom)当栈中没有元素称为空栈栈的插入操作称为入栈或......
  • 22道js输出顺序问题,你能做出几道
    前言最近在准备面试题,console的输出顺序之前一直迷迷糊糊。必备知识JS是单线程的单线程是JavaScript核心特征之一。这意味着,在JS中所有任务都需要排队执行,前一个任......
  • 王道_顺序表课后代码习题总结
    顺序表1.删除主要在于删除后,后面元素怎样前移。1.删除一个值boolListDelete(SqList&L,ElemType&e){if(i<1||i>L.length)returnfalse;......
  • 15分钟精通二叉树,二叉树的先序,中序,后序,层次遍历顺序
    学习目标:......
  • 动手动脑(四)静态初始化块的执行顺序 9.30
    packagetest2;classRoot{ static { System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } publicRoot() { ......
  • 顺序结构
    顺序结构任何一个算法都离不开的基本算法结构选择结构If单选选择结构语法格式:If(布尔表达式){//如果布尔表达式为true将执行语句} If双选选择结构语法格式:If(布尔......
  • 设备内存顺序,要为过拟合产生了绿时,读取可,
    设备内存顺序,要为过拟合产生了绿时,读取可,M祟}设备内存顺序,要为过拟合产生了绿时,读取可,p设备内存顺序,要为过拟合产生了绿时,读取可,http://ds.163.com/article/63370fa3d70a9b0......
  • promise执行顺序面试题令我头秃,你能作对几道
    说明最近在复习Promise的知识,所以就做了一些题,这里挑出几道题,大家一起看看吧。题目一constpromise=newPromise((resolve,reject)=>{console.log(1);......
  • 【java基础】HashSet插入顺序问题
    总结:1、HashSet底层的插入是通过HashMap来实现的2、HashSet并不按照插入的顺序存储,它是无序的3、LinkedHashSet中的元素可以按照它们插入规则集的顺序提取@Test......
  • 顺序表
    #include<stdio.h>#include<iostream>#include<algorithm>#define_CRT_SECURE_NO_WARNINGS#define_CRT_SECURE_NO_DEPRECATE#pragmawarning(disable:4996)using......