c语言栈的实现

#include"stdio.h"
#include"stdlib.h"
#include"malloc.h"
#include "string.h"


#define STACK_INIT_SIZE 100    //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
struct data{
    char *d;
};

//栈
typedef struct{
    struct data *top;   //栈顶指针
    struct data *base;  //站底指针,在占构造之前和销毁之后,base都为NULL
    int stacksize;    //当前已分配的存储空间
}SqStack;
//初始化栈
SqStack *InitStack(){
    //构造一个空栈
    SqStack *s = (SqStack *)malloc(STACK_INIT_SIZE*sizeof(SqStack));
    s->base = (struct data *)malloc(STACK_INIT_SIZE*sizeof(struct data));
    if(!s->base) return NULL;  //存储分配失败
    s->top = s->base;
    s->stacksize = STACK_INIT_SIZE;
    return s;
}

char *getTop(SqStack *s){
    //若栈不空,则用e返回S的栈顶元素
    if(s->top == s->base) return NULL;
    char *e = (s->top-1)->d;
    return e;
}

int push(SqStack *s,char *e){
    //插入元素e为新的栈顶元素
    if(s->top - s->base >= s->stacksize){//栈满,追加存储空间
        s->base = (struct data *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(struct data));
        if(!s->base) return -1;
        s->top = s->base + s->stacksize;
        s->stacksize += STACKINCREMENT;
    }
    s->top->d = e;
    s->top++;
    return 1;
}

char *pop(SqStack *s){
    //若栈不空,则删除s的栈顶元素,用e返回其值
    if(s->top == s->base) return NULL;
    char *e = (--s->top)->d;
    return e;
}
void test(){
    printf("%s","---------------");
}


你可能感兴趣的:(c语言栈的实现)