补一下上周学的栈的基本操作
//
// 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);
}