给定一个初始为空的栈(栈容量为10)和一系列进栈、出栈操作,请编写程序输出经过这些操作后栈的元素。栈的元素值均为整数。
输入格式:
输入第1行为1个正整数n,表示操作个数;
第2行为给出的n个整数,非0元素表示进栈,此非0元素即为进栈元素,0元素表示出栈。
保证栈中元素个数不超过10个。
输出格式:
第一行按出栈顺序输出所有出栈元素,以一个空格隔开;如果栈满时做进栈操作会输出"FULL”,如果栈空时做出栈操作会输出"EMPTY";
第二行中清空栈中剩余的所有元素,以一个空格隔开。
末尾均有一个空格(出栈的形式一个个清空栈元素)。
输入样例:
12
3 1 2 0 0 -1 0 0 0 4 5 0
输出样例:
2 1 -1 3 EMPTY 5
4
考查C语言栈的基本操作,想必LGD的精英学子们一定可以做出来
代码实现:
#include <stdio.h>
#define size 10
typedef struct {
int data[size];
int top;
} stack;
// 初始化栈
void zhan(stack *s) {
s->top = -1;
}
// 判断栈是否为空
int empty(stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int full(stack *s) {
return s->top == size - 1;
}
// 进栈操作
void jin(stack *s, int val) {
if (full(s)) {
printf("FULL ");
} else {
s->data[++s->top] = val;
}
}
// 出栈操作
int chu(stack *s) {
if (!empty(s)) {
printf("%d ", s->data[s->top--]);
} else {
printf("EMPTY ");
}
}
// 清空栈中剩余的所有元素
void clear(stack *s) {
while (!empty(s)) {
chu(s);
}
}
int main() {
int n, x, i;
stack s;
zhan(&s);
// 读取操作个数
scanf("%d", &n);
// 读取操作序列并执行
for (i = 0; i < n; ++i) {
scanf("%d", &x);
if (x != 0) {
jin(&s, x);
} else {
chu(&s);
}
}
printf("\n");
// 输出栈中剩余的元素
clear(&s);
return 0;
}