摘要: /**原型:extern char *strncpy(char *dest, const char *src, int n);*用法:#include <string.h>*功能:把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中。*说明:* 如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束。* 如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。* src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。* 返回指向dest的指针。*编程实现strncpy*/#include <c 阅读全文
posted @ 2013-03-20 21:45 一枚程序员 阅读(582) 评论(0) 推荐(0) 编辑
摘要: 二分搜索折半搜索,也称二分查找算法、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。时间复杂度:二分搜索每次把搜索区域减少一半,很明显时间复杂度为O(logN)。空间复杂度:O(1),虽以递归形式定义,但是尾递归,可改写为循环。二分搜索的基本实现二分查找法在算法家族大类中属于“分治法”,分治法基本都可以用递归来实现的 阅读全文
posted @ 2013-03-06 21:48 一枚程序员 阅读(563) 评论(0) 推荐(0) 编辑
摘要: “设计者确定其设计已经达到了完美的标准不是不能再添加任何问题,而是不能再减少任何问题”,程序员应该以此为标准。。。怎样给一个磁盘文件排序?问题描述:输入:一个最多含有n个不相同的正整数的文件,其中每个数都小于等于n,且n=10^7。输出:得到按从小到大升序排列的包含所有输入的整数的列表。约束:最多有大约1MB的内存空间可用,但磁盘空间足够。且要求运行时间在5分钟以下,10秒为最佳结果。分析如下:如何在1MB的空间里对10000000个整数进行排序?而且每个数都小于10000000。实际上这个需要1.25MB的内存空间(此时考虑的是用位图表示法时,每一位代表一个数,那么10000000/(102 阅读全文
posted @ 2013-03-06 21:09 一枚程序员 阅读(1842) 评论(1) 推荐(0) 编辑
摘要: 常见内排序算法:选择合适的排序方法应综合考虑以下因素:1、待排序的记录数目n2、记录的大小(规模)3、关键字的结构及其初始状态4、对稳定性的要求5、语言工具的条件6、存储结构7、时间和辅助空间的复杂度等不同条件下,排序算法的选择:1、若n较小(n<50)可采用直插法和简单选择法2、若文件初始状态基本有序(正序),则应选用直插法、冒泡或随机的快速排序为宜3、若n较大、则应采用时间复杂度为o(nlgn)的排序方法:堆排序、归并排序、快速排序 快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布的,快速排序的平均时间最短 堆排序需要的辅助空间少于快速排序,并且不会出 阅读全文
posted @ 2012-09-13 20:15 一枚程序员 阅读(449) 评论(0) 推荐(0) 编辑
摘要: 已知String类定义如下:class String{public: String(const char *str = NULL); // 通用构造函数 String(const String &another); // 拷贝构造函数 ~ String(); // 析构函数 String & operater =(const String &rhs); // 赋值函数private: char *m_data; // 用于保存字符串};尝试写出类的成员函数实现。String::String(const char *str){ if ( str == NULL ... 阅读全文
posted @ 2012-08-30 20:03 一枚程序员 阅读(7204) 评论(1) 推荐(0) 编辑
摘要: 已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy。char *strcpy(char *strDest, const char *strSrc){ if ( strDest == NULL || strSrc == NULL) return NULL ; if ( strDest == strSrc) return strDest ; char *temp... 阅读全文
posted @ 2012-08-30 20:01 一枚程序员 阅读(16744) 评论(0) 推荐(1) 编辑
摘要: 1、结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构的所有成员都存在(不同成员的存放地址不同)。2、对于联合的不同成员赋值, 将会对其它成员重写,原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。3、下面关于“联合”的题目的输出?#include <stdio.h>union{ int i; char x[2];}a;void main(){ a.x[0] = 10; a.x[1] = 1; printf("%d",a.i);}答案:266 (低位低地址,高位高地 阅读全文
posted @ 2012-08-30 19:45 一枚程序员 阅读(1104) 评论(0) 推荐(0) 编辑
摘要: 1、什么是“引用”?声明和使用“引用”要注意哪些问题? 引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引用。2、将“引用”作为函数参数有哪些特点? (1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参. 阅读全文
posted @ 2012-08-30 19:29 一枚程序员 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 栈和堆究竟是什么,在内存中是如何分配的呢? 接触过编程的人都知道,高级语言都能通过变量名来访问内存中的数据。那么这些变量在内存中是如何存放的呢?程序又是如何使用这些变量的呢?下面就会对此进行深入的讨论。下文中的C语言代码如没有特别声明,默认都使用VC编译的release版。 首先,来了解一下C语言的变量是如何在内存分部的。C语言有全局变量(Global)、本地变量(Local),静态变量(Static)、寄存器变量(Regeister)。每种变量都有不同的分配方式。先来看下面这段代码:#include <stdio.h> int g1=0, g2=0, g3=0; int main 阅读全文
posted @ 2012-08-28 15:37 一枚程序员 阅读(1444) 评论(0) 推荐(0) 编辑
摘要: 非常经典的解释=_=堆和栈的区别一、预备知识:程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分: 1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap):一般有程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式类似于链表。。 3、全局区(静态区:static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。 4、文字常量区:常量字... 阅读全文
posted @ 2012-08-26 15:12 一枚程序员 阅读(340) 评论(0) 推荐(0) 编辑