顺序栈的双端储存
1.双端栈
在栈的共享技术中最常用的是两个栈的共享技术即双端栈:主要利用了栈“栈底位置不变,而栈顶位置动态变化”的特性。首先为两个栈申请一个共享的一维数组空间data[MaxSize],将两个栈的栈底分别放在一维数组的两端,分别是0,M-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算法思想
-
判断栈是否满 栈为满的条件为两端的top相差为1
-
栈满则无法入栈,不满则可以入栈
-
利用判别器i 判断要插入的数据是哪一端
-
如果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算法思想
-
利用判别器i 判断要出栈的是哪一端
-
i为0 则出栈的是S.top[0]一端,为1 则出栈的是S.top[1]一端
-
判断要出栈的哪一端 是否为空 为空则不能出栈
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