用C语言实现一个堆栈,并打印数组[1, 2, 3, 4]按顺序进栈后所有可能的出栈顺序。
时间: 2024-10-18 21:07:48 浏览: 41
在C语言中,我们可以使用数组作为底层数据结构来实现一个简单的堆栈。这里我们创建一个大小固定的堆栈,当堆栈满时不再接受新的元素。以下是堆栈的基本结构和入栈、出栈操作:
```c
#include <stdio.h>
#define MAX_SIZE 5
typedef struct {
int data[MAX_SIZE];
int top; // 堆栈顶指针
} Stack;
// 函数声明
void push(Stack *stack, int value);
int pop(Stack *stack);
bool is_empty(Stack *stack);
// 实现函数
void push(Stack *stack, int value) {
if (stack->top == MAX_SIZE - 1) {
printf("Stack overflow.\n");
return;
}
stack->data[stack->top++] = value;
printf("Pushed %d onto the stack.\n", value);
}
int pop(Stack *stack) {
if (is_empty(stack)) {
printf("Stack underflow.\n");
return -1; // 返回特殊值表示空栈
}
int popped_value = stack->data[stack->top--];
printf("Popped %d from the stack.\n", popped_value);
return popped_value;
}
bool is_empty(Stack *stack) {
return stack->top == 0;
}
// 使用示例
int main() {
Stack my_stack;
my_stack.top = -1; // 初始化为空
// 入栈 [1, 2, 3, 4]
push(&my_stack, 1);
push(&my_stack, 2);
push(&my_stack, 3);
push(&my_stack, 4);
// 打印所有可能的出栈顺序
while (!is_empty(&my_stack)) {
printf("%d ", pop(&my_stack));
}
return 0;
}
```
运行这个程序,你会看到所有的可能出栈顺序,因为每次从堆栈顶部弹出元素后,都会继续尝试弹出直到堆栈变空。
阅读全文