04 2017 档案

判断两棵二叉树是否相等
摘要:当root1的左子树与root2的左子树相同,root1的右子树与root2的右子树相同时,这两颗二叉树相同。 当root1的左子树与root2的右子树相同,root1的右子树与root2的左子树相同时,这两颗二叉树同样相同。 以下是实现代码: 阅读全文

posted @ 2017-04-21 17:13 泡面小王子 阅读(911) 评论(0) 推荐(0)

堆栈、栈帧与函数调用过程分析
摘要:函数调用是程序设计中的重要环节,也是程序员应聘时常被问及的,本文就函数调用的过程进行分析。 一、堆和栈 首先要清楚的是程序对内存的使用分为以下几个区: l 栈区(stack):由编译器自动分配和释放,存放函数的参数值,局部变量的值等。操作方式类似于数据结构中的栈。 l 堆区(heap):一般由程序员 阅读全文

posted @ 2017-04-20 11:16 泡面小王子 阅读(1079) 评论(0) 推荐(0)

函数调用时的参数传递和栈帧结构问题
摘要:如下C++程序 int i=0x22222222; char szTest[]=”aaaa”; //a的ascii码为0x61 func(I, szTest); //函数原型为void func(int a,char *sz); 请问刚进入func函数时,参数在栈中的形式可能为 (左侧为地址,右侧为 阅读全文

posted @ 2017-04-20 10:53 泡面小王子 阅读(831) 评论(0) 推荐(0)

堆和栈区别
摘要:堆和栈究竟有什么区别? 主要的区别由以下几点: 1、管理方式不同; 2、空间大小不同; 3、能否产生碎片不同; 4、生长方向不同; 5、分配方式不同; 6、分配效率不同; 管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。 阅读全文

posted @ 2017-04-20 10:15 泡面小王子 阅读(159) 评论(0) 推荐(0)

循环链表----约瑟夫环实现
摘要:约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。现编写循环链表程序来实现约瑟夫环问题并输出每次出列的结果~ 用循环 阅读全文

posted @ 2017-04-20 08:17 泡面小王子 阅读(301) 评论(0) 推荐(0)

双链表( 初始化,建立,插入,查找,删除 )
摘要:双向链表和单向链表也是有很多相似的地方的,听名字可以猜到,每个节点都包含两个指针,一个指针指向上一个节点,一个指针指向下一个节点。这里有两个特殊的地方,第一就是头节点的一个指针指向NULL空指针(没有前驱节点),第二就是尾节点的一个指针指向NULL指针(没有后继节点)。 DbLinkList.cpp 阅读全文

posted @ 2017-04-19 16:09 泡面小王子 阅读(11209) 评论(0) 推荐(0)

单链表(程序员宝典)
摘要:// #include "stdafx.h" #include #include #include #include typedef struct student { int data; struct student *next; }node; //建立单链表 node* create() { node *head,*p,*s; int x, cyc... 阅读全文

posted @ 2017-04-17 17:07 泡面小王子 阅读(436) 评论(0) 推荐(0)

单链表(建立、插入、删除、打印)
摘要:单向链表创建 链表是动态分配存储空间的链式存储结构。 其包括一个“头指针”变量,其中第0个结点称为整个链表的头结点,头结点中存放一个地址,该地址指向一个元素,头结点一般不存放具体数据,只是存放第一个结点的地址。 链表中每一个元素称为“结点”,每个结点都由两部分组成:存放数据元素的数据域和存储直接后继 阅读全文

posted @ 2017-04-16 13:54 泡面小王子 阅读(48409) 评论(0) 推荐(3)

联合体union的详解
摘要:1.概述 联合体union的定义方式与结构体一样,但是二者有根本区别。 在结构中各成员有各自的内存空间,一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度。 2.联合体长度 在The C Programming Language里面 阅读全文

posted @ 2017-04-12 17:47 泡面小王子 阅读(2440) 评论(0) 推荐(0)

C++提供了四个转换运算符
摘要:const_cast <new_type> (expression) static_cast <new_type> (expression) reinterpret_cast <new_type> (expression) dynamic_cast <new_type> (expression) 它 阅读全文

posted @ 2017-04-12 09:15 泡面小王子 阅读(443) 评论(0) 推荐(1)

printf("%d",5.01)和printf("%f",5)的输出结果
摘要:输出结果: 看到结果,会感觉非常奇怪。1处怎么会输出0呢?2又为何会显示这么大的一个数呢? 解释: 1,之所以没输出5,这是C语言设计的原因。2,之所以输出0,这是计算机体系结构的问题。 具体来说: printf函数不会进行任何类型转换,它只是从内存中读出你所提供的元素的值(按照%d,%f等控制字符 阅读全文

posted @ 2017-04-09 10:55 泡面小王子 阅读(805) 评论(0) 推荐(0)

虚函数、虚指针和虚表
摘要:关于虚函数的背景知识 编译器在编译的时候,发现Base类中有虚函数,此时编译器会为每个包含虚函数的类创建一个虚表(即vtable),该表是一个一维数组,在这个数组中存放每个虚函数的地址。由于Base类和Derive类都包含了一个虚函数func(),编译器会为这两个类都建立一个虚表,(即使子类里面没有 阅读全文

posted @ 2017-04-06 15:47 泡面小王子 阅读(1099) 评论(0) 推荐(0)

组合类C++
摘要:C++中类的组合 ※组合的概念 ×类中的成员是另一个类的对象。 ×可以在已有的抽象的基础上实现更加复杂的抽象。 通过对复杂对象进行分解、抽象,使我们能够将一个复杂对象 理解为简单对象的组合。 分解得到复杂对象的部件对象,这些部件对象比它高层的复杂 对象更容易理解和实现。然后由这些部件对象来“装配”复 阅读全文

posted @ 2017-04-05 20:14 泡面小王子 阅读(435) 评论(0) 推荐(0)

关于C++中的虚拟继承的一些总结
摘要:1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下: class A 阅读全文

posted @ 2017-04-04 11:22 泡面小王子 阅读(273) 评论(0) 推荐(0)

C++中公有继承、保护继承、私有继承的区别
摘要:公有继承时基类中各成员属性保持不变,基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象只能访问基类中的public成员。 私有继承时基类中各成员属性均变为private,并且基类中private成员被隐藏。派生 阅读全文

posted @ 2017-04-01 18:41 泡面小王子 阅读(344) 评论(0) 推荐(0)