摘要:
![](http://images2015.cnblogs.com/blog/578455/201612/578455-20161219000057479-2111440159.png) 阅读全文
摘要:
<!DOCTYPE html 多级c指针传值问题 / GitHub stylesheet for MarkdownPad (http://markdownpad.com) / / Author: Nicolas Hery http://nicolashery.com / / Version: b13 阅读全文
摘要:
C++11类型 基本类型 1. 字面值常量(literal) 比如:一个形如42的值,即为常量 2. 变量 初始值 初始化不是赋值,初始化是创建变量的时候给一个初始值;而赋值是擦除当前值,用新值代替。 列表初始化 c++11允许使用{}来初始化变量。 比如: 同理,对于vertor: 初始化方式 拷 阅读全文
摘要:
<!-- /* GitHub stylesheet for MarkdownPad (http://markdownpad.com) */ /* Author: Nicolas Hery - http://nicolashery.com */ /* Version: b13fe65ca28d2e56 阅读全文
摘要:
<!-- /* GitHub stylesheet for MarkdownPad (http://markdownpad.com) */ /* Author: Nicolas Hery - http://nicolashery.com */ /* Version: b13fe65ca28d2e56 阅读全文
摘要:
转:非常有用的方法,调式神器SMP IRQ AffinityBackground:Whenever a piece of hardware, such as disk controller or ethernetcard,needs attention from the CPU, it throws... 阅读全文
摘要:
pointer to const:指向常量的指针(被指向的对象是常量)const pointer:常量指针(指针本身是常量) [对被指向对象的修饰] * [指针本身的修饰]====================================================指向常量的指针:被指向的... 阅读全文
摘要:
用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。用途二:用在旧的C的代码中(具体多旧没有查),帮助struct。用途三:用typedef来定义与平台无关的类型。用途四:为复杂的声明定义一个新的简单的别名。------------------------------... 阅读全文
摘要:
非原创,感觉作者写的很有意思,特拿来记录一番。int a,int *a,第一行代码:a是int型第二行代码:*a是int型, a是int型指针同理int (*p)(int)(*p)(int) 是int型,后面带一个(int),则(*p)是函数,那么p是函数指针。那么函数指针的指针呢?int *(*p... 阅读全文
摘要:
前面做了栈的基本操作总感觉需要做一个实际的例子来检验一下。这里我将用栈来做一个简单的四则运算。目标比较简单:做一个带小括号(“()”)的四则运算,如果要加入到中括号(“[]”)或者大括号(“{}”),依次类推。求一个表达式:用下面这个算是做例子,程序最后应该可以算出任何带小括号的运算。3+(32-6... 阅读全文
摘要:
本文是看过《head first Java》之后的一点感悟,写点东西帮忙以后回忆,Java目前在我的工作中用到还不多,而我又对面对对象的编程非常的感兴趣。曾经在MFC平台上写过一个比较大的程序,但是看了本书后,发现之前程序中漏洞百出,而且对面对对象的思想理解不深刻,感觉需要重新学习一遍。C++和JAVA的面对对象还是很有差距的,但是他们的基本思想是相同,抓住思想再学习语言会更高效。http://www.cnblogs.com/jsgnadsj类面向过程编程语言的局限:大家最熟悉的应该是C语言编程,它是一个面向过程的编程语言。我曾经做过模型车,用主控芯片去控制四个轮子转动,用C语言... 阅读全文
摘要:
AVL:本章参考了严蔚敏的《数据结构》,程杰《大话数据结构》 上一章的排序二叉树对于我们寻找无序序列中的元素的效率有了大大的提高。查找的最差情况是树的高度。这里就有问题了,将无序数列转化为二叉排序树的时候,树的结构是非常依赖无序序列的顺序,这样会出现极端的情况。【如图1】: 这样的一颗二叉排序树就是一颗比较极端的情况。我们在查找时候,效率依赖树的高度,所以不希望这样极端情况出现,而是希望元素比较均匀的分布在根节点两端。问题提出: 能不能有一种方法,使得我们的二叉排序树不依赖无序序列的顺序,也能使得我们得到的二叉排序树是比较均匀的分布。引入: 平衡二叉树(Self-Balancing B... 阅读全文
摘要:
二叉排序树 也称为 二叉查找数。它具有以下性质:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值。若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。它的左、右子树也分别为二叉排序树。 之前的查找折半查找、斐波那契查找、插值查找的前提条件就是序列为有序,为顺序存储结构。我们在查找一章提过,查找还有动态查找,比如插入和删除操作,进行这些操作对顺序存储结构效率不那么高。能不能有一种既静态查找效率高,动态查找效率也高呢? 联想之前的堆排序,人们创造出一个堆这样的结构来提高排序效率。(佩服他们的思维)堆结构建立在二叉树上,之前一直都不知道二叉树是怎么用的,看到这里二叉树的作用.. 阅读全文
摘要:
以前有个游戏,一方写一个数字,另一方猜这个数字。比如0-100内一个数字,看谁猜中用的次数少。这个里面用折半思想猜会大大减少次数。步骤:(加入数字为9)1.因为数字的范围是0-100,所以第一次猜50(100的一半)2.缩小范围到0-50,根据对方回应数大了,再猜25(50的一半)3.缩小范围到0-25,对方回应数大了,再猜134.缩小范围到0-13,对方回应数大了,再猜75.缩小范围到7-13,对方回应数小了,再猜106.缩小范围到7-10,对方回应数大了,再猜9,中真是比较差的情况,最差的情况这样逐次缩小到最后一个数,应该是需要猜7次。这就是折半查找思想,非常的简单,但是有个前提,所要查找 阅读全文
摘要:
查找:操作有(1).查询某个“特定的”数据元素是否在查找表中; (2).检索某个“特定的”数据元素的各种属性; (3).在查找表中插入一个元素 (4).删除某一个元素若只完成前两个操作,称为“静态查找表”。若在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素,则称为“动态查找表”查找操作性能:查找中一般将以其关键字与给定值比较的个数的平均值作为衡量算法好坏的依据。平均查找长度:为了确定在查找表中的位置,需和给定值进行比较的关键字个数的期望值。 阅读全文
摘要:
快速排序快速排序由图灵奖获得者Tony Hoare26岁设计出来,这个大牛有兴趣的可以google下。前面讲过 直接插入排序、简单选择排序、冒泡排序 这几个我们能够最直接想出来的排序方法。(时间复杂度都是 O(N2))后来人们一直寻找能够打破时间复杂度O(N2)的限制。先后有 希尔排序,它是直接插入排序的升级。(每趟插入的步长从大到小)堆排序,它是简单选择排序的升级。(应用堆这个结构来存储数据的大小关系)而快速排序则是冒泡排序的升级。(冒泡排序是比较两个相邻的数大小,交换)快速排序:基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然 阅读全文
摘要:
归并排序 利用了完全二叉树的堆排序在效率上提高了不少。但是堆排序主要耗费时间在调整堆上,算法效率也不够稳定。对于二叉树的应用,还有没有其他方法能够保持算法的效率,也能够使其是一个稳定的算法。(堆排序不够稳定)具体效率可以查看《算法导论》、《数据结构与算法》(严蔚敏) 想想二叉树的结构,如果我们比较两个数,我们想想将两个树作为叶子,比较结果存放在根中。如果是四个数呢?四个数分别为四个叶子,通过两两比较形成一个小集合,然后小集合再比较最后形成最终的结果。这就是归并的思想。开始不理解为什么叫归并,后来看到有人写过:先递归分解,再合并成数组归并算法用了 分治法(Divide and Conquer.. 阅读全文
摘要:
堆排序问题提出: 前面写过 简单选择排序 讲过,要找出n个数据中最小的值,那么需要比较n-1次。仔细想想,比较第一趟的时候,第一个哨兵下标元素与每一个元素比较,如果哨兵元素不是最小的,那么会发生交换,记交换后的元素下标为swap。继续比较第二趟 到 第n趟时候,每一趟都会有元素与swap下标元素比较,但是这个比较之前就已经比较了,只是没有保存下来。能不能通过方法能够记录这些比较,使其重复比较的次数减少? 堆排序就是对简单选择排序的一种改进,通过一种数据结构来保存比较之后的元素关系,在大量数据比较时候,效率非常高。 堆具有的性质:n个元素序列{k1,k2,k3,...,kn}满足如下关系:... 阅读全文
摘要:
希尔排序: 直接插入排序在在本身数量比较少的时候情况下效率很高,如果待排数的数量很多,其效率不是很理想。 回想一下直接插入排序过程,排序过程中,我们可以设置一条线,左边是排好序的,右边则是一个一个等待排序,如果最小的那个值在最右边,那么排这个最小值的时候,需要将所有元素向右边移动一位。 是否能够减少这样的移位呢? 我们不希望它是一步一步的移动,而是大步大步的移动。希尔排序就被发明出来了,它也是当时打破效率O(n2)的算法之一。希尔排序算法通过设置一个间隔,对同样间隔的数的集合进行插入排序,此数集合中的元素移位的长度是以间隔的长度为准,这样就实现了大步位移。但是最后需要对元素集合进行一次... 阅读全文
摘要:
插入排序:在《算法导论》中是这样描述的这是一个对少量元素进行排序的有效算法。插入排序的工作机理与打牌时候,整理手中的牌做法差不多。在开始摸牌时,我们的左手是空的,牌面朝下放在桌子上。接着,一次从桌子上摸起一张牌,并将它插入到左手一把牌中的正确位子上。为了找到这个正确的位置,要将它与手中已有的每一张牌从右到左进行比较,无论什么时候,左手的牌都是排好序的。算法思想:将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录数加1的有序表。图解:每一张图都是一个for循环。红色和绿色的表示 左手的牌(排好序的数组)。以此类推。。。代码: 1 void insertionSort(myDataTyp 阅读全文