![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
学战到底
这个作者很懒,什么都没留下…
展开
-
二叉树的基本性质及证明
性质1:一棵非空二叉树的第i层上最多有2^(i-1)个结点,(i>=1)。性质2:一棵深度为k的二叉树中,最多具有2^k-1个结点,最少有k个结点。性质3:对于一棵非空的二叉树,度为0的结点(即叶子结点)总比度为1的结点多一个,即叶子结点数为n0,度为2的结点数为n2,则有n0=n2+1。证明:如果n0表示度为0(即叶子结点)的结点数,用n1表示度为1的结点数,n2表示度为2的结点数,原创 2016-07-15 00:21:33 · 9965 阅读 · 0 评论 -
排序算法之快排
快速排序是常见排序算法中速度最快的,最好的和平均时间复杂度为O(nlogn),空间复杂度为O(nlogn),是一个不稳定的排序方法。其实现过程如下:1、取出第开始的元素作为测试值,先从右侧开始遍历;2、将测试值与右侧值比较,右侧值若大于等于测试值,则继续左移再与测试值比较。若右侧遍历到测试值的下一个元素仍找不到小于测试值的元素,则证明测试值为当前序列中最小的元素,其位置不变,跳过步骤3原创 2016-07-08 12:03:08 · 552 阅读 · 0 评论 -
判断两个链表是否相交并找出交点
问题描述:一个比较经典的问题,判断两个链表是否相交,如果相交找出他们的交点。思路:1、碰到这个问题,第一印象是采用hash来判断,将两个链表的节点进行hash,然后判断出节点,这种想法当然是可以的。2、当然采用暴力的方法也是可以的,遍历两个链表,在遍历的过程中进行比较,看节点是否相同。3、第三种思路是比较奇特的,在编程之美上看到的。先遍历第一个链表到转载 2016-06-29 20:47:23 · 542 阅读 · 0 评论 -
Java的堆和栈
在Java语言中,堆和栈都是内存中存放数据的地方。变量分为基本数据类型和引用类型,基本数据类型的变量(如int、short、long、byte、float、double、boolean以及char)以及对象的引用变量,其内存都分配在栈上,变量出了作用域就会自动释放。而引用类型的变量,其内存分配在堆上或者常量池(例如字符串常量和基本数据类型常量)中,需要通过new等方式创建。具体而言,栈内存主要原创 2016-06-20 17:50:18 · 1656 阅读 · 0 评论 -
排序算法的稳定与不稳定
首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。 其次,说一下稳定性的好处。排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。基数排序就是这样,先按低位排转载 2016-08-08 20:51:15 · 498 阅读 · 0 评论 -
计数排序、桶排序和基数排序
转自:计数排序、桶排序、基数排序,保存在此以学习。计数排序当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存。例如:计数排序是用来排转载 2016-09-11 10:45:28 · 486 阅读 · 0 评论 -
堆和栈的区别(转过无数次的文章)
转自:堆和栈的区别,保存在此以学习。一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回转载 2016-09-18 11:23:45 · 491 阅读 · 0 评论