用一个数组实现两个堆栈,最大地使用数组的空间,只要有空间就能入栈成功

来源:互联网 发布:一路发微博营销软件 编辑:程序博客网 时间:2024/05/17 00:52

使两个堆栈分别在数组的两端作为开始:有一个标记,用来区分是哪一个堆栈,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)++];

}

}

0 0
原创粉丝点击