请编写C程序,对任意给定的 n,输出 1,2 ,…,n 的所有出栈顺序。
时间: 2024-09-19 19:06:40 浏览: 25
顺序栈、链栈将10进制转为2、8、16进制源码
5星 · 资源好评率100%
在C语言中,要实现一个栈数据结构并生成从1到n的所有可能的出栈顺序,我们可以使用递归的方式来模拟栈的操作。下面是一个简单的C程序示例,它使用一个数组来表示栈,并通过递归来生成所有的出栈序列:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100
void print_sequence(int* stack, int top, int n) {
if (top == -1) { // 栈空,结束递归
return;
}
printf("%d ", stack[top]); // 输出当前元素
// 将剩余的元素也加入栈中,继续下一层递归
print_sequence(stack, top - 1, n);
}
int main() {
int n;
printf("Enter a number between 1 and %d: ", MAX_N);
scanf("%d", &n);
if (n > MAX_N) {
printf("Error! Number is too large.\n");
return 1;
}
int* stack = (int*)malloc(n * sizeof(int)); // 初始化栈
for (int i = 1; i <= n; ++i) {
stack[i - 1] = i;
}
stack[n] = -1; // 栈顶指针初始化为-1
print_sequence(stack, n, n); // 开始生成序列
free(stack); // 释放内存
return 0;
}
```
在这个程序中,`print_sequence`函数会先检查栈是否为空,然后依次输出栈顶元素并将栈顶指针减一,接着继续递归调用自身。当栈完全出完后,递归停止。
阅读全文