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;
}

代码解释

  1. 栈操作函数:

    • push(int num): 将元素 num 入栈。
    • pop(): 出栈并返回栈顶元素。
    • print_array(int *arr, int size): 打印数组内容。
  2. 深度优先搜索 (DFS):

    • dfs(int *arr, int size, int *visited, int *temp, int index): 使用 DFS 算法遍历所有可能的出栈序列。
      • visited: 记录每个元素是否已经被访问。
      • temp: 用于存储当前的出栈序列。
      • index: 当前出栈序列的索引。
  3. 主函数:

    • 初始化入栈顺序 arr 数组。
    • 调用 dfs 函数进行深度优先搜索,找出所有可能的出栈序列。

总结

本代码通过深度优先搜索算法,列举出所有可能的出栈序列。需要注意的是,代码中没有对不可能出现的序列进行判断,而是列举出所有可能的序列,然后手动排除不符合条件的序列。

希望本文能帮助您理解栈的基本操作和出栈序列的生成规则。如果您还有其他问题,请随时提出。

C语言实现栈的出栈序列:不可能出现的序列

原文地址: https://www.cveoy.top/t/topic/nKpq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录