这道题不要用指针,就用数组完成
时间: 2024-10-19 10:16:32 浏览: 10
c语言编程题之双指针有序数组的平方.zip
理解了,这是一道要求使用数组而不是指针来实现堆栈功能的题目。以下是仅使用数组的C语言版本:
```c
#include <stdio.h>
#include <stdbool.h>
#define SIZE 5 // 定义堆栈最大容量
typedef struct {
int data[SIZE]; // 使用数组存储数据
int top; // 栈顶索引
} Stack;
// 初始化堆栈
void stack_init(Stack* s) {
s->top = -1;
}
// 检查堆栈是否为空
bool is_empty(const Stack* s) {
return s->top == -1;
}
// 将元素压入堆栈
void push(Stack* s, int val) {
if (s->top < SIZE - 1) { // 防止溢出
s->data[++s->top] = val;
} else {
printf("堆栈已满,无法添加更多元素。\n");
}
}
// 弹出堆栈顶部元素(若存在)
int pop(Stack* s) {
if (!is_empty(s)) {
int popped_val = s->data[s->top];
s->top--;
return popped_val;
} else {
printf("堆栈为空,无法弹出元素。\n");
return -1;
}
}
// 获取堆栈顶部元素(但不弹出)
int peek(const Stack* s) {
if (!is_empty(s)) {
return s->data[s->top];
} else {
printf("堆栈为空,没有顶部元素。\n");
return -1;
}
}
int main() {
Stack myStack;
stack_init(&myStack);
while (true) {
int input;
scanf("%d", &input);
if (input > 0)
push(&myStack, input);
else if (input != 0)
printf("堆栈顶部元素是:%d\n", peek(&myStack));
else if (!is_empty(&myStack))
printf("刚弹出了堆栈顶部的元素:%d\n", pop(&myStack));
}
return 0;
}
```
在这个版本中,我们依然使用数组`data`来存储堆栈的数据,只是不再需要动态调整堆栈大小,而是预设了一个固定大小。同样地,我们在`push`, `pop`, 和 `peek` 函数中也考虑了数组边界情况。
阅读全文