用c语言设计,给定一个初始为空的栈和一系列压栈、弹栈操作,请编写程序输出每次弹栈的元素。栈的元素值均为整数
时间: 2024-10-10 16:06:36 浏览: 104
在 C 语言中,设计一个简单的栈结构并实现推入和弹出操作,可以使用数组作为底层存储,同时维护一个 top 指针来追踪栈顶位置。这里是一个基本的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 栈的最大容量
// 定义栈结构体
typedef struct {
int data[MAX_SIZE];
int top; // 栈顶指针
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
// 将元素 push 到栈顶
void push(Stack *s, int value) {
if (isEmpty(s)) {
s->top = 0;
} else {
s->data[++s->top] = value;
}
}
// 弹出栈顶元素并返回其值
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Error: Stack is empty.\n");
return -1; // 返回错误码
} else {
return s->data[s->top--]; // 减一因为 top 已经指向下一个空位
}
}
int main() {
Stack stack;
init(&stack);
// 执行一系列压栈和弹栈操作,假设输入的操作序列
int op_sequence[] = {5, 2, 7, 1, 9, 0, 6};
int num_operations = sizeof(op_sequence) / sizeof(op_sequence[0]);
for (int i = 0; i < num_operations; i++) {
if (op_sequence[i] == 0) { // 如果是压栈操作
push(&stack, op_sequence[i + 1]);
printf("Pushed %d onto the stack.\n", op_sequence[i + 1]);
} else { // 如果是弹栈操作
int popped_value = pop(&stack);
if (popped_value != -1)
printf("Popped %d from the stack.\n", popped_value);
else
printf("Skipped operation as there was nothing to pop.\n");
}
i++; // 更新索引以便处理下一次操作
}
return 0;
}
```
在这个例子中,我们首先初始化一个栈,然后遍历给定的操作序列。如果是压栈操作,我们就将数字放入栈;如果是弹栈操作,我们就弹出栈顶元素并打印出来。
阅读全文