编写一个程序实现顺序栈的各种基本运算,完成如下功能:
1.依次进栈数据为1,2,3,4,5,再全部出栈,输出出栈序列。
2.先进栈3,2,1,出栈2次,进栈4,5,6,7,再全部出栈,输出每次入栈,出栈序列。
代码实现:
#define maxsize 50
#include<stdio.h>
#include<stdlib.h>
//状态的定义
typedef enum {
OK,
ERROR
} Status;
//栈的定义(栈顶指针,栈顶指针,栈的最大容量)
typedef struct {
int* top;
int* base;
int stacksize;
}sqstack;
//栈的初始化
Status Initstack(sqstack& S) {
//构造空栈,并分配最大数组空间
S.base = new int[maxsize];
//如果创建失败
if (!S.base) {
return ERROR;
}
S.top = S.base;
S.stacksize = maxsize;
return OK;
}
//进栈
Status push(sqstack& S, int e) {
// 栈满判断
if (S.top - S.base >= S.stacksize) {
return ERROR; // 返回栈满状态
}
// 未满,将元素压入栈顶,栈顶指针 top+1
*S.top++ = e;
return OK; // 返回成功状态
}
//出栈(删除栈顶元素)
int out(sqstack& S) {
//空栈错误
if (S.base == S.top) {
return -1;
}
else {
return *--S.top;//栈顶指针-1
}
}
//获取栈顶元素
int gettop(sqstack& S) {
//空栈返回错误
if (S.base == S.top) {
return ERROR;
}
else {
return *(S.top - 1);
}
}
int main() {
sqstack S;
Initstack(S);
//入栈
printf("依次进栈数据为1,2,3,4,5,再全部出栈\n");
for (int i = 1; i <=5; i++) {
Status status = push(S, i);
if (status == OK) {
printf("入栈成功,入栈顺序:%d\n", i);
}
else {
printf("%d入栈失败\n", i);
}
}
//出栈
while (S.base != S.top) {
int e = out(S);
printf("出栈顺序:%d\n", e);
}
//进栈3,2,1,出栈2次
printf("进栈3,2,1,出栈2次\n");
for (int j = 3; j >=1; j--) {
Status jt = push(S, j);
if (jt == OK) {
printf("入栈成功,入栈顺序:%d\n", j);
}
}
//出栈两次
out(S);
out(S);
//进栈4,5,6,7,再全部出栈
printf("进栈4,5,6,7,再全部出栈\n");
for (int k = 4; k < 8; k++) {
Status kt = push(S, k);
if (kt == OK) {
printf("入栈成功,入栈顺序:%d\n", k);
}
}
while (S.base != S.top) {
int y = out(S);
printf("出栈顺序:%d\n", y);
}
}