天天看點

【資料結構】一個數組實作兩個棧

面對這個問題,我首先想到的是将一個數組的空間一分為二來為兩個棧使用。可以将一個棧的底設在數組的起始位置,另一個棧的底設在數組的中間位置。但是這樣并不能有效地利用數組的空間,比如當一個棧已滿而另一個棧不滿時,明明仍有剩餘空間,卻無法向前一個棧壓入資料。為了能有效利用空間,考慮将兩個棧的底分别設在數組的兩端,這樣棧頂位置由兩端向中間移動保證了在數組空間被全部使用之前,元素可以壓入任意一個棧中。

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++];
    }
}