原题:设有两个栈S1和S2,都采用顺序表示,并且共享一个存储区V[0:MAXSIZE],为尽量利用空间,减少溢出的可能,现采用栈顶相对,迎面增长的方式存储。试设计公用栈基本操作,实现初始化,判空和出栈操作的算法。
分析:将两个栈底置在数组V[0:maxsize]的两端,迎面增长,只有当两个栈相遇时才会溢出,另外一个变量tag(=1,2)来表示S1和S2的操作。
#include<iostream.h>
#define MAXSIZE 100 //存储空间最大容量
#define ElemType char
typedef struct
{
ElemType v[MAXSIZE]; //栈空间
int top1; //S1栈底
int top2; //S2栈底
}DuSqStack;
int InitStack(DuSqStack &S)
{
S.top1=0; //S.top1==0表示S1空
S.top2=MAXSIZE - 1; //S.top2 == MAXSIZE - 1 表示S2空
return 1;
}
int StackEmpty(DuSqStack S,int tag)//判栈空
{//判空,tag==1时判S1是否为空,tag==2时判S2是否为空
if(tag==1)
{
if(S.top1=