#include <stdio.h>
#include <stdlib.h>
#define MaxSize 50
#define IncreaseSize 10
//动态顺序栈
typedef struct {
int* data;
int* top;
int SqLength;
}SqStack;
//初始化栈
SqStack InitStack();
//遍历栈
void travse(SqStack S);
//进栈
int Push(SqStack& S, int x);
//出栈
int Pop(SqStack& S, int& x);
int main() {
SqStack S = InitStack();
travse(S);
printf("请输入进栈的值:");
int x;
scanf_s("%d", &x);
Push(S,x);
travse(S);
Pop(S,x);
travse(S);
printf("出栈的值:%d\n",x);
return 0;
}
SqStack InitStack() {
SqStack S;
S.data = (int*)malloc(MaxSize * sizeof(int));
if (!S.data) {
printf("分配空间失败");
exit(0);
}
S.top = S.data;
S.top = S.top - 1;
printf("请输入栈的初始化长度【最大长度50】:");
int Mlength;
int Mdata;
scanf_s("%d", &Mlength);
S.SqLength = Mlength;
printf("请输入栈的初始化数据:");
for (int i = 0; i < Mlength; i++)
{
scanf_s("%d", &Mdata);
S.top++;
*(S.top) = Mdata;
}
return S;
}
void travse(SqStack S) {
printf("栈遍历为:");
for (int i = 0; i < S.SqLength; i++)
{
printf("%d ", *(S.top));
S.top--;
}
printf("\n");
}
int Push(SqStack& S, int x) {
int Mlength = S.SqLength;
if (S.top == &(S.data[49]))
{
S.data = (int*)malloc((Mlength + IncreaseSize) * sizeof(int));
if (!S.data) {
printf("分配空间失败");
exit(0);
}
S.top = &(S.data[49]);
}
S.top++;
*(S.top) = x;
S.SqLength++;
printf("进栈成功\n");
return 1;
}
int Pop(SqStack& S, int& x) {
int* m = S.data;
if (S.top == m - 1)
{
printf("栈空");
return 0;
}
x = *(S.top);
S.top--;
S.SqLength--;
printf("出栈成功\n");
return 1;
}