- 博客(18)
- 资源 (12)
- 收藏
- 关注
原创 二叉搜索树
一、定义和性质:1、定义二叉查找树(Binary Search Tree),又被称为二叉搜索树。 它是特殊的二叉树: 对于二叉树,假设x为二叉树中的任意一个结点,x节点包含关键字key,节点x的key值记为key[x]。如果y是x的左子树中的一个结点,则key[y] <= key[x];如果y是x的右子树的一个结点,则key[y] >= key[x]。那么,这棵树就是二叉查找树。2、性质二叉搜
2015-09-22 21:01:24 386
原创 二叉树的遍历(递归和非递归)
二叉树的遍历1、前序遍历(1)递归的前序遍历前序遍历按照“根结点-左孩子-右孩子”的顺序进行访问。//前序遍历,递归实现void D_PreOrder(BinaryTreeNode *pRoot){ if (pRoot != NULL) { cout << pRoot->data << " "; D_PreOrder(pRoot->left);
2015-09-21 16:02:17 363
原创 数据结构之树
一、概念:树:是一种重要的非线性数据结构,它是数据元素(在树中称为结点)按分支关系组织起来的结构。 度:节点的子树个数; 树的度:树中任意节点的度的最大值; 兄弟:两节点的parent相同; 层:根在第一层,以此类推; 高度:叶子节点的高度为1,根节点高度最高; 有序树:树中各个节点是有次序的; 森林:多个树组成;二叉树:二叉树是每个节点最多有两个子树
2015-09-21 15:28:14 400
原创 数据结构之链表
一、定义链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分: 1、存储数据元素的数据域, 2、下一个结点地址的指针域。相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多
2015-09-19 20:46:34 603
原创 数据结构之队列
一、队列的介绍队列(Queue),是一种线性存储结构。它有以下几个特点: 1、队列中数据是按照”先进先出(FIFO, First-In-First-Out)”方式进出队列的。 2、队列只允许在”队首”进行删除操作,而在”队尾”进行插入操作。 队列通常包括的两种操作:入队列 和 出队列。1. 队列的示意图队列中有10,20,30共3个数据。2. 出队列出队列前:队首是10,队尾是30。
2015-09-19 10:17:20 449
原创 数据结构之栈
栈是应用最广泛的数据结构之一,很有必要对其进行一些总结。栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top),它是后进先出(LIFO)的。对栈的基本操作只有push(进栈)和pop(出栈)两种,前者相当于插入,后者相当于删除最后的元素。栈本质上是一种受限制的表,所以可以使用任何一种表的形式来实现它,最常用的是使用链表和数组。 使用链表的特点:
2015-09-17 17:07:15 370
原创 选择算法
1. 概念顺序统计量:在一个由n个元素组成的集合中,第i个顺序统计量是指该集合中第i小的元素。例如最小值是第1个顺序统计量,最大值是第n个顺序统计量。中位数:一般来说,中位数是指它所在集合的“中间元素”,当n为奇数时,中位数是唯一的,出现位置为n/2;当n为偶数时候,存在两个中位数,位置分别为n/2(上中位数)和n/2+1(下中位数)。选择问题: 输入:一个包含n个(不同的)数的集合A和一个数i
2015-09-15 09:54:52 529
原创 快速排序
一、快速排序的介绍快速排序是一种排序算法,对包含n个数的输入数组,最坏的情况运行时间为Θ(n2)[Θ 读作theta]。虽然这个最坏情况的运行时间比较差,但快速排序通常是用于排序的最佳的实用选择。这是因为其平均情况下的性能相当好:期望的运行时间为 Θ(nlgn),且Θ(nlgn)记号中隐含的常数因子很小。另外,它还能够进行就地排序,在虚拟内存环境中也能很好的工作。和归并排序一样,快速排序也是基于分治
2015-09-14 20:42:01 3420
原创 桶排序
桶排序是另外一种以O(n)或者接近O(n)的复杂度排序的算法. 它假设输入的待排序元素是等可能的落在等间隔的值区间内.一个长度为N的数组使用桶排序, 需要长度为N的辅助数组. 等间隔的区间称为桶, 每个桶内落在该区间的元素. 桶排序是基数排序的一种归纳结果算法的主要思想: 待排序数组A[1…n]内的元素是随机分布在[0,1)区间内的的浮点数.辅助排序数组B[0….n-1]的每一个元素都连接一个链表.
2015-09-14 16:03:34 354
转载 基数排序2
基数排序编程论到极致,核心非代码,即思想。所以,真正的编程高手同时是思想独到及富有智慧(注意与聪明区别)的人。每一个算法都是一种智慧的凝聚或萃取,值得我们学习从而提高自己,开拓思路,更重要的是转换思维角度。其实,我们大多数人都活在“默认状态”下。没有发觉自己的独特可设置选项—–思想。言归正传(呵呵!恢复默认状态),以下学习基数排序。【1】基数排序以前研究的各种排序算法,都是通过比较数据大小的方法对欲
2015-09-14 14:36:57 439
原创 基数排序
基数排序(radix sort)则是属于“分配式排序”(distribution sort),基数排序法又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的比较性排
2015-09-12 23:11:25 734
原创 计数排序
计数排序是一个类似于桶排序的排序算法,其优势是对已知数量范围的数组进行排序。它创建一个长度为这个数据范围的数组C,C中每个元素记录要排序数组中对应记录的出现个数。这个算法于1954年由 Harold H. Seward 提出。计数排序是一种算法复杂度 O(n) 的排序方法,适合于小范围集合的排序。比如100万学生参加高考,我们想对这100万学生的数学成绩(假设分数为0到100)做个排序。我们如何设计
2015-09-12 22:44:33 638
原创 Strassen矩阵乘法
有用资料此链接Strassen算法的原理讲解的更加透彻http://www.ituring.com.cn/article/17978矩阵乘法的定义矩阵乘法,A*B=C,其中:那么乘法的定义呢??A矩阵的一行与B矩阵的一列点乘和为C的一个元素。用图形表示是最直观的,其定义就如下图:基本矩阵乘法那么由上面图中的公式,我们很容易得到基本矩阵相乘的伪代码:for i = 1 to col // row
2015-09-12 11:33:09 1685
原创 斐波那契数列
题目一:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。斐波那契数列数列的定义如下: f[n]=f[n-1]+f[n-2],且f[1]=1,f[2]=1。除了面试官直接要求编程实现斐波那契数列之外,还有不少面试题可以看成是斐波那契数列的应用,比如: 题目二:一只青蛙可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级台阶总共有多少种跳法。首先我们考虑最简单的情况
2015-09-11 17:32:10 847
原创 乘方算法
一般的乘方算法,时间复杂度是O(n)非递归方式int Power(int num, int exponent){ int result = 1; while (exponent) { if (exponent & 1) { result *= num; } num *= num; exponen
2015-09-11 16:53:32 1495
原创 二分查找
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上
2015-09-11 13:50:55 346
原创 归并排序
1、算法基本思路 设两个有序的子文件(相当于输入堆)放在同一向量中相邻的位置上:R[low..m],R[m+1..high],先将它们合并到一个局部的暂存向量R1(相当于输出堆)中,待合并完成后将R1复制回R[low..high]中。合并过程: 合并过程中,设置i,j和p三个指针,其初值分别指向这三个记录区的起始位置。合并时依次比较R[i]和R[j]的关键字,取关键字较小的记录复制到R1[p
2015-09-11 11:31:53 331
原创 插入排序
插入排序的基本思想:每次从未排序的序列中取一个元素,插入到已经排好序的序列的合适位置。小规模输入来说,插入排序速度比较快。许多复杂的排序法,在规模较小的情况下,都使用插入排序法来进行排序。数组的插入排序算法如下:#include<iostream>using namespace std;void InsertSort(int array[], int length){ for (int j
2015-09-11 10:43:36 442
STL源码讲解文档
2016-06-05
STL源码剖析 候捷配套
2016-06-05
STL source code
2016-06-05
SX1278模块
2015-11-18
BLE-CC41-A蓝牙模块
2015-11-18
SX1276/1278LoRa模块测试程序
2015-11-18
BLE-CC41-A蓝牙模块驱动程序
2015-11-18
虚拟化知识
2015-08-18
操作系统:精髓与设计原理02(读书笔记)
2015-07-26
操作系统:精髓与设计原理01(读书笔记)
2015-07-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人