设有两个栈S1,S2都采用顺序栈方式,并且共享一个存储区[0...MAaxSize-1],为了尽量利用空间,减少溢出的可能,可采用栈顶相向,迎面增长的存储方式。试设计S1,S2有关初始化,入栈,出栈的操作算法。
代码:
typedef int SElemType;//栈中存储元素的类型
typedef struct{
SElemType stack[MaxSize];
int top[2];//两个栈的栈顶,top[0],top[1]
}ShareStack;
//初始化
void initSharStack(SharStack &shareStack) {
shareStack.top[0]=-1;
shareStack.top[1]=MaxSize;
}
//入栈
//i表示操作栈的编号,x表示入栈的元素
bool push(ShareStack &shareStack,int i,SElemType x){
//判断是否合法入栈
if(i<1 || i>1){
return false;
}
//判断栈满
if(shareStack.top[0]+1=shareStack.top[1]){
printf("栈满\n");
return false;
}
//栈1入栈
if(i==0){
shareStack[++shareStack.top[0]=x;
} else if(i==1){
//栈2入栈
shareStack[++shareStack.top[1]=x;
}
return true;
}
//出栈
bool pop(ShareStack &shareStack,int i,SElemType x){
//判断是否合法入栈
if(i<1 || i>1){
return false;
}
//栈空判断
//栈1空
if(i==0&&shareStack.top[0]=-1){
printf("栈空\n");
return false;
}
//栈2空
if(i==1&&shareStack.top[1]=MaxSize){
printf("栈空\n");
return false;
}
//栈1出栈
if(i==0){
x=shareStack[shareStack.top[0]--);
} else if(i==1){
//栈2出栈
x=shareStack[shareStack.top[1]++);
}
return true;
}