【栈】栈的顺序存储表示
代码
#include <iostream>
#include <cstdio>
using namespace std;
#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int status;
typedef int SElemType;
typedef struct{
SElemType * base;
SElemType * top;
int stacksize;
}SqStack;
status InitStack(SqStack &s){
s.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
s.top = s.base;
s.stacksize = STACK_INIT_SIZE;
return OK;
}
status GetTop(SqStack s, SElemType &e){
if (s.top == s.base) return ERROR;
e = * (s.top - 1);
return OK;
}
status Push(SqStack &s, SElemType e){
if (s.top - s.base >= s.stacksize){
s.base = (SElemType *)realloc(s.base, (s.stacksize + STACKINCREMENT) * sizeof(SElemType));
s.top = s.base + s.stacksize;
s.stacksize += STACKINCREMENT;
}
* s.top++ = e;
return OK;
}
status Pop(SqStack &s, SElemType &e){
if (s.top == s.base) return ERROR;
e = * --s.top;
return OK;
}
status StackEmpty(SqStack s){
if (s.top != s.base) return ERROR;
return OK;
}
int main(){
SqStack s;
InitStack(s);
int n;
printf("请输入入栈的数字个数:\n");
scanf("%d", &n);
for (int i = 1; i <= n; i++) Push(s, i);
printf("入栈完毕,下面开始依次出栈:\n");
SElemType e;
while (!StackEmpty(s)){
Pop(s, e);
printf("%d ", e);
}
return 0;
}