C语言数据结构:树和图的数据表示与操作
树
数据表示
struct TreeNode { int data; struct TreeNode *left; struct TreeNode *right; };
操作
立即学习“C语言免费学习笔记(深入)”;
图
数据表示
邻接矩阵:
int adjMatrix[V][V];
邻接表:
struct AdjListNode { int dest; struct AdjListNode *next; }; struct AdjList { struct AdjListNode *head; }; struct Graph { int V; struct AdjList *array; };
操作
立即学习“C语言免费学习笔记(深入)”;
实战案例:二叉查找树
二叉查找树是一种二叉树,其数据元素在树中按顺序存储。这使得搜索、插入和删除操作非常高效。
// 创建二叉查找树 struct TreeNode *createBST(int data) { struct TreeNode *root = malloc(sizeof(struct TreeNode)); root->data = data; root->left = root->right = NULL; return root; } // 在二叉查找树中搜索元素 int searchBST(struct TreeNode *root, int data) { if (!root) { return 0; } else if (root->data == data) { return 1; } else if (data < root->data) { return searchBST(root->left, data); } else { return searchBST(root->right, data); } } // 在二叉查找树中插入元素 struct TreeNode *insertBST(struct TreeNode *root, int data) { if (!root) { return createBST(data); } else if (data < root->data) { root->left = insertBST(root->left, data); } else if (data > root->data) { root->right = insertBST(root->right, data); } return root; } // 在二叉查找树中删除元素 struct TreeNode *deleteBST(struct TreeNode *root, int data) { if (!root) { return NULL; } else if (data < root->data) { root->left = deleteBST(root->left, data); } else if (data > root->data) { root->right = deleteBST(root->right, data); } else { // 如果节点有两个子节点,则找到前驱(左子树中最右节点)或后继(右子树中最左节点) if (root->left && root->right) { int successor = root->right->data; root->data = successor; root->right = deleteBST(root->right, successor); } else if (root->left) { struct TreeNode *temp = root->left; free(root); return temp; } else if (root->right) { struct TreeNode *temp = root->right; free(root); return temp; } else { free(root); return NULL; } } return root; }
以上就是C语言数据结构:树和图的数据表示与操作的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号