C语言数据结构_栈的操作

入栈操作

入栈操作又叫压栈操作,就是向栈中存放数据。入栈操作要在栈顶进行,每向栈中压入一个数据,top指针就增加1,直到栈满为止。

#define STACKINCREMENT 10

Push(sqStack *s, ElemType e){
    if(s->top - s->base >= s->stacksize){
        //栈满,追加空间
        s->base = (ElemType *)realloc(s->base, (s->stacksize + STACKINCREMENT)*sizeof(ElemType));
        if(!s->base) exit(0);                   //存储分配失败
        s->top = s->base + s->stacksize;
        s->stacksize = s->stacksize + STACKINCREMENT;           //设置栈的最大容量
    }
    *(s->top) = e;          //放入数据
    s->top++;
}

出栈操作

出栈操作就是在栈顶取出数据,栈顶指针随之下移的操作。每当从栈内弹出一个数据,栈的当前容量就减少1。可以重复出栈操作,直到该栈变为空栈为止。

Pop(sqStack *s, ElemType *e){
    if(s->top == s->base) return;
    *e = *--(s->top);
}

清空栈的操作

清空一个栈,就是希望把栈中的元素全部作废,而栈本身的物理空间并不一定发生改变。清空一个栈的代码如下:

ClearStack(sqStack *s){
    s->top = s->base;
}

销毁一个栈

销毁一个栈就是要释放掉该栈所占据的物理内存空间。销毁一个栈的代码如下:

DestroyStack(sqStack *s){
    int i, len;
    len = s->stacksize;
    for(i=0; i<len; i++)
    {
        free(s->base);
        s->base++;
    }
    s->base = s->top = NULL;
    
}

计算栈的当前容量

计算栈的当前容量也就是计算栈中元素的个数,因此只要返回s.top - s.base即可。计算栈当前容量的代码如下:

int StackLen(sqStack s) {
    return (s.top - s.base);
}

要注意栈的最大容量是指该栈占据内存空间的大小,其值为s.stacksize, 它与栈的当前容量不是一个概念

上一篇:docker --镜像分层结构


下一篇:C语言数据结构_栈的实例分析