棧的基本實現(更新中)

棧的基本實現(更新中)

參考着嚴蔚敏的《數據結構(C語言版)》,用自己拿渣的可憐的C語言做了一下午的實現。。。也沒能寫出來幾個。。。就很菜(氣哭)。。。

/*-------------------棧的結構體定義---------------------*/
#define STACK_INIT_SIZE 100       // 存儲空間初始分配量
#define STACKINCREMENT 10         // 存儲空間分配增量

typedef char SElemType; /*SElemType 類型根據實際情況而定,這裏假設爲int */
typedef struct{
    SElemType *top;
    SElemType *base;
    int stacksize;          /* 棧的最大容量 */
}SqStack;

/*-----------------------------------------------------*/

/*初始化棧,並分配空間*/
Status InitStack(SqStack *S){
    //構造一個空棧S
    S = (SqStack *)malloc(sizeof(SqStack));
    S->base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
    if(!S->base)exit(OVERFLOW);     //存儲分配失敗
    S->top = S->base;
    S->stacksize = STACK_INIT_SIZE;
    return OK;
}   // InitStack

/*若棧存在,則銷燬它*/
Status DestroyStack(SqStack *S){
    free(S);
    if(!S)return ERROR;
    return OK;
}

/*將棧清空*/
Status ClearStack(SqStack *S){

}

/*若棧爲空,返回true,否則返回false*/
Status StackEmpty(SqStack S){

}

/*若棧存在且非空,用e返回S的棧頂元素*/
Status GetTop(SqStack S, SElemType *e){
    //若棧不空,則用e返回S的棧頂元素,並返回OK;否則返回ERROR
    if(S.top == S.base)
       return ERROR;    //空棧判斷
    e = S.top - 1;
    return OK;
}   //GetTop

Status Push(SqStack *S, SElemType e){
    //插入元素e 爲新的棧頂元素
    if(S->top - S->base >= S->stacksize){   // 棧滿,增加存儲空間
        S->base = (SElemType *)realloc(S->base, (S->stacksize + STACKINCREMENT) * sizeof(SElemType));
        if(!S->base)exit(OVERFLOW);         // 內存已滿,存儲空間分配失敗
        S->top = S->base + S->stacksize;
        S->stacksize += STACKINCREMENT;     // 最大存儲空間增長
    }
    S->top ++;
    S->top = e;
    return OK;
}

Status Pop(SqStack *S, SElemType *e){
    //若棧不空,則刪除S的棧頂元素,用e返回其值,變返回oK;否則返回ERROR
    if(S->top == S->base)return ERROR;
    e = * -- S->top;
    return OK;
}   //pop
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章