C语言 1. 数据结构和ACM2023-第三章-栈-创建堆栈 - LJD 【问题描述】 堆栈的基本操作 从键盘读入n个整数,依次放入堆栈中,之后再将整数从堆栈弹出并打印。 要求使用顺序栈 【输入形式】 整数个数n n个整数(以空格分隔) 【输出形式】 逆序输出堆栈的所有元素,输出元素的个数 【样例输入】 3 1 2 3 【样例输出】 3 2 1 3
时间: 2023-06-27 12:01:31 浏览: 153
下面是 C 语言的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int top;
} Stack;
void init(Stack *s) {
s->top = -1;
}
int isEmpty(Stack *s) {
return s->top == -1;
}
int isFull(Stack *s) {
return s->top == MAXSIZE - 1;
}
void push(Stack *s, int x) {
if (isFull(s)) {
printf("Stack is full\n");
exit(1);
}
s->data[++s->top] = x;
}
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty\n");
exit(1);
}
return s->data[s->top--];
}
int main() {
Stack s;
int n, i, x;
init(&s);
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &x);
push(&s, x);
}
printf("%d ", n);
while (!isEmpty(&s)) {
printf("%d ", pop(&s));
}
printf("\n");
return 0;
}
```
代码实现的思路是:先定义一个结构体 `Stack`,里面包含一个整型数组 `data` 和一个整型变量 `top`,表示栈顶元素在数组中的位置。然后定义一些基本操作,如初始化(`init`)、判断是否为空(`isEmpty`)、判断是否为满(`isFull`)、入栈(`push`)、出栈(`pop`)等。
在主函数中,先初始化堆栈,然后从键盘读入整数个数 `n`,依次将这些整数压入堆栈中。最后逆序输出堆栈的所有元素,并输出元素的个数 `n`。
阅读全文