用C语言实现完整的栈操作

下面直接上代码:
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 20

typedef struct {
    int *top; //定义两个指针,一个头指针,一个尾指针
    int *base;
    int stackSize;
} MinStack;

// 创建栈
MinStack* minStackCreate() {
    MinStack *s = malloc (sizeof(MinStack));
    if (!s) return NULL;
    s->base = (int *)malloc(STACK_INIT_SIZE*sizeof(int));
    s->top=s->base;
    s->stackSize=STACK_INIT_SIZE;
    return s;
}

// 向栈中插入元素
void minStackPush(MinStack* obj, int x) {
	// 这里需要注意插入时要判断栈是否已经满了,满了需要重新分配内存
    if(obj->top-obj->base==obj->stackSize) 
    {
        obj->base=(int *)realloc(obj->base,(obj->stackSize+STACKINCREMENT)*sizeof(int));
        obj->top=obj->base+obj->stackSize;
        obj->stackSize=obj->stackSize+STACKINCREMENT;
    }
    *(obj->top)=x;
    obj->top++;
}

// 删除栈顶元素
void minStackPop(MinStack* obj) {
    if(obj->top==obj->base)
        return;
    obj->top--;
}

// 返回栈顶元素
int minStackTop(MinStack* obj) {
    if(obj->top==obj->base)
        return -1; // 这里表示如果栈是空的,就返回-1(返回什么自己决定)
    int x = *(obj->top-1);
    return x;
}

// 求栈中所有元素的最小值
int minStackGetMin(MinStack* obj) {
    int min=*(obj->base),x=*(obj->top-1),size=obj->top-obj->base;
    while(obj->top!=obj->base)
    {
        obj->top--;
        x=*(obj->top);
        if(min>x)
            min=x;
    }
    obj->top=obj->top+size;
    return min;
}

// 清空栈
void minStackFree(MinStack* obj) {
    free(obj);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值