C++数据结构学习笔记

zxl19 2022-12-28

我的C++数据结构学习笔记。

整理中

链表

链表实现

struct ListNode {
  int val;                                                 // 当前节点的值
  ListNode* next;                                          // 指向下一个节点的指针
  ListNode() : val(0), next(nullptr) {}                    // 构造函数,初始化当前结点值为0,指针为空
  ListNode(int x) : val(x), next(nullptr) {}               // 构造函数,初始化当前结点值为x,指针为空
  ListNode(int x, ListNode* next) : val(x), next(next) {}  // 构造函数,初始化当前结点值为x,指针非空
};

二叉树

二叉树实现

struct TreeNode {
  int val;                                               // 当前节点的值
  TreeNode* left;                                        // 左指针
  TreeNode* right;                                       // 右指针
  TreeNode() : val(0), left(nullptr), right(nullptr) {}  // 构造函数,初始化当前结点值为0,左右指针为空
  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}  // 构造函数,初始化当前结点值为x,左右指针为空
  TreeNode(int x, TreeNode* left, TreeNode* right)
      : val(x), left(left), right(right) {}  // 构造函数,初始化当前结点值为x,左右指针非空
};

遍历方式

  1. 前序遍历(DLR):根在前,从左往右,一棵树的根永远在左子树前面,左子树又永远在右子树前面;
  2. 中序遍历(LDR):根在中,从左往右,一棵树的左子树永远在根前面,根永远在右子树前面;
  3. 后序遍历(LRD):根在后,从左往右,一棵树的左子树永远在右子树前面,右子树永远在根前面;
// 前序遍历
void pre_order(TreeNode* Node) {
  if (Node == nullptr) return;
  std::cout << "Node Data: " << Node->data << std::endl;
  pre_order(Node->left);
  pre_order(Node->right);
}
// 中序遍历
void middle_order(TreeNode* Node) {
  if (Node == nullptr) return;
  middle_order(Node->left);
  std::cout << "Node Data: " << Node->data << std::endl;
  middle_order(Node->right);
}
// 后序遍历
void post_order(TreeNode* Node) {
  if (Node == nullptr) return;
  post_order(Node->left);
  post_order(Node->right);
  std::cout << "Node Data: " << Node->data << std::endl;
}

资料

教程

  1. 数据结构(C++语言版)
  2. 数据结构-C语言中文网
  3. Hello 算法
  4. mikeizbicki/cmc-csci046

GitHub

  1. krahets/hello-algo
  2. cp-algorithms/cp-algorithms
  3. mandliya/algorithms_and_data_structures
  4. huaxz1986/cplusplus-_Implementation_Of_Introduction_to_Algorithms
  5. rachitiitr/DataStructures-Algorithms
  6. ShahjalalShohag/code-library
  7. jainaman224/Algo_Ds_Notes
  8. sachuverma/DataStructures-Algorithms
  9. br7roy/THU-DS
  10. HuyuYasumi/DSA_CPP_Deng

参考

  1. 力扣LeetCode
  2. 链表-腾讯云
  3. 二叉树-CSDN博客