- 博客(36)
- 资源 (13)
- 收藏
- 关注
转载 C语言字符串函数详解(2) strcpy、strcmp、strcat、strlen、strstr
strcpy的源码:char *strcpy(char *strDes, const char *strSrc) { assert((strDes != NULL) && (strSrc != NULL)); char *address = strDe
2011-09-22 23:21:52
1004
原创 C语言字符串函数详解(1)
void *memset(void *dest, int c, size_t count); //将dest前面count个字符置为字符c. 返回dest的值.void *memcpy(void *dest,
2011-09-22 23:01:10
958
原创 排序算法-堆排序
堆排序 优先队列的结构是节点i的孩子为2*i和2*i+1节点,大顶堆要求父节点大于等于其2个子节点,小顶堆要求父节点小于等于其2个子节点。优先队列可以以O(NlogN)时间进行排序,基于该思想的算法叫做堆排序。 首先将数组构造成一个大顶堆,然后
2011-09-09 10:56:30
398
原创 排序算法-归并排序
归并排序 该算法是经典的分治(divide and conquer)策略,它将问题分(divide)成一些小问题然后递归求解,而治(conquering)的阶段则是将分的阶段解得的答案修不在一起。 算法的基本操作合并两个已排序的表,因为这两个表已经是排序的,所以
2011-09-09 10:51:01
561
原创 算法排序-交换排序(冒泡排序,快速排序)
交换排序有两种:冒泡排序和快速排序。 冒泡排序 冒泡排序就是通过每趟排序,把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等
2011-09-09 10:43:41
589
原创 排序算法-选择排序
选择排序 选择排序的思想是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。在一趟选择,如果当前元素比一个元素小,而该小的元素又出现
2011-09-09 10:28:40
304
原创 快速排序的几种改进
快速排序,顾名思义,快速排序的速度是很快的,平均复杂度是nlogn。 快速排序的思路:1.分治的思想,把数组分成两份,两份分成4分,这样分到足够小,就能很好排序咯,然后把他们合起来,排序完成。2.该分治思想和合并排序思想一样,但是处理上更搞一筹,他是把小的和
2011-09-05 14:05:39
2074
原创 两个变量a,b,不用判断语句,找出两个中比较大的那个变量
法一:位运算 #include using namespace std;int my_max(int x,int y){ int test[2]={x,y}; unsigned int c; c=x-y; c>>=31;
2011-08-30 10:00:29
2514
原创 近日行程安排
今天就要坐火车去大连找高中同学玩了,qq,andy ,大江,很是开心。住宿就在大江大连理工的破宿舍了哈哈,我坐一晚上火车明天早上才到,他们竟然要踢足球,作为范尼表示压力很大....在大连玩几天然后回家,休息调整。在家准备把数据结构的一些知识看完了,这几天一直看查找并实现了其相关的
2011-07-15 10:19:46
395
原创 查找--- 哈希表( 散列表)
哈希表优点:把数据的存储和查找消耗的时间大大降低,几乎可以看作是常数时间,而代价是消耗比较多的内存 散列表由两部分组成:桶数组,散列函数1.桶数组散列表的桶数组是一个大小为N的数组A,其中A的每个单元可看作一只“桶”,整数N表示数组的容量,如果关键字为整数,且均匀地分散在范围[0
2011-07-14 09:01:15
1201
转载 程序员面试题精选--06 判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \
2011-07-13 11:44:37
431
转载 程序员面试题精选---01 把二元查找树转变成排序的双向链表
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 比如将二元查找树 10
2011-07-13 10:11:20
409
转载 B树,B-树,B+树,B*树介绍
原文地址:http://blog.youkuaiyun.com/manesking/archive/2007/02/09/1505979.aspxB树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字
2011-07-12 17:17:02
379
原创 二叉排序树查找效率的改进----平衡二叉树的实现
对二叉排序树查找效率进行分析,就要看其平均查找长度,由于相同n个结点的二叉排序树是不唯一的,例如: 上面两个二叉排序树的结点是相同的,但是树的形状不同,这样查找元素的时候,效率也不同,若看平均查找效率,必然是第一个图中的
2011-07-12 16:04:52
3633
原创 动态查找表--二叉排序树的实现
动态查找表的特点是表结构本身是在查找过程中动态生成的。二叉排序树的定义是:或者是一颗空树,或者是具有下列性质的二叉树:(1)若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值;(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)它的左右子树也分别是
2011-07-11 21:05:10
1976
原创 静态查找表的建立及顺序查找操作
查找是数据结构中很重要的一部分,最近在看查找表,首先是静态查找表,静态查找表可以以顺序表和线性链表来表示,用Search函数来顺序查找,从表中最后一个记录开始,逐个进行记录的关键字和给定值进行比较,如果相等,则查找成功,找到所查记录,反之,若直至最后一个记录,则查找不成功。
2011-07-10 15:19:11
7773
原创 二叉树 建立及相关操作
数据结构的知识忘了好多了。今天实现了一下二叉树及相关操作,对二叉树的遍历采用了递归的方法,当然也可以用非递归方法。附上代码:/*****************************二叉树的建立及相关操作******************************//
2011-07-08 14:31:12
469
原创 既然使用变量就可以访问数据,那为何还用指针呢?
既然使用变量就可以访问数据,那为何还用指针呢?换句话说,我该何时用指针呢?这个问题应该困扰不少像我一样对编程还不开窍的人,今天看了一些,总结一下: 指针最常被用于完成下列3种任务: 1.管理自由存储区(堆)中的数据,即程序员自己申请的内存中的数据; 2.访
2011-07-07 10:02:00
1265
原创 程序运行时在内存中的分布
在操作系统中,一个进程就是处于执行期的程序(当然包括系统资源),实际上正在执行的程序代码的活标本。那么进程的逻辑地址空间是如何划分的呢?图1做了简单的说明(Linux系统下的)。
2011-07-07 08:38:51
794
原创 总结 关于C风格字符串
1.字符串字面值 字符串字面值是一串常量字符,字符串字面值常量用双引号括起来的零个或多个字符表示,为兼容C语言,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符 "Hello World!" //simple string literal
2011-07-06 22:58:09
868
转载 函数对象
转自:http://www.cnblogs.com/ly4cn/archive/2007/07/21/826885.html函数对象不是函数指针。但是,在程序代码中,它的调用方式与函数指针一样,后面加个括号就可以了。 这是入门级的随笔,说的是函数对象的定义,
2011-07-05 22:45:29
348
转载 纯虚函数 抽象类
虚函数是C++多态的一种表现 ,例如:子类继承了父类的一个函数(方法),而我们把父类的指针指向子类,则必须把父类的该函数(方法)设为virturl(虚函数)。 使用虚函数,我们可以灵活的进行动态绑定,当然是以一定的开销为代价。 如果父类的函数(
2011-07-04 15:10:34
2978
转载 C++拷贝构造函数(深拷贝,浅拷贝)
对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include using namespace std;class CExample {private: int a;public: CExample(int b) { a=b;
2011-06-30 14:55:00
250
转载 c++关键字详解(volatile, mutable, explicit, dynamic_ cast(expression))等
转自:http://cyinger-smiling.blogbus.com/logs/31041587.html1 volatile有些变量是用volatile关键字声明的。当两个线程都要用到某一个变量且该变量的值会被改变时,应该用volatile声明,该关键字的作用是防止优化编译器把变量从内存装入CPU寄存器中。如果变量被装入寄存器,那么两个线程有可能一个使用内存中的变量,一个使用寄存器中
2011-06-30 09:38:00
453
原创 关于类的构造函数说明
C++primer里关于类的构造函数说的太乱了,在此自己整理一下。一 默认构造函数: 从字面意思理解,就是在定义构造函数时会给他默认的值。也就是说,无须输入参数的构造函数都可以作为默认构造函数。这样就好理解了!所以默认构造函数可以有两种形式: 1.若programer没有提供任何构造函数,则C++提供一个默认的构造函数,该默认构造函数是无参构造函数,它仅负
2011-06-30 08:50:00
397
原创 如何使用istream_iterator将cin转到vector? (C/C++) (STL)
本范例使用istream_iterator及copy(),将cin转到vector,只需一行的程序,vector经过sort(),再使用ostream_iterator将vector转到cout,也只需一行程序就可完成。 1/**//* 2(C) OOMusou 2006 http://oomusou.cnblogs.com 3 4Filename : StreamIterator
2011-06-28 11:12:00
944
原创 关联容器
关联容器支持通过键来高效地查找和读取元素。两个基本的关联容器类型是map和set。map的元素以键-值对的形式组织:键用作元素在map的索引,而值则表示所存储和读取的数据。set仅包含一个键,并有效地支持关于某个键是否存在的查询。set和map类型的对象不允许为同一个键添加第二个元素。如果一个键必须对应多个实例,则需使用multimap或mutiset类型,这两种类型允许多个元素拥有相同的键。
2011-06-27 08:21:00
403
原创 一周总结
一周基本上都在看书了,一个人在实验室开着空调很舒服,一边做C++primer的习题,捎带着看了面试宝典,温故知新,要坚持下去。 周四周五去雾灵山去玩了,大boss出手大方,大家玩的很high。 周六忙着搬到租的房子那了,真远,还好一切顺利。 下周先把例会的任务给完成了,这个假期基本上就结束了,书还是要继续看下去的,一定要给自己找事情
2011-06-25 22:27:00
416
原创 C++类构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如:class CExample {public: int a; float b; //构造函数初始化列表 CExample(): a(0),b(8.8) {} //构造函数内部赋值 CExample() { a=0;
2011-06-23 10:28:00
403
原创 cin、cin.get()、cin.getline()、getline()、gets()函数的用法
1、cin>> 用法1:最基本,也是最常用的用法,输入一个数字:#include using namespace std;main (){int a,b;cin>>a>>b;cout}输入:2[回车]3[回车]输出:5用法2:接受一个字符串,遇“空格”、“TAB”、“回车”都结束#include using namespace std;main (){c
2011-06-22 12:56:00
478
原创 C语言中的逻辑运算符和位运算符总结
老分不清一个&号和俩的用法,今天专门拿出来整理整理:一、逻辑运算符: 包括:1。&&逻辑与 2。||逻辑或 3。!逻辑非 逻辑运算符用于对包含关系运算符的表达式进行合并或取非 对于使用逻辑运算符的表达式,返回0表示“假”,返回1表示“真”。关于逻辑运算符的解释 请注意:任何使用两个字符做符号的运算符,两字符之间不应有空格,即将==写成= =是错误的。 假设一个程序在
2011-06-21 14:24:00
8336
原创 (int)a、&a、(int)&a、(int&)a的区别,很偏僻的题
#include #include #include #include using namespace std;int main(){float a = 1.0f;cout cout cout cout cout cout /*(int&)a:将a的引用强制转换为整型,意思是a所在的内存,本来定义的时候为float类型,并初始为1.0f,但现在我要按int类型解释这段内存(也就是说
2011-06-20 23:15:00
616
原创 x&(x-1)表达式的意义
求下面函数的返回值(微软) -- 统计1的个数-------------------------------------int func(int x){ int countx = 0; while(x) { countx++; x = x&(x-1); } return countx;} 假定x = 999910011100
2011-06-20 22:43:00
372
字符串的字典序问题.txt
2011-03-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人