C语言实现栈的出栈序列:不可能出现的序列
C语言实现栈的出栈序列:不可能出现的序列
本文将使用 C 语言代码来解决一个经典的栈数据结构问题:给定入栈顺序为 'A'、'B'、'C'、'D',找出所有不可能出现的出栈序列。
代码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 10
int stack[MAX_SIZE];
int top = -1;
void push(int num) {
if (top == MAX_SIZE - 1) {
printf("Stack is full!\n");
return;
}
stack[++top] = num;
}
int pop() {
if (top == -1) {
printf("Stack is empty!\n");
return -1;
}
int temp = stack[top--];
return temp;
}
void print_array(int *arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
void dfs(int *arr, int size, int *visited, int *temp, int index) {
if (index == size) {
print_array(temp, size);
return;
}
for (int i = 0; i < size; i++) {
if (!visited[i]) {
visited[i] = 1;
push(arr[i]);
temp[index] = pop();
dfs(arr, size, visited, temp, index + 1);
push(temp[index]);
visited[i] = 0;
}
}
}
int main() {
int arr[] = {'A', 'B', 'C', 'D'};
int size = sizeof(arr) / sizeof(arr[0]);
int visited[size];
memset(visited, 0, sizeof(visited));
int temp[size];
dfs(arr, size, visited, temp, 0);
return 0;
}
代码解释
-
栈操作函数:
push(int num): 将元素num入栈。pop(): 出栈并返回栈顶元素。print_array(int *arr, int size): 打印数组内容。
-
深度优先搜索 (DFS):
dfs(int *arr, int size, int *visited, int *temp, int index): 使用 DFS 算法遍历所有可能的出栈序列。visited: 记录每个元素是否已经被访问。temp: 用于存储当前的出栈序列。index: 当前出栈序列的索引。
-
主函数:
- 初始化入栈顺序
arr数组。 - 调用
dfs函数进行深度优先搜索,找出所有可能的出栈序列。
- 初始化入栈顺序
总结
本代码通过深度优先搜索算法,列举出所有可能的出栈序列。需要注意的是,代码中没有对不可能出现的序列进行判断,而是列举出所有可能的序列,然后手动排除不符合条件的序列。
希望本文能帮助您理解栈的基本操作和出栈序列的生成规则。如果您还有其他问题,请随时提出。
原文地址: https://www.cveoy.top/t/topic/nKpq 著作权归作者所有。请勿转载和采集!