日常划水。
//顺序栈
#include<stdio.h>
#include<stdlib.h>
int Stacksize = 100;
int addsize = 10;
typedef struct {
int *top;
int *base;
int stacksize;
int length;
}SqStack;
//初始化
int InitStack(SqStack &S) {
S.base = (int *)malloc(Stacksize * sizeof(int));
if (!S.base) {
printf("栈初始化失败\n");
return 0;
}
S.top = S.base;
S.stacksize = Stacksize;
S.length = (*S.top) - 1;
}
int GetTop(SqStack S) {
if (S.top == S.base) {
printf("栈为空\n");
return 0;
}
else {
return *(S.top - 1);
}
}
//压栈
int Push(SqStack &S, int e) {
if (S.top - S.base >= S.stacksize) {
S.base = (int *)realloc(S.base, (S.stacksize + addsize) * sizeof(int));
if (!S.base) {
printf("分配空间失败\n");
return 0;
}
S.top = S.stacksize + S.base;
S.stacksize += addsize;
}
*S.top++ = e;
}
//弹出
int Pop(SqStack &S) {
if (S.base == S.top) {
printf("栈为空\n");
return 0;
}
return *--S.top;
}
//遍历
void StackTraverse(SqStack &S) {
if (S.base == S.top) {
printf("栈为空\n");
}
else {
int *p = S.base;
while (p != S.top) {
printf("%d", *p);
p++;
}
printf("\n");
}
}
int main() {
SqStack S;
InitStack(S);
for (int i = 0; i < 4; i++) {
int k;
scanf_s("%d", &k);
Push(S, k);
}
StackTraverse(S);
GetTop(S);
Pop(S);
StackTraverse(S);
return 0;
}