将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别位于数组的两端。
当第0号栈的栈顶指针top[0]等于-1时该栈为空;当第1号栈的栈顶指针top[1]等于m时,该栈为空。
两个栈均从两端向中间增长。试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。
注意
左栈是通常意义的栈,右栈的入栈操作(栈顶指针减1),出栈操作(栈顶指针加1)
#include <stdio.h>
typedef int ElemType;
typedef struct
{
int top[2], bot[2];
ElemType *V;
int m;
}DblStack;
bool Init(DblStack *stk)
{
stk->top[0] = -1;
stk->top[1] = stk->m;
stk->bot[0] = 0;
stk->bot[1] = stk->m - 1;
return 1;//初始化成功
}
int push(DblStack *stk, int i, int val)
{
if (stk->top[1] - stk->top[0] == 1)
{
printf("OverFlow!/n");
return 0;
}
switch (i)
{
case 0:
V[++top[0]] = val;
return 1;
break;
case 1:
V[--top[1]] = val;
return 1;
break;
default:
printf("Error stack!\n");
return 0;
}
}
ElemType pop(DblStack *stk, int i)
{
switch (i)
{
case 0:
if (stk->top[0] == -1)
printf("左栈为空!\n");
else
return stk->V[top[0]--];
case 1:
if (stk->top[1] == m)
printf("右栈为空!\n");
else
return stk->V[top[1]++];
default:
}
}
int Empty(DblStack *stk)
{
return (stk->top[0] == -1 && stk->top[1] == m);
}