1. 双向栈S是在一个数组空间V[m]内实现的两个栈,栈底分别处于数组空间的两端。为此双向栈设计栈初始化init()、入栈push(i,x)、和出栈pop(i)算法,其中i为0或1,用于指示栈号。
#define maxsize 100 // 两栈共享顺序存储空间所能达到的最多元素数
#define ElemType int // 假设元素类型为整型
typedef struct
{
ElemType stack[maxsize]; // 栈空间
int top[2]; // top为两个栈顶指针
}stk;
stk s; // s是如上定义的结构类型变量,且为全局变量
入栈操作:
int push(int i,int x) // 入栈
// i=0表示左栈s1,i=1表示右栈s2,x是入栈元素
{
if(i<0 || i>1)
{
printf(“栈号输入不对\n”);
exit(0);
}
if(s.top[1] - s.top[0] == 1)
{
printf(“栈已满\n”);
return(0);
}
switch(i)
{
case 0:
s.stack[++s.top[0]]=x;
return(1);
break;
case 1:
s.stack[--s.top[1]]=x;
return(1);
}
} // 入栈成功返回1,否则返回0
退栈操作:
ElemType pop(int i) // 退