#include <stdio.h>
#include <string>
#define InitSize 20
typedef struct
{
int top[2];
int bot[2];
int *value;
int m;
} DblStack;
bool InitDblStack(DblStack &s, int m)
{
s.value = new int[m];
s.m = InitSize;
s.bot[0] = -1;
s.bot[1] = m;
s.top[0] = -1;
s.top[1] = m;
return true;
}
int StackEmpty(DblStack S, int i) // 判断指定的i号栈是否为空 空返回1
{
return S.bot[i] == S.top[i];
}
int isFull(DblStack S)
{
if (S.top[0] + 1 == S.top[1])
{
return 1;
}
else
return 0;
}
int Push(DblStack &S, int i, int e)
{
if (S.top[0] + 1 == S.top[1])
{
return 1;
}
if (i == 0)
{
S.value[++S.top[i]] = e;
return 1;
}
else if (i == 1)
{
S.value[--S.top[i]] = e;
return 1;
}
else
return 0;
}
int DblPop(DblStack &S, int i, int &e)
{
if (S.top[i] == S.bot[i])
{
return 0;
}
if (i == 0)
{
e = S.value[S.top[0]--];
}
else if (i == 1)
{
e = S.value[S.top[1]++];
}
return 1;
}
void PrintStack(DblStack s)
{
printf("0号栈:");
for (int i = 0; i < s.top[0] + 1; i++)
{
printf("%d ", s.value[i]);
}
printf("\n1号栈:");
for (int i = s.top[1]; i < s.bot[1]; i++)
{
printf("%d ", s.value[i]);
}
}
int main()
{
DblStack S;
int e;
InitDblStack(S, InitSize);
printf("0号栈空状态: %d\n", StackEmpty(S, 0)); // 输出1为空
Push(S, 0, 2);
Push(S, 1, 3);
Push(S, 1, 4);
PrintStack(S);
printf("\n0号栈空状态: %d\n", StackEmpty(S, 0)); // 输出1为空
DblPop(S, 1, e);
printf("出栈元素: %d\n", e);
PrintStack(S);
}
运行结果如下