自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zhangchuan的博客

随便写写,权当知识点总结

  • 博客(23)
  • 资源 (1)
  • 收藏
  • 关注

原创 二叉搜索树转换为双向链表

二叉搜索树转换成对应的双向链表,不能生成新的节点,只允许改变节点的的指针。解题思路:由于按照中序遍历方法遍历二叉搜索树得到的结果是有序的,因此可以按照中序遍历方法遍历搜索树。定义函数BinaryTreeNode* Transfer(BinaryTreeNode* root),该函数将以节点root为根节点的二叉树转换为对应的有序双向链表,并返回该双向链表的头节点指针。具体代码如下:// Conso

2016-08-31 21:38:45 310

原创 找出数组中出现超过1/4的三个数

原题:已知数组中有三个数超过了数组长度的1/4,请找出这三个数。// ConsoleApplication6.cpp : 定义控制台应用程序的入口点。//找出数组中出现1/4的三个数#include "stdafx.h"#include#include#includeusing namespace std;//数组中有三个数出现超过数组长度1/4,求这三个数void

2016-08-30 19:26:36 2046

原创 后缀树

后缀树的构建及查询等应用

2016-08-29 21:12:46 529

原创 第一个只出现一次的字符

在字符串中找出只出现一次的字符。我们可以使用哈希表结构解决此问题。以哈希表的键值作为字符,对应的出现次数为值。具体代码如下:// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。//计算只出现一次的字符#include "stdafx.h"#include#includeusing namespace std;char FirstNotR

2016-08-25 21:14:11 278

原创 丑数

我门把只含有因子2,3,5的数称为丑数。求按从小到大排列的第1500个丑数。习惯上,我门把1当作第一个丑数。假设前i个丑数已经按序排列,现在求第i+1个丑数。很显然,第i+1个丑数为前i个丑数分别乘以2或乘以3或乘以5后大于第i个丑数的最小丑数。假设T2为前i个数乘以2后第一个大于第i个丑数的数,T3为前i个数乘以3后第一个大于第i个丑数的数,T5为前i个数乘以5后第一个大于第i个丑数的数,那么第

2016-08-25 20:39:01 248

原创 链表中的公共节点

求取来拿表中的第一个公共节点。由于链表中的节点都有一个指向下一个节点的指针,当某个节点公共时,意味着该公共节点指向的下一个节点也公共,即第一个公共节点后的所有节点公共。因此,两条链表按公共节点重叠后呈现Y型。我们可以先计算两条链表的长度差,该长度差就是长链表优先要走的步数,之后两链表就一个一个对应比较,直到找到第一个公共节点为止。具体代码如下:// ConsoleApplicati

2016-08-25 16:31:46 2785

转载 把数组中的数字拼接起来组成最小的数

例如输入数组{3,32,321},则拼接起来的最小数为321323。假设有两个数m和n,我们定义mnm,则有m>n。m和n都是int范围内的数字,它们拼接起来的数字很可能超出int所能表示的范围。在这里,我们把数字转换为字符串。将数字按上面定义的比较方式从小到大排序,那么得到的组合数字最小。相关数学证明可以网上搜寻。源码如下:// ConsoleApplication60.cp

2016-08-24 19:12:01 6152 1

原创 键树

键树又称数字查找树,它是一棵度大于等于2的树,树中的节点不是包含一个或几个关键字,而只是包含组成关键字的符号。如果关键字是数值,则节点中的元素为一位的数字;如果关键字为字符,则节点中的元素为26个字符。如下是一棵键树。从根节点到叶子结点路径上的元素组成一个关键字,其中叶子结点的特殊字符表示字符串的结束。叶子节点中有指向关键字记录的指针。为了查找的方便,我们约定同一层兄弟

2016-08-24 10:17:12 1881

原创 归并排序的应用

在数组中的两个数如果前一个数大于后面的数,则这两个数组成逆序对。解题思路:将数组中的元素两两划分为单一数组元素,用high1和high2分别表示相邻两个数组中末尾元素的位置,如果数组1中的high1的元素大于数组2中high2的元素,则high1与数组2中的所有元素构成逆序对(数组1和数组2均为递增数组),统计逆序对个数,high1--;否则,high2--;同时对数组1和数组2中的元素作归并

2016-08-22 16:33:07 698

原创 循环有序数组中查找指定值

循环数组中查找是否存在指定值的思想是:由于是循环有序数组,那就说明该数组通过循环移位可以成为有序数组,即该数组可以划分为两个有序的部分,且前一部分的元素都不小于后一部分元素,也就是形如{7,8,9,1,2,3,4}的数组。我门可以借鉴二分查找的方法解决。使用low和high指针分别指向数组首尾部元素,当low所指元素小于high所指元素时,此时数组为有序数组,可以直接使用二分法查找;当low所指元

2016-08-21 20:43:03 2171

原创 原路归并

// ConsoleApplication55.cpp : 定义控制台应用程序的入口点。//原地归并排序#include "stdafx.h"#include#includeusing namespace std;//将长度为n的数组逆转void reverse(int *arr, int n){ for (int i = 0; i < (n / 2); i++){ int

2016-08-21 20:01:43 296

原创 原地归并排序

