分析:一种聪明的办法是使这两个栈分别从数组的两头向中间生长,当两个指针相遇时,表时两个栈都满了。
#define MaxSize 100
#define ElementType int
typedef struct {
ElementType Data[MaxSize];
int top1;
int top2;
}Strck,s;
s.top1=-1;
s.top2=MaxSize;
添加一个元素
void Push(Strck *PtrS,ElementType x,int tag){
//tag作为区分两个栈的标志,分别取值1,2
if(PtrS->top2-PtrS->top1==1){
printf("堆栈满");
return;
}
else{
if(tag==1){
PtrS->Data[++PtrS->top1]=x;
}
else{
PtrS->Data[--PtrS->top2]=x;
}
}
删除一个元素
ElementType Pop(Strck *PtrS,int tag){
if(tag==1){
if(PtrS->top1==-1){
printf("堆栈1为空");
return NULL;
}else return PtrS->Data[PtrS->top1--];
}
else{
if(PtrS->top2==MaxSize){
printf("堆栈2为空");
return NULL;
}else return PtrS->Data[PtrS->top2++];
}
}