首先为两个栈申请一个共享的一维数组空间S[M],将两个栈分别放在在一维数组的两端,分别是0和M-1:
#include <iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
#define M 100
struct Stack
{
int elem[M];
int top[2]; /*用来存放栈顶元素的下标*/
};
void InitStack(Stack *s) /* 构建一个空栈S */
{
s->top[0]=-1;
s->top[1]=M;
}
int Push(Stack *s,int x,int i) /*把数据元素X压入i号堆栈 */
{
if(s->top[0]+1==s->top[1]) return FALSE; /*栈已满*/
switch(i)
{
case 0:
s->top[0]++;
s->elem[s->top[0]]=x;
break;
case 1:
s->top[1]--;
s->elem[s->top[1]]=x;
break;
default: /*参数错误*/
return FALSE;
}
return TRUE;
}
int Pop(Stack *s,int * x,int i)/*将i号栈顶元素弹出,放到X所指的存贮空间中*/
{
switch(i)
{
case 0:
if(s->top[0]==-1) return FALSE;
*x=s->elem[s->top[0]];
s->top[0]--;
break;
case 1:
if(s->top[1]==M) return FALSE;
*x=s->elem[s->top[1]];
s->top[1]++;
break;
default:
return FALSE;
}
return TRUE;
}
int Get_Top(Stack *s,int *x,int i)
{
switch(i)
{
case 0:
if(s->top[0]==-1) return FALSE;
*x=s->elem[s->top[0]];
break;
case 1:
if(s->top[1]==M) return FALSE;
*x=s->elem[s->top[1]];
break;
default:
return FALSE;
}
return TRUE;
}
int main()
{
Stack s,*S;
int x;
S=&s;
InitStack(S);
Push(S,3,0);
Push(S,4,1);
Pop(S,&x,0);
Get_Top(S,&x,0);
cout<<x<<endl;
return 0;
}