随笔分类 - 数据结构
c/c++ 实现一般的数据结构
摘要:1 #include<iostream> 2 #include<time.h> 3 #include<stdlib.h> 4 #include<sys/timeb.h> 5 using namespace std; 6 7 const int Max = 9999; 8 9 void swap(in
阅读全文
摘要:必须要明白的: 分治法+挖坑填数; 分治法:大问题分解成各个小问题,对小问题求解,使得大问题得以解决。 1 #include<iostream> 2 #include<time.h> 3 #include<stdlib.h> 4 #include<sys/timeb.h> 5 using names
阅读全文
摘要:【1】希尔排序可以说是对插入排序的优化,所以又可以称希尔排序为分组插入排序; 【2】插入排序速度快是在数据量较小且基本有序俩个条件下有效,如果数据过长且基本无序,采用希尔排序将其分解成若干组,分别做插入排序。 核心代码: 1 void ShellSort(int* arr, int length)
阅读全文
摘要:做法;将无序序列插入到有序序列中; 结论:插入排序在什么情况下效率高: 【1】如果序列基本有序的情况下【2】插入排序时候数据序列比较少。 例子: 3 1 4 2 5 共五个数字. length=5; 【1】第一步先将序列分为有序序列和无序序列 有序:3 无序:1 4 2 5 【2】将无序序列插入到有
阅读全文
摘要:冒泡缺点是每次进入if语句后紧跟着就会发生swap交换,在这个交换的过程中会消耗时间,选择排序在每一轮外循环内最多进行一次swap循环; 选择排序 和 优化版的冒泡比较: 1 #include<iostream> 2 #include<time.h> 3 #include<stdlib.h> 4 #
阅读全文
摘要:参考上一篇冒泡排序后 然后稍微改了一下,速度提高的不多。 1 //在传统冒泡中,每一轮外循环都会导致将该循环中最大的数沉底,会导致内循环从0到最后一个数之间 2 //每俩个数俩俩比较,如果在某一趟外循环中,内循环的Swap()函数没有执行过一次,那就代表此时从前 3 //到最后已经是有序的了,此时直
阅读全文
摘要:经典冒泡排序: 思想:俩俩比较,如果是实现升序排序,则俩俩排序的目的就是将其中大的数依次往后挪,或者是将较小的数往前挪; 每一趟外循环的目的就是将这一趟中最大的数放在数组的最后面,或者是将最小的数放在最前面。 例如:3 4 2 5 0 1 六个数,我们采用大数沉底的方法。 【1】先说外循环:即趟数
阅读全文
摘要:思考:根据中序遍历的结果能创建一颗树吗? 例如:中序遍历结果为:12345 ;这个123456能确定一颗树吗? 答案:不能。 所以如何才能确定一棵树? 结论:【1】通过中序遍历和先序遍历可以确定一个树; 【2】通过中序遍历和后续遍历可以确定一棵树; 【3】通过先序遍历和后续遍历确定不了一棵树。 注意
阅读全文
摘要:条件:【1】需要将原来树的节点重新封装,封装后的结构中具有对原来树节点的一个flag描述; 【2】利用STL中的栈容器实现对节点的入栈以及出栈操作; 拿下图为例: 注意:该段代码实现的是前序遍历,如果想要实现中序/后序遍历 只需将第48-49行代码与前俩行代码调换位置即可。该段代码没有对new过的节
阅读全文
摘要:使用该图例:并将以先序遍历的结果打印 原二叉树和拷贝后的二叉树 该图例先序遍历结果为:A B C D E F G H 直接上代码: 1 #include<iostream> 2 using namespace std; 3 4 //二叉树节点 5 struct BinaryNode 6 { 7 ch
阅读全文
摘要:1 #include<iostream> 2 using namespace std; 3 4 //二叉树节点 5 struct BinaryNode 6 { 7 char ch; 8 BinaryNode* lchild; 9 BinaryNode* rchild; 10 }; 11 int He
阅读全文
摘要:叶子节点:指的是没有左右孩子节点的节点。 图(1)叶子节点数为3 1 #include<iostream> 2 using namespace std; 3 4 //二叉树节点 5 struct BinaryNode 6 { 7 char ch; 8 BinaryNode* lchild; 9 Bi
阅读全文
摘要:【先序遍历】DLR:先根再左再右:A->B->C-D->E->F->G->H [中序遍历] LDR:先左再根再右:B->D->C->E->A->F->H->G 【后序遍历】LRD:先左再右再中:D->E->C->B->H->G->F->A 图(1) 【先序遍历】DLR:先根再左再右:A->B->D-
阅读全文
摘要:【1】定义: n(n>=0)个节点的有限集合,由一个跟节点以及俩颗互不相交的、分别成为左子树和右子树的二叉树组成。 【2】逻辑结构 一对二 【3】基本特征 每个节点最多有俩颗子树(不存在度大于2的节点) 左子树和右子树的次序不能颠倒(有序树) 【4】二叉树的性质 1. 在二叉树的第i层上至多有2i-
阅读全文
摘要:【1】树的结构特点 非线性结构,有一个直接前驱,但可能有多个直接后继; 树的定义具有递归性,树中还有树; 树可以为空,即节点个数为0; 通过左孩子右兄弟表示法能够将一个非二叉树转化为二叉树。 【2】树的存储 顺序存储 链式存储
阅读全文

浙公网安备 33010602011771号