20190923栈基本操作

补一下上周学的栈的基本操作

//
// Created by weini on 2019/9/23.
//
#include <stdio.h>
#include <stdlib.h>

#define Maxsize 100
#define  increasize 10
#define TYPE int
enum Status {
    OK, ERROR, OVERFLOW
};
typedef struct stack {//定义栈
    TYPE *base;
    TYPE *top;//顶指针
    int stacksize;
} Stack;

Status InitStack(Stack &s) {
    //初始化一个栈
    s.base = new TYPE[Maxsize];
    if (!s.base)return OVERFLOW;//内存分配失败
    s.top = s.base;
    s.stacksize = Maxsize;
    return OK;
}

Status PushStack(Stack &s) {
    //入栈操作
    TYPE elem;
    if (s.top - s.base > s.stacksize) {
        //这是栈满的标志,要追加空间
        s.base = (int *) realloc(s.base, (s.stacksize + increasize) * sizeof(TYPE));
        s.top = s.base + s.stacksize;
        s.stacksize += increasize;
    }
    scanf("%d", &elem);
    *s.top++ = elem;
    return OK;
}

Status PopStack(Stack &s, TYPE elem) {
    //删除栈顶元素,将删除的那个元素赋值给elem
    if (s.top == s.base)return ERROR;//空栈的时候
    else {
        elem = *--s.top;//先赋值再自减
        printf("删除的元素是%d\n", elem);
        return OK;
    }
}

void GetTop(Stack &s, TYPE elem) {
    if (s.top - s.base != 0) {
        printf("栈顶元素是%d\n", *(s.top-1));
    }
}

void TravelStack(Stack &s) {
    int *j = s.base;
    for (j; j < s.top-1; ++j) {
        printf("%d,", *j);
    }
    printf("%d\n", *j++);
}

int main() {
    Stack s;
    int a;
    InitStack(s);
    printf("请输入栈的元素:\n");
    for (int i = 0; i < 5; ++i) {
        PushStack(s);
    }
    TravelStack(s);
    GetTop(s, a);
    PopStack(s, a);
    GetTop(s, a);
    TravelStack(s);
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值