面對這個問題,我首先想到的是将一個數組的空間一分為二來為兩個棧使用。可以将一個棧的底設在數組的起始位置,另一個棧的底設在數組的中間位置。但是這樣并不能有效地利用數組的空間,比如當一個棧已滿而另一個棧不滿時,明明仍有剩餘空間,卻無法向前一個棧壓入資料。為了能有效利用空間,考慮将兩個棧的底分别設在數組的兩端,這樣棧頂位置由兩端向中間移動保證了在數組空間被全部使用之前,元素可以壓入任意一個棧中。
Talk is cheap,show you the code.
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
typedef struct{
int Date[MaxSize];
int Top1;
int Top2;
} DStack;
void Push(DStack *PtrS, int item, int tag)
{
if(PtrS->Top2 - PtrS->Top1 == ){
printf("棧已滿\n");
return;
}
if(tag == )
PtrS->Date[++PtrS->Top1] = item;
else
PtrS->Date[--PtrS->Top2] = item;
}
int Pop(DStack *PtrS,int tag)
{
if(tag == ){
if(PtrS->Top1 == -){
printf("棧已空\n");
return NULL;
}
else
return PtrS->Date[PtrS->Top1--];
}
else{
if(PtrS->Top2 == MaxSize){
printf("棧已空\n");
return NULL;
}
else
return PtrS->Date[PtrS->Top2++];
}
}