传统二路归并排序在进行排序的过程中,需要使用长度为n的辅助空间存储原序列,再次,本文介绍一种新的排序方法---原地归并排序,该方法不需要使用额外的存取空间,空间复杂度为o(1)。原地归并排序是在二路归并的基础上进行的改进,在二路归并的归并操作中,原地归并不再使用不再使用长度为n的辅助空间,而是在原地进行归并操作。其具体步骤是;首先在已排好序的左序列中找到第一个数i,使其大于已排好序的右序列中的第一

2016-08-21 19:11:24 1247 1

原创 二路归并排序

二路归并排序的核心思想是对两个已排序的子序列进行两两归并合成一个子序列的过程。它是利用分治法求解的一个典型应用。设归并排序的当前区间是R[low..high],二路归并排序的主要步骤如下:1 将当前区间一分为二。2 分别对左右区间排序。3 对左右区间执行归并操作。其中归并操作的具体过程如下:首先申请辅助空间,将两个子序列相邻地复制到辅助空间中,然后依次在辅助空间中从左右区间取值

2016-08-20 19:06:56 1332

原创 堆排序

堆排序---以二叉树的结构存储堆中元素,对于树中任一根节点而言,它的左子树和右子树要么都比它大或者比它小。堆排序分为两步:初始建堆,交换数据,重新建堆。

2016-08-20 15:00:46 346

原创 排序

将由1,2,3组成的乱序序列数排序,使得排序后的顺序为1,2,3.核心思想:使用begin,end,current三个指针,初始时begin,current指向序列首部,end指向序列尾部。当current指向1时,current++;当current指向0时,current与begin指针的内容交换,current++,begin++;当current指向2时,current与end的内容交

2016-08-19 16:26:10 337

原创 quicksort

快速排序核心思想:选择原序列中的某个数作为基准值,通过某种操作,使得基准值的左边的序列都小于基准值,基准值右边的序列都大于基准值,然后分别将左右两边的序列按照同样的操作进行排序,直至整个序列有序为止。// ConsoleApplication51.cpp : 定义控制台应用程序的入口点。//QuickSort#include "stdafx.h"#include#includeusin

2016-08-18 20:42:43 880

原创 shell排序

Shell排序核心思想:首先将原序列划分为具有多个相同步长的子序列,对每个子序列进行插入排序,排完序列之后缩短步长值,再次进行划分并排序,直至序列基本有序为止。到目前为止,对于步长的取值仍没有特定的规则,一般而言,步长值每次缩短一半,直至为1.// ConsoleApplication50.cpp : 定义控制台应用程序的入口点。//shell sort#include "stdafx.h"

2016-08-18 19:32:51 435

原创 设计模式----工厂方法模式

设计模式----工厂方法模式工厂方法模式是再简单工厂模式的方法下进行的改进,简单工厂模式有一个大的缺陷就是当要增加新的产品类时,就必须在核心工厂类的判断分支中增加对于新类的判断,即修改工厂类,这样违背了设计模式中的 开放,封闭原则。工厂方法对每一个产品类都建立一个工厂类,这样在增加产品时,只需要增加对应的工厂子类即可,而不必修改工厂父类。工厂方法的结构图如下所示://

2016-08-18 10:31:51 307

原创 设计模式之抽象工厂

定义:提供创建一系列相互依赖或相关的对象的接口,而无须指定具体的类。

2016-08-17 12:44:38 276

原创 打印所有和为s的连续正序列

题目描述:输入正整数s,打印出所有和为s的连续序列。解题思路:将正整数序列1-s按照升序排列,分别用small和big指向序列中的最小值和最大值,计算从small至big这一范围内所有值的和。如果计算的和大于s,则将small指针向前移动,即删除此时序列中的最小值;如果经计算的和小于s,则将big指针向后移动,即增大序列的和;直至small指针指到原序列的中间为止。初始化时,small和big

2016-08-16 20:43:20 650

原创 统计序列中出现一次的数字

数字序列中找出其中只出现一次的数字,而序列中的其他数字出现两次。

2016-08-16 16:00:50 913

原创 C++函数覆盖,重载,隐藏的区别

c++中函数的覆盖,重载和隐藏之间的关系是很令人头疼的,又是不太容易区分的,现在此总结一下。范围的不同:函数的重载发生在类内部,而函数的覆盖,也叫函数重写,及函数隐藏发生在类间。也就是说,在同一个类中只会发生函数的重载,而在子类与父类间会发生覆盖和隐藏。声明方式的不同:在同一个类中,如果声明多个函数,只要它们的函数名相同,就会发生重载,而不管它们的参数列表及参数个数是否相同;当子类中存在与

2016-08-16 13:25:44 369

转载 局部静态变量

全局变量,局部静态变量,全局静态变量均存储在静态存储区,局部变量存储在栈上,而new出来的变量则存储在堆里。局部静态变量具有局部作用域,它只被初始化一次,到程序结束前都一直存在,在自身函数体内是可见的,在函数体外是不可见的。而局部变量只是在函数体内存在,函数结束时消失;全局变量则是在程序内所有函数体内都是可见的。因此,将局部变量改为静态局部变量后,作用域不变,仅改变变量的存储方式。全局静态

2016-08-08 13:30:08 1071

无线传感器网络定位算法

在传统PSo定位算法的基础上引入精英学习策略和混沌搜索策略将极大地提高节点定位精度。

2016-08-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除