使两个堆栈分别在数组的两端作为开始:有一个标记,用来区分是哪一个堆栈,Tag。
另外,对于两个堆栈的栈顶,其中一个开始是是0.另外一个初始值就是MaxSize-1了。
所以判断这两个堆栈为空的方法分别为:指向-1和指向MaxSize 这两个是我们自己定义的,就是这样,没有原因
#define MaxSize <存储数据元素最大个数>
struct DStack{
ElementType Data[MaxSize];
int Top1;
int Top2;
}S;
S.Top1 = -1;
S.Top2 = MaxSize;//这两个值表示的是在堆栈为空时的指针情况。
操作:push什么时候就算满了?是两个指针对头的时候,也即Top2-Top1=1;
void Push(struct DStack *PtrS, ElementType item, int Tag)
{if(Ptrs->Top2-PtrS->Top1==1)//堆栈满
{printf("堆栈满");
return;
}
if(Tag==1)??对第一个堆栈进行操作
PtrS->Data[++(PtrS->Top1)]=item;
else
PtrS->Data[--(Ptrs->Top2)]=item;
}
出栈操作
ElementType Pop(struct DStack *PtrS, int Tag){
if(Tag==1){
if(Ptrs->Top1==-1){
printf("堆栈为空");
return;}
else return PtrS->Data[(PtrS->Top1)--]
}else{
if(PtrS->Top2 == MaxSIze) {
printf("堆栈空");return NULL;}
else return PtrS->Data[(PtrS->Top2)++];
}
}