数据结构
Junior Chestnut
这个作者很懒,什么都没留下…
展开
-
二叉树的后序遍历(C++迭代版)
* Definition for a binary tree node. struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} TreeNode.原创 2021-09-15 16:02:22 · 320 阅读 · 0 评论 -
C语言-插入排序
#pragma once#include <iostream>void Swap(int*a, int* b){ int tmp = *a; *a = *b; *b = tmp;}// 主要是j 和 j - 1 同步变化, 遇到大的直接 break;void insertSort(int arr[], int N){ for (int i = 1; i < N; i++) { for (int j = i; j > 0;) // i来了就代表j有了最大原创 2021-09-11 12:16:17 · 76 阅读 · 0 评论 -
堆排序(升序)
【注】: 此处没有设置哨兵#pragma once#include <iostream>#include <vector>using namespace std;// 堆排序步骤: /* 1. 把数组表示成完全二叉树......画出图(草纸上) 2. 把完全二叉树调成最大堆或者最小堆 3. 取根节点和最后一个叶节点 交换,删除根节点,重新调整为最大堆或者最小堆*/// 代码关键/* 1. 调整堆,从最后一个非叶节点开始: 下标为: 数组长度/2 -1 2原创 2021-09-10 12:00:55 · 653 阅读 · 0 评论 -
map和unordered_map
一、map1. 使用map 要先包含头文件 #include <map>;2. map 内部的实现原理: map内部实现了一个红黑树,该结构具有自动排序的功能,因此map内部的所有元素都是有序的, 红黑树的每一个节点都代表着map的一个元素, 因此,对于map进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行这样的操作, 故红黑树的效率决定了map的效率。3. 优点: 有序性,这是map结构最大的优点,其元素的有序性在很多应用中都会简化很多的操作。 红黑树,内部实现一个原创 2021-09-07 22:43:55 · 117 阅读 · 0 评论 -
最小生成树
Dijkstra算法是用来解决: 有权图的单源最短路径问题Prim算法是:根据网图来创造一个“最小生成树”。原创 2021-08-09 16:07:10 · 70 阅读 · 0 评论 -
深度优先搜索(DFS)和广度优先搜索(BFS)
都是遍历图,为什么需要两种搜索方式?答:因为两种搜索的路径不一样…例子:如上图,在使用深度优先遍历时,假定剑客从左上角进来,到绿色的框格里离开。黑框视为阻隔,白框视为联通,即存在边(Edge)。对于深度优先遍历来说,你要给他规定一种规律,让他一条路走到底,执行递归。规定:剑客会以自己为中心,以上侧为第一个,顺时针,遍历周围的8个格子。结果如下:/**************************************************************************.原创 2021-08-06 23:14:16 · 278 阅读 · 2 评论 -
最大堆的创建、插入、删除
最大堆,目的:根据优先级进行插入和删除操作;定义:2.1 完全二叉树(保持效率为Log2N); 2.2 有序性(最大的值永远在根处,到达终端节点的路径上有序)原创 2021-08-04 21:41:40 · 152 阅读 · 0 评论 -
二元搜索树
一、对二叉搜索树 进行查找操作第一种: 元素查找注解1. 显然,查找的效率取决于树的高度第二种:最大值查找注解2. 根据二叉搜索树的特点,最大值一定在右子树上;最小值一定在左子树上。3. 上图为,查找最大值的递归和循环程序,查找最小值同理。二、二叉搜索树的插入操作注解4. 先于根节点比较,如果大于根节点,就放在右子树,小于放在左子树;5. 继续跟右子树比较,小于,放在左子树...放在33的右子树上。6. 最后需要在某个节点插入数据,所以必须记住这个节点的位置插入代码:原创 2021-06-08 11:33:31 · 543 阅读 · 0 评论 -
二叉树的表示、同构
一、二叉树的表示原创 2021-06-08 09:29:39 · 118 阅读 · 0 评论 -
二叉树先序中序举例
熟悉二叉树遍历的过程。如何执行的?见下图原创 2021-06-07 22:02:49 · 117 阅读 · 0 评论 -
二叉树理解记录
1. 二叉树的创建数组;‘#’ 代表nullptrint arr[] = { 1, 2, 3, '#', '#', 4, 40, '#', '#', '#', 5, 6, '#', '#', '#' };2. 创建二叉树的代码--先序遍历的步骤相同。template<typename T>BinTreeNode<T>* BinTree<T>::CreateBinTree(T * dataArr_, size_t dataArrLength, const T &a原创 2021-06-07 19:57:35 · 62 阅读 · 0 评论 -
C++二叉树实现
1.0 你怎么对二叉树进行遍历,你就可以使用这种遍历方式来创建二叉树。 因此二叉树的创建方式有很多种,我选择的是层次创建(与其相对应的是层次遍历, 也叫广度优先遍历)。2.0 二叉树的销毁也可以使用其特定的遍历方式进行销毁。3.0 因为层次遍历的过程很适合队列这种结构,所以可以使用queue来实现该遍历过程。...原创 2021-04-17 18:59:00 · 449 阅读 · 0 评论 -
树
文章预览:一、二叉树(1) 先序遍历一般树一、二叉树1.0 二叉树的存储用以下形式的链表就可以。【注】先序、中序、后序是以根节点的print顺序来划分的。【注】先序、中序、后序三次遍历路径是一样的,只是print的地方不同,也就是想要操作数据的地方不同。(1) 先序遍历非递归先序遍历:递归代码:void InOrderTraversal(BinTree BT){ if(BT) { std::cout<<BT->left->value; InOrd原创 2021-04-16 23:03:08 · 66 阅读 · 0 评论 -
连续两次递归调用的执行顺序
// 双递归函数void rec(int M) // 在这里拷贝实参,进行入栈操作{ //为了区分这两个递归,分别为它们取个别名好了 if (M > 0) { rec(M - 1);//rec1 cout << "rec1 后面一句, 此时M = " << M << endl; rec(M - 10);//rec2 cout << "rec2 后面一句, 此时M = " << M << endl; }原创 2021-03-26 16:59:07 · 2461 阅读 · 3 评论 -
求最大子列和--时间复杂度
问题:有一个序列{A1,A2,A3,…An}, 求所有子列的和中,最大的和。(1)时间复杂度为T(N^3)/********************************************************/ 求最大子列和,时间复杂度为T(N^3) --- 堪称最复杂的一种遍历********************************************************/#include <iostream>#include <stdlib.转载 2021-03-26 10:32:54 · 134 阅读 · 0 评论 -
C++用单链表实现栈
一、单链表的尾插法和头插法1.1 空链表通常会定义一个空链表,作为开始。然后再使用头插法或者尾插法。Node* head = new Node;head->next = nullptr;二、用尾插法写栈#pragma oncetypedef struct Node_{ int value; struct Node_* next;}Node;class Stack{private: Node* top;public: Stack() = default; ~S原创 2021-03-25 15:46:49 · 449 阅读 · 0 评论