数据结构
Zhao.x
这个作者很懒,什么都没留下…
展开
-
选择排序(直接选择排序、堆排序)
直接选择排序直接选择排序是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。我们这里直接给出选择排序的优化,一次选出两个数据。原创 2017-07-10 16:28:05 · 304 阅读 · 0 评论 -
STL空间配置器
为什么要有空间配置器? 1.内存碎片问题(外碎片) 由于频繁分配、释放小块内存容易在堆中造成外碎片(极端情况下就是堆中空闲的内存总量满足一个请求,但是这些空闲的块都不连续,导致任何一个单独的空闲的块都无法满足这个请求)。2.频繁的分配小块内存,效率比较低。 开辟空间的时候,分配器去找一块空闲块给用户。找空闲块也是需要时间的,尤其是在外碎片比较多的情况下。原创 2017-08-02 12:54:34 · 552 阅读 · 0 评论 -
链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6
给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6原创 2017-07-25 17:12:46 · 1060 阅读 · 0 评论 -
判断一棵树是否是平衡二叉树及其时间复杂度的优化
平衡二叉树:它是一棵空树或者左右子树的高度差绝对值不超过1,并且左右两棵子树都是平衡二叉树。要判断一棵树是否是平衡二叉树,由其定义我们很容易想到通过计算出左右两棵子树的高度及其高度差来进行判断。原创 2017-07-26 15:46:36 · 2688 阅读 · 1 评论 -
二叉树的镜像
求一棵二叉树的镜像,归根结底就是交换这棵树及其每个子树的左右节点。通过递归即可简单的实现。原创 2017-07-26 16:14:04 · 226 阅读 · 0 评论 -
由前序遍历和中序遍历重建二叉树
由前序遍历和中序遍历重建二叉树原创 2017-07-30 14:12:37 · 283 阅读 · 0 评论 -
判断一棵树是否是完全二叉树
这道题可以看作是层序遍历的变形。在二叉树的层序遍历中,我们借助一个数据结构队列,根据其先进先出的性质,实现层序遍历。可以定义一个flag标志位,一旦遇到空节点,标志位生效。原创 2017-07-28 15:29:28 · 394 阅读 · 0 评论 -
时间复杂度为O(n)的排序
对数组a进行排序,要求时间复杂度为O(N) 以空间换时间,新建一个数组b,这里假设arr中最大的数字不超过100,b数组全部初始化为0;例如arr中有数据12,则在b中对应的下标位置+1原创 2017-08-06 09:48:13 · 1561 阅读 · 1 评论 -
求二叉树中两个节点的最近公共祖先
要求考虑以下三种种情况,给出解决方案,并解决: 1:二叉树每个节点有parent(三叉链) 2:二叉树是搜索二叉树。 3:就是普通二叉树。(尽可能实现时间复杂度为O(N))原创 2017-07-28 22:21:24 · 786 阅读 · 0 评论 -
二叉树
二叉树的特点1.每个节点最多有两棵子树,即二叉树中不存在度大于2的节点(分支数最大不超过2) 2.二叉树的子树有左右之分,也就是说二叉树是有序的。二叉树相关概念节原创 2017-07-23 10:55:43 · 341 阅读 · 0 评论 -
二叉树的非递归遍历
二叉树递归遍历的时候,将其分为根、左子树、右子树三个部分。其非递归遍历,也是分为三个部分,通过数据结构“栈”的入栈出栈操作以及其先入后出的特性,实现其遍历原创 2017-07-23 12:54:30 · 446 阅读 · 0 评论 -
二叉树的基本操作
二叉树的基本操作多是由递归来实现的,包括其创建、遍历等。 根据其结构,分为根、左子树、右子树来进行相应的操作。原创 2017-07-23 12:49:04 · 279 阅读 · 0 评论 -
交换排序——冒泡排序
冒泡排序第一趟冒泡将最大的数冒在最后,第二趟将次大的数冒上去,以此类推。原创 2017-07-10 17:23:07 · 227 阅读 · 0 评论 -
交换排序——快速排序
void QuickSort(int *arr, int begin, int end){ assert(arr); int div = PartSort1(arr, begin, end); if (div - 1>begin) PartSort1(arr, begin, div - 1); if (div + 1<end)原创 2017-07-11 18:38:32 · 451 阅读 · 0 评论 -
归并排序
基本思想: 它将要排序的序列分成两个长度相等的子序列,为每一个子序列进行排序,然后再将子序列合并成一个有序的序列。合并两个子序列的过程称为两路归并。原创 2017-07-13 13:38:41 · 252 阅读 · 0 评论 -
链表面试题:判断两个链表是否相交
判断两个链表是否相交,若相交,求交点。(假设链表不带环)判断两个链表是否相交,若相交,求交点。(假设链表可能带环)原创 2017-07-30 20:29:26 · 348 阅读 · 0 评论 -
将二叉搜索树转换成一个排序的双向链表
搜索树每一棵子树的左节点都比根节点小,每一个右节点都比根节点大。 根据其特性,我们可以通过中序遍历线索化的相关变形,来改变指针指向,实现变形。原创 2017-07-30 14:07:03 · 388 阅读 · 0 评论 -
插入排序(直接插入排序、希尔排序)
直接插入排序直接插入排序是将第一个数当作有序区,其后的数据进行排序,依次插入有序区。原创 2017-07-10 10:44:22 · 331 阅读 · 0 评论 -
判断一颗二叉树是是否是另一颗树的子树
判断一颗二叉树是是否是另一颗树的子树原创 2017-07-31 10:26:41 · 422 阅读 · 0 评论 -
判断一个节点是否在一棵二叉树中
使用前序遍历判断原创 2017-07-31 10:30:32 · 795 阅读 · 1 评论 -
删除小写字母字符串中重复字符
删除小写字母字符串中重复元素原创 2017-08-06 22:07:36 · 982 阅读 · 0 评论
分享