C语言栈的线性存储结构操作实现

/**
    开发环境codeblock
    xxwu
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define STACK_INIT_SIZE 100
#define STACK_INCREASEMENT 10
typedef int ElemType;

typedef struct Stack {
    ElemType *base;
    ElemType *top;
    int stack_size;
} SqStack;

//打印栈中元素
void printStack(SqStack s);

//初始化栈
bool InitStack(SqStack *s);

//栈判空
bool isEmpty(SqStack s);

//获取栈中元素个数
int getLength(SqStack s);

//插入栈
bool putStack(SqStack *s, ElemType e);

//出栈
ElemType outStack(SqStack *s);

//获取栈顶元素
ElemType getTopElem(SqStack s);

//清空栈
bool clearStack(SqStack *s);

//初始化栈
bool InitStack(SqStack *s) {
    s->base = (ElemType *) malloc(STACK_INIT_SIZE * sizeof(ElemType));
    if(s->base == NULL) {
        return false;
    }
    s->top = s->base;
    s->stack_size = STACK_INIT_SIZE;
    return true;
}

//栈判空
bool isEmpty(SqStack s) {
    return s.base == s.top? true : false;
}

//获取栈中元素个数
int getLength(SqStack s) {
    return s.top - s.base;
}

//打印栈中元素
void printStack(SqStack s) {
    while(s.top != s.base) {
            s.top--;
        printf("elems in the stack :%d\n", *s.top);
    }
}

//插入栈
bool putStack(SqStack *s, ElemType e) {
    //栈已满重新分配存储空间
    if(s->top - s->base >= s->stack_size) {
        s->base = (ElemType *) realloc(s->base,(s->stack_size + STACK_INCREASEMENT)*sizeof(SqStack));
        if(s->base == NULL)
            return false;
        s->top = s->base + s->stack_size;
        s->stack_size += STACK_INCREASEMENT;
    }
    //入栈
    *(s->top) = e;
    s->top++;
    return true;
}

//出栈
ElemType outStack(SqStack *s) {
    if(isEmpty(*s)) return NULL;
    s->top--;
    ElemType e = *(s->top);
    return e;
}

//获取栈顶元素
ElemType getTopElem(SqStack s) {
    if(isEmpty(s)) return NULL;
    return *(s.top-1);
}

//清空栈
bool clearStack(SqStack *s) {
    s->top = s->base;
    return true;
}

int main()
{
    SqStack S;
    InitStack(&S);
    putStack(&S,1);
    putStack(&S,2);
    putStack(&S,3);
    putStack(&S,4);
    putStack(&S,5);
    putStack(&S,6);
    printf("the out stack elem is : %d \n",outStack(&S));
    printf("length of S:%d \n",getLength(S));
    printStack(S);

    clearStack(&S);
    printf("the length of stack after cleared : %d", getLength(S));
    return 1;
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值