面试常问-c/c++&&数据结构&&算法
折叠-smile
这个作者很懒,什么都没留下…
展开
-
【剑指offer】位运算相关-二进制中1的个数10
#include#include int NumberOf1(int n){ int count=0; unsigned int flag=1; while(flag) { if(n&flag) count++; flag=flag<<1; } return count;}//二进制中1的个数int NumberOf2(int n){ int count=原创 2014-03-06 00:36:00 · 1036 阅读 · 0 评论 -
【剑指offer】链表相关-链表末尾插入一个节点
#include#include #include //向链表的末尾添加一个节点struct ListNode{ int m_nValue; ListNode * m_pNext;};//我的程序void AddToTail1(ListNode ** pHead,int value){ //申请新节点 ListNode * newNode=new ListNode();原创 2014-02-28 19:55:00 · 6994 阅读 · 1 评论 -
【剑指offer】链表相关-逆向输出
#include#include #include //链表逆向输出struct ListNode{ int m_nValue; ListNode * m_pNext;};ListNode * CreateLink(int a[],int k){ ListNode * Head=NULL,*q=NULL; for(int i=0;i<k;i++) { ListNod原创 2014-02-28 23:23:04 · 1420 阅读 · 0 评论 -
【剑指offer】赋值运算符函数_01
//============定义赋值运算符函数================//#1.注意函数返回值,可允许连续赋值//#2.注意参数为const 引用类型//#3.注意内存泄露//#4.判断传入参与与当前值是否为一个实例//#5.注意异常安全性#include #include class cMyString{public: cMyString(char * pData原创 2014-02-27 00:42:22 · 710 阅读 · 0 评论 -
【剑指offer】替换字符串中的空格_04
#include#include#include//==知识点//1. 任何函数,最初都要对参数进行合法性检验//2. 要对内存覆盖有高度警惕//3. 测试用例// (1)输入的字符串中包含空格(空格位于字符串的最前面,空格位于字符串的最后面// 空格位于字符串的中间,字符串中有连续多个字符)// (2)输入的字符串中没有空格// (3)特殊输入测试原创 2014-02-28 15:12:25 · 632 阅读 · 0 评论 -
【剑指offer】二维数组中查找_03
#include #include //#注意知识点//1. 当问题比较复杂时,应该通过具体的例子找到规律;//2. 二维数组中,应该通过行号和列号计算出相对于数组首地址的偏移量;//3. 注意函数中的数组参数怎么定义,怎么传参数,又是怎么取元素的;//4. 注意二维数组的定义;居然都忘了;//自己写的,验证没问题/*bool Find(int *matrix,int rows,原创 2014-02-28 00:06:09 · 882 阅读 · 0 评论 -
【剑指offer】合并有序数组_04.1
#include#include //有两个排序的数组a1和a2,内存在a1的末尾有足够多的剩余空间容纳a2//实现一个函数将a2中所有的数字插入到a1,并写所有的数字是排序的。//自己写的,用例不多,还需进一步测试void Merge(int array1[],int array2[],int length,int i,int j){ if(array1==NULL || ar原创 2014-02-28 17:56:29 · 1642 阅读 · 4 评论 -
VC++中出现错误“ error c2065 'printf' undeclared identifier”的处理方法
又有两种可能:1.未加头文件 #include 2.头文件#include 加到include 的前面,而应该放在include 后面转载 2014-02-28 14:34:41 · 36851 阅读 · 1 评论 -
字符串数组&字符指针理解(一)
原创 2014-02-28 00:46:19 · 702 阅读 · 0 评论 -
关键字explicit&&c++四种类型转换相关关键字
1. 关键字explicit 通过关键字explicit的作用,我们可以禁止“单参数构造函数”被用于自动类别转换。 在 C++ 中, 如果一个类有只有一个参数的构造函数,C++ 允许一种特殊的声明类变量的方式。在这种情况下,可以直接将一个对应于构造函数参数类型的数据直接赋值给类变量,编译器在编译时会自动进行类型转换,将对应于构造函数参数类型的数据转换为类的对象。如果在转载 2014-02-26 22:30:17 · 563 阅读 · 0 评论 -
【剑指offer】链表相关-反转链表&&递归实现16
#include#include #include //反转链表struct ListNode{ int m_nValue; ListNode * m_pNext;};ListNode * CreateLink(int a[],int k){ ListNode * Head=NULL,*q=NULL; for(int i=0;i<k;i++) { ListNode *原创 2014-03-03 21:46:23 · 1064 阅读 · 0 评论 -
【剑指offer】链表相关-求链表中倒数第k个结点15
#include#include #include //找到链表中第k个结点//知识点//1. 当我们用一个指针遍历链表不能解决问题的时候,可以尝试用两个指针遍历链表。// 可以让其中一个指针遍历的速度快一些,比如说走两步,或若干步。//2. 类似求链表的中间结点//3. 判断一个单项链表是否构成了环形结构struct ListNode{ int m_nValue; L原创 2014-03-03 18:10:56 · 834 阅读 · 0 评论 -
c++类型及输出方式
在阅读《C Primer Plus》一书时,其程序清单中3.4 print2.c 程序代码中涉及到一个 long long类型函数的问题,在对代码段进行编译时,出现error C2632: 'long' followed by 'long' is illegal 报错。 原因在于 VC6中所使用的编译器是C90标准的,而此 long long 型是在C99中新加入的(long long原创 2014-03-05 23:56:38 · 2207 阅读 · 0 评论 -
【剑指offer】裴波那契数列算法09
#include#include //vc++无法定义long long类型//报错:error C2632: 'long' followed by 'long' is illegal//递归算法unsigned long Fibonacci1(unsigned n){ if(n<=0) return 0; if(n==1) return 1; return Fibon原创 2014-03-05 23:44:46 · 821 阅读 · 0 评论 -
排序算法的比较
1.稳定性比较 插入排序、冒泡排序、二叉树排序、二路归并排序及其他线形排序是稳定的 选择排序、希尔排序、快速排序、堆排序是不稳定的2.时间复杂性比较 插入排序、冒泡排序、选择排序的时间复杂性为O(n2) 其它非线形排序的时间复杂性为O(nlog2n) 线形排序的时间复杂性为O(n);3.辅助空间的比较 线形排序、二路归并排序的辅助空间为O(n),其它排序的辅助空间为转载 2014-03-05 22:04:05 · 466 阅读 · 0 评论 -
std' : is not a class or namespace name,解决
【未求证,可解决问题】要用std::名字空间 在包含标准库文件时不要带“.h”例:#include (不要)-#include )以下是引用:“是标准库出台前的头文件。 是标准库的头文件。 using namespace std;声明调用的是标准库的东西。”“标准库出台后为了不和以前的混淆 将类似于的头文件 放入到叫std 的namespace里 并叫头文转载 2014-03-05 23:02:45 · 10115 阅读 · 0 评论 -
【剑指offer】求旋转数组的最小数字8
#include#include //求旋转数组的最小数字int MinInOrder(int * numbers,int index1,int index2){ int result=numbers[index1]; for(int i=index1+1; i<= index2; ++i) { if(result > numbers[i]) result=numbers原创 2014-03-05 23:00:47 · 795 阅读 · 0 评论 -
选择排序&插入排序&冒泡排序&快速排序算法实现
#include#include //===========//排序算法////排序算法的稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,//若经过排序,这些记录的相对次序保持不变,即在原序列中,//ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。// 稳定性 时间复原创 2014-03-05 22:09:19 · 720 阅读 · 0 评论 -
【剑指offer】链表相关-合并两个有序链表&递归写法17
#include#include #include //合并两个有序链表struct ListNode{ int m_nValue; ListNode * m_pNext;};ListNode * CreateLink(int a[],int k){ ListNode * Head=NULL,*q=NULL; for(int i=0;i<k;i++) { ListNo原创 2014-03-04 23:21:53 · 1678 阅读 · 0 评论 -
【剑指offer】链表相关-删除value值节点
#include#include #include struct ListNode{ int m_nValue; ListNode * m_pNext;};ListNode * CreateLink(int a[],int k){ ListNode * Head=NULL,*q=NULL; for(int i=0;i<k;i++) { ListNode * pNew=原创 2014-03-03 15:59:19 · 1245 阅读 · 0 评论 -
【剑指offer】链表相关-在o(1)时间删除链表结点13
#include#include #include struct ListNode{int m_nValue;ListNode * m_pNext;};ListNode * CreateLink(int a[],int k){ListNode * Head=NULL,*q=NULL;for(int i=0;im_nValue=a[i]; pNew->m_pNext=NULL;if(Head==NU原创 2014-03-03 16:52:17 · 911 阅读 · 0 评论 -
堆与栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回转载 2014-02-24 14:46:25 · 511 阅读 · 0 评论 -
内存泄露和内存溢出
堆和栈的区别主要分:操作系统方面的堆和栈,如上面说的那些,不多说了。还有就是数据结构方面的堆和栈,这些都是不同的概念。这里的堆实际上指的就是(满足堆性质的)优先队列的一种数据结构,第1个元素有最高的优先权;栈实际上就是满足先进后出的性质的数学或数据结构。虽然堆栈,堆栈的说法是连起来叫,但是他们还是有很大区别的,连着叫只是由于历史的原因针值读在计算机科学中,内存泄漏(memo转载 2014-02-24 14:57:59 · 572 阅读 · 0 评论 -
连续两天遇到的一道笔试题 vector和list区别
stl提供了三个最基本的容器:vector,list,deque。vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。l转载 2012-10-26 22:06:37 · 336 阅读 · 0 评论 -
c源代码到可执行文件的过程
http://blog.csdn.net/lantianjialiang/article/details/3068952编译器(Compiler)是一个将一种语言的指令集转换成等价的另一种语言的指令集的程序。 我们通常认为编译器总是将像C++一样的高级语言转换成目标计算机硬件能够执行的文件,但是不总是这样的。很多编译器只是将代码转换成汇编语言,还有一些将一种高级语言转换成另外一种高级语言。转载 2012-10-25 22:03:51 · 738 阅读 · 0 评论 -
Linux静态库和动态库
http://www.cnblogs.com/feisky/archive/2010/03/09/1681996.html 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。 静态库和动态库的区别1. 静态函数库 这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进转载 2012-10-25 22:08:29 · 306 阅读 · 0 评论 -
链接
首先谈下声明与定义的区别。 声明是将一个名称引入程序。定义提供了一个实体在程序中的唯一描述。声明和定义有时是同时存在的。 如int a; extern int b=1; 只有当extern中不存在初始化式是才是声明。其他情况既是定义也是声明。 但是在下列情况下,声明仅仅是声明: 1:仅仅提供函数原型。如void f转载 2012-11-04 10:01:39 · 359 阅读 · 0 评论 -
enum的秘密<一>:enum是“用户自定义类型”(有意思 不过有的验证不正确)
http://bbs.chinaunix.net/thread-1049411-1-1.html 呵呵,enum在实际中应用比较少,所以你会忽略它。但是,在这里,我告诉你,enum 和 struct、class一样,都是用户自定义类型。 对呀!enum是用户自定义类型,他有数据成员,还有成员函数!For example: enum e{a=1 , b=2 ,转载 2012-10-25 23:52:34 · 898 阅读 · 0 评论 -
关于线程
一个全局变量 a=0有两个线程 执行for(int i=0;i a++问a的取值范围 每个线程都能从1到100 那么当一个线程从0变到1的时候 另一个线程也有可能从0变到1(它在上个线程还没变成1的时候获得0)王芳(422321414) 2012-10-11 21:06:39那么两个操作的结果仅仅是从0变到1所以最少的是a是100原创 2012-10-11 23:14:24 · 285 阅读 · 0 评论 -
c++的new
C++中的new其实是一个很糊弄人的术语,它有两种不同的含义,new运算符(new operator)和new函数(operator new),值得记录一下。一 new运算符最常用的是作为运算符的new,比如:string *str = new string(“test new”);作为运算符,new和sizeof一样,是C++内置的,你不能对它做任何的改变,除了使用它。new转载 2012-09-20 12:08:16 · 315 阅读 · 0 评论 -
内存动态分配与释放 (转)
http://www.cnblogs.com/yfanqiu/archive/2012/05/08/2490410.html1. C语言的函数malloc和free (1) 函数malloc和free在头文件中的原型及参数 void * malloc(size_t size)动态配置内存,大小有size决定,返回值成功时为任意类型指针,失败时为NULL。转载 2012-09-20 12:04:39 · 455 阅读 · 0 评论 -
宏定义
宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。1.不带参数的宏定义:宏定义又称为宏代换、宏替换,简称“宏”。 格式: #define 标识符 字符串 其中的标识符就是所谓的符号常量,也称为“宏名”,字符串可以是常数、表达式、格式串等。 在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏转载 2012-09-17 17:12:58 · 409 阅读 · 0 评论 -
C语言内存分配问题
C语言内存分配问题(转载)1、C中内存分为四个区栈:用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数执行完后由编译器自动释放。堆:用来存放由动态分配函数(如malloc)分配的空间。是由程序员自己手动分配的,并且必须由程序员使用free释放。如果忘记用free释放,会导致所分配的空间一直占着不放,导致内存泄露。全局局:用来存放全局变量和静态变量。存在于程序的整转载 2012-11-11 13:59:03 · 550 阅读 · 0 评论 -
数组指针和指针数组的区别
数组指针和指针数组的区别数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。转载 2012-11-11 14:04:30 · 290 阅读 · 0 评论 -
c++学习几个相关的博客
c++学习几个相关的博客http://blog.csdn.net/fairyroad/article/category/844216http://blog.csdn.net/leo115/article/details/8035078原创 2014-02-24 14:34:48 · 574 阅读 · 0 评论 -
[程序员面试]C++虚函数表详细解释及实例分析
C++的虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承、覆盖(override)的问题,保证其能真实的反应实际的函数。这样,在有虚函数的类的实例中这张表被分配在了这个实例的内存中,所以当我们用父类的指针操作一个子类的时候,这张虚函数表就显得尤为重要了,他就像一个地图转载 2014-02-24 14:32:06 · 843 阅读 · 0 评论 -
C++类对象内存模型与成员函数调用分析(上)
from:http://blog.csdn.net/fairyroad/article/details/6376620C++类对象内存模型是一个比较抓狂的问题,主要是C++特性太多了,所以必须建立一个清晰的分析层次。一般而言,讲到C++对象,都比较容易反应到以下这个图表: 这篇文章,就以这个表格作为分析和行文的策略的纵向指导;横向上,兼以考虑无继承、单继承、多重继承及转载 2014-02-24 14:31:18 · 550 阅读 · 0 评论 -
C++多态的实现原理
1. 用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。2. 存在虚函数的类都有一个一维的虚函数表叫做虚表。类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的。3. 多态性是一个接口多种实现,是面向对象的核心。分为类的多态性和函数的多态性。4. 多态用虚函数来实现,结合动态绑定。5. 纯虚函数是虚函数再加上= 0。6. 抽象类是指包转载 2014-02-24 14:29:47 · 563 阅读 · 0 评论 -
函数指针
http://hi.baidu.com/bellgrade/item/4a4334e8132eed0965db00a6C指针——函数指针函数名与函数指针一 通常的函数调用 一个通常的函数调用的例子://自行包含头文件void MyFun(int x); //此处的申明也可写成:void MyFun( int );int main(int转载 2014-02-24 13:46:11 · 459 阅读 · 0 评论 -
C++ 类里面,函数占用存储空间问题
先看两段代码:代码段1:class A{public:int print(){ cout};inr main(){A a;cout }输出结果:Size of A =1代码段2:class A{public:int print1(){ coutint print2(){ coutint print3()转载 2014-02-24 12:31:08 · 789 阅读 · 0 评论