From bd8cda325eee12f99a4eafd7eac5a5731c0f8829 Mon Sep 17 00:00:00 2001 From: krahets Date: Fri, 27 Oct 2023 01:13:36 +0800 Subject: [PATCH] A few improvements to the C code. --- codes/c/chapter_backtracking/n_queens.c | 17 ++++++++--------- codes/c/chapter_divide_and_conquer/build_tree.c | 4 ++-- codes/c/chapter_sorting/selection_sort.c | 2 +- codes/c/chapter_tree/binary_tree_bfs.c | 8 +++++--- codes/c/chapter_tree/binary_tree_dfs.c | 8 +++++--- 5 files changed, 21 insertions(+), 18 deletions(-) diff --git a/codes/c/chapter_backtracking/n_queens.c b/codes/c/chapter_backtracking/n_queens.c index c5078182..3ea83051 100644 --- a/codes/c/chapter_backtracking/n_queens.c +++ b/codes/c/chapter_backtracking/n_queens.c @@ -6,12 +6,11 @@ #include "../utils/common.h" -#define MAX_N 100 -#define MAX_RES 1000 +#define MAX_SIZE 100 /* 回溯算法:N 皇后 */ -void backtrack(int row, int n, char state[MAX_N][MAX_N], char ***res, int *resSize, bool cols[MAX_N], - bool diags1[2 * MAX_N - 1], bool diags2[2 * MAX_N - 1]) { +void backtrack(int row, int n, char state[MAX_SIZE][MAX_SIZE], char ***res, int *resSize, bool cols[MAX_SIZE], + bool diags1[2 * MAX_SIZE - 1], bool diags2[2 * MAX_SIZE - 1]) { // 当放置完所有行时,记录解 if (row == n) { res[*resSize] = (char **)malloc(sizeof(char *) * n); @@ -43,7 +42,7 @@ void backtrack(int row, int n, char state[MAX_N][MAX_N], char ***res, int *resSi /* 求解 N 皇后 */ char ***nQueens(int n, int *returnSize) { - char state[MAX_N][MAX_N]; + char state[MAX_SIZE][MAX_SIZE]; // 初始化 n*n 大小的棋盘,其中 'Q' 代表皇后,'#' 代表空位 for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { @@ -51,11 +50,11 @@ char ***nQueens(int n, int *returnSize) { } state[i][n] = '\0'; } - bool cols[MAX_N] = {false}; // 记录列是否有皇后 - bool diags1[2 * MAX_N - 1] = {false}; // 记录主对角线是否有皇后 - bool diags2[2 * MAX_N - 1] = {false}; // 记录副对角线是否有皇后 + bool cols[MAX_SIZE] = {false}; // 记录列是否有皇后 + bool diags1[2 * MAX_SIZE - 1] = {false}; // 记录主对角线是否有皇后 + bool diags2[2 * MAX_SIZE - 1] = {false}; // 记录副对角线是否有皇后 - char ***res = (char ***)malloc(sizeof(char **) * MAX_RES); + char ***res = (char ***)malloc(sizeof(char **) * MAX_SIZE); *returnSize = 0; backtrack(0, n, state, res, returnSize, cols, diags1, diags2); return res; diff --git a/codes/c/chapter_divide_and_conquer/build_tree.c b/codes/c/chapter_divide_and_conquer/build_tree.c index c89db2cb..ae03e4c0 100644 --- a/codes/c/chapter_divide_and_conquer/build_tree.c +++ b/codes/c/chapter_divide_and_conquer/build_tree.c @@ -7,7 +7,7 @@ #include "../utils/common.h" // 假设所有元素都小于 1000 -#define MAX_N 1000 +#define MAX_SIZE 1000 /* 构建二叉树:分治 */ TreeNode *dfs(int *preorder, int *inorderMap, int i, int l, int r, int size) { @@ -32,7 +32,7 @@ TreeNode *dfs(int *preorder, int *inorderMap, int i, int l, int r, int size) { /* 构建二叉树 */ TreeNode *buildTree(int *preorder, int preorderSize, int *inorder, int inorderSize) { // 初始化哈希表,存储 inorder 元素到索引的映射 - int *inorderMap = (int *)malloc(sizeof(int) * MAX_N); + int *inorderMap = (int *)malloc(sizeof(int) * MAX_SIZE); for (int i = 0; i < inorderSize; i++) { inorderMap[inorder[i]] = i; } diff --git a/codes/c/chapter_sorting/selection_sort.c b/codes/c/chapter_sorting/selection_sort.c index d6c05ab7..9c29b146 100644 --- a/codes/c/chapter_sorting/selection_sort.c +++ b/codes/c/chapter_sorting/selection_sort.c @@ -23,7 +23,7 @@ void selectionSort(int nums[], int n) { } } -/* 主函数 */ +/* Driver Code */ int main() { int nums[] = {4, 1, 3, 1, 5, 2}; int n = sizeof(nums) / sizeof(nums[0]); diff --git a/codes/c/chapter_tree/binary_tree_bfs.c b/codes/c/chapter_tree/binary_tree_bfs.c index e21d6d23..cd9e59ac 100644 --- a/codes/c/chapter_tree/binary_tree_bfs.c +++ b/codes/c/chapter_tree/binary_tree_bfs.c @@ -6,6 +6,8 @@ #include "../utils/common.h" +#define MAX_SIZE 100 + /* 层序遍历 */ int *levelOrder(TreeNode *root, int *size) { /* 辅助队列 */ @@ -15,14 +17,14 @@ int *levelOrder(TreeNode *root, int *size) { TreeNode **queue; /* 辅助队列 */ - queue = (TreeNode **)malloc(sizeof(TreeNode *) * MAX_NODE_SIZE); + queue = (TreeNode **)malloc(sizeof(TreeNode *) * MAX_SIZE); // 队列指针 front = 0, rear = 0; // 加入根节点 queue[rear++] = root; // 初始化一个列表,用于保存遍历序列 /* 辅助数组 */ - arr = (int *)malloc(sizeof(int) * MAX_NODE_SIZE); + arr = (int *)malloc(sizeof(int) * MAX_SIZE); // 数组指针 index = 0; while (front < rear) { @@ -54,7 +56,7 @@ int main() { // 这里借助了一个从数组直接生成二叉树的函数 int nums[] = {1, 2, 3, 4, 5, 6, 7}; int size = sizeof(nums) / sizeof(int); - TreeNode *root = arrToTree(nums, size); + TreeNode *root = arrayToTree(nums, size); printf("初始化二叉树\n"); printTree(root); diff --git a/codes/c/chapter_tree/binary_tree_dfs.c b/codes/c/chapter_tree/binary_tree_dfs.c index d82dcf5e..a972796b 100644 --- a/codes/c/chapter_tree/binary_tree_dfs.c +++ b/codes/c/chapter_tree/binary_tree_dfs.c @@ -6,7 +6,9 @@ #include "../utils/common.h" -/* 辅助数组,用于存储遍历序列 */ +#define MAX_SIZE 100 + +// 辅助数组,用于存储遍历序列 int *arr; /* 前序遍历 */ @@ -45,13 +47,13 @@ int main() { // 这里借助了一个从数组直接生成二叉树的函数 int nums[] = {1, 2, 3, 4, 5, 6, 7}; int size = sizeof(nums) / sizeof(int); - TreeNode *root = arrToTree(nums, size); + TreeNode *root = arrayToTree(nums, size); printf("初始化二叉树\n"); printTree(root); /* 前序遍历 */ // 初始化辅助数组 - arr = (int *)malloc(sizeof(int) * MAX_NODE_SIZE); + arr = (int *)malloc(sizeof(int) * MAX_SIZE); size = 0; preOrder(root, &size); printf("前序遍历的节点打印序列 = ");