#include#define ERROR -1
typedef int ElementType;
typedef enum {
push, pop, end
} Operation;
/*typedef enum {
false, true
} bool;*/
typedef int Position;
typedef struct SNode *PtrToSNode;
struct SNode {
ElementType *Data; /* 存储元素的数组 */
Position Top; /* 栈顶指针 */
int MaxSize; /* 堆栈最大容量 */
};
typedef PtrToSNode Stack;
//初始化栈
Stack CreateStack(int MaxSize)
{
//准备存放结构体型的变量数据
Stack S = (Stack)malloc(sizeof(struct SNode));
//动态申请数组空间
S->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));
//把栈顶指针指向0
S->Top = 0;
//给MaxSize赋值
S->MaxSize = MaxSize;
return S;
}
//入栈
bool Push(Stack S, ElementType X)
{
//判断栈顶是否与栈容量相等
if (S->MaxSize == S->Top)
{
//输出Stack Full
puts("Stack Full");
return 0;
}
//不相等则栈顶指针+1
S->Data[S->Top++]=X;
return 1;
}
//出栈
ElementType Pop(Stack S)
{
//判断栈顶是否为空
if (!S->Top)
{
//输出Stack Empty
puts("Stack Empty");
//返回ERROR
return ERROR;
}
//返回栈顶元素
return S->Data[--S->Top];
}
Operation GetOp()
{
//定义字符数组a
char a[11];
//把接收的字符串写入字符数组
scanf("%s", a);
//判断push, pop, end是哪一个,并返回push, pop, end其中一个
if (!strcmp("Push", a))
return push;
if (!strcmp("Pop", a))
return pop;
if (!strcmp("End", a))
return end;
}
//打印栈内元素
void PrintStack(Stack S)
{
while (S->Top)
{
printf("%d ", S->Data[--S->Top]);
}
puts("");
}
int main()
{
ElementType X;
Stack S;
int N, done = 0;
//接收栈容量
scanf("%d", &N);
//把栈初始化
S = CreateStack(N);
//循环操作栈,直到done=1;
while (!done) {
//根据输入操作进行选择对应操作
switch (GetOp()) {
//入栈
case push:
scanf("%d", &X);
Push(S, X);
break;
//出栈
case pop:
X = Pop(S);
//出栈元素打印
if (X != ERROR) printf("%d is out\n", X);
break;
//结束程序,打印栈内元素
case end:
//打印栈内元素
PrintStack(S);
done = 1;
break;
}
}
return 0;
}