用一个数组实现双堆桟,最大的利用数组空间,使只要数组有空间就能入栈成功。
1、定义一个双堆桟
#define MaxSize
struct DStack{
ElementType Data[Maxsize];
int Top1;
int Top2;
}S;
S.Top1=-1;
S.Top2=MaxSize;
2、实现双堆桟的入栈
void Push(struct DStack *PtrS, ElementType item, int Tag){
//Tag用来区分是哪一个堆桟
if(PtrS->Top2 - PtrS->Top1 == 1){
printf("堆桟满");
return;
}
if(Tag==1){
PtrS->Data[++(PtrS->Top1)]=item;
}else{
PtrS->Data[--(PtrS->Top2)]=item;
}
}
3、实现双堆桟的出栈
ElementType Pop(struct DStack *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)++];
}
}
}