C++
shaonian7812
这个作者很懒,什么都没留下…
展开
-
设计包含min函数的栈(栈)
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。 要求函数min、push以及pop的时间复杂度都是O(1)。 #include #include using namespace std;templateclass MinStack{private:stack stackA;stack stackB;public:void pus原创 2013-03-31 21:20:26 · 350 阅读 · 0 评论 -
递归和非递归俩种方法实现二叉树的前序遍历
#includeusing namsapce std;typedef struct BiNode{ struct BiNode* lchild; struct BiNode* rchild; char data;}BiNode,*BiTree;递归:void preOrder(BiTree root){ if(NULL==root原创 2013-04-09 15:28:33 · 393 阅读 · 0 评论 -
2010年中兴面试题
输入两个整数n和m,从数列1,2,3.......n中随意取几个数,使其和等于m,要求将其中所有的可能组合列出来.#include #include using namespace std;int Sum(vector v){ int sum = 0; for(int i = 0;i<v.size();i++) sum+=v[i]; return sum;}原创 2013-04-09 22:59:31 · 437 阅读 · 0 评论 -
二分查找
.微软:一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个#include using namespace std;int BiSearch(int* arr,int s,int t,int k){ if(t<s) return -1; int m = s+(t-s)原创 2013-04-09 16:30:39 · 361 阅读 · 0 评论 -
查找最小的k 个元素
题目:输入n个整数,输出其中最小的k 个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。解决方案:利用堆;#include #include using namespace std;bool func(int a,int b){ return a>b;}void findKNum(int *arr,int n,int k){原创 2013-04-09 19:44:18 · 384 阅读 · 0 评论 -
二叉树节点的最远距离
求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度分析: 一、查找二叉树 二、带父节点的二叉树 三、普通二叉树另外的题目,求两个节点的最近父节点。分析: 一、查找二叉树 二原创 2013-04-11 15:37:02 · 564 阅读 · 0 评论 -
二叉树求两个节点的最近的父节点
求两个节点的父节点大体分两种方法:typedef struct BiNode{ struct BiNode *lchild,*rchild; int data;}BiNode,*BiTree;第一种是直接递归寻找:BiNode* findConmmonFather(BiTree root,char a,char b){ i原创 2013-04-14 18:53:45 · 433 阅读 · 0 评论 -
复制复杂的链表
新颖的链表的复制: typdef struct Node { struct Node *next; struct Node *sbling; int data; }Node,*LNode; LNode clone(LNode head) { if(原创 2013-04-14 20:06:24 · 509 阅读 · 0 评论 -
c++ 命令模式
命令模式的设计:关键是将一个请求封装到一个command的类中,在提供处理对象Receiver;最后command命令有invoke激活class Receive{ public: void execute() { }}class Command{ private:Receive *m_re; public:原创 2013-04-27 16:53:26 · 358 阅读 · 0 评论 -
C++面试题
1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要原创 2013-06-13 14:05:31 · 536 阅读 · 0 评论 -
类型转换函数
C++程序兼容C语言的转化,但是针对面向对象语言的特性,设计了以下几个类型转换操作符。他们的出现是为了C语言类型转换中语义模糊和固有的危险陷阱,因为C语言不去判断所要操作的类型转换是否合理。static_cast:用于非多态类型的转换。dynamic_cast:用于多态类型的转换。const_cast:用来消除const, volatile, __unaligned属性的转换。re原创 2013-06-13 14:53:18 · 383 阅读 · 0 评论 -
C++虚函数的原理
C++虚函数的原理理解虚函数( virtual function )的几个关键点:1. 理解早绑定(early binding)、晚绑定(late binding)。所谓early binding:On compile time,就能明确一个函数调用是对哪个对象的哪个成员函数进行的,即编译时就晓得了确定的函数地址;所谓late binding:O转载 2013-09-07 22:19:30 · 274 阅读 · 0 评论 -
new 对象详细过程
new详细过程是:先分配内存空间,调用构造函数进行初始化,返回指针。A * a = new A(3);相当于A*a = (A*)malloc(sizeof(A));a->A::A(3);return a原创 2013-10-03 19:54:44 · 526 阅读 · 0 评论 -
内存池 C++
引言本书主要针对的是 C++ 程序的性能优化,深入介绍 C++ 程序性能优化的方法和实例。全书由 4 个篇组成,第 1 篇介绍 C++ 语言的对象模型,该篇是优化 C++ 程序的基础;第 2 篇主要针对如何优化 C++ 程序的内存使用;第 3 篇介绍如何优化程序的启动性能;第 4 篇介绍了三类性能优化工具,即内存分析工具、性能分析工具和 I/O 检测工具,它们是测量程序性能的利器。转载 2013-10-03 16:10:29 · 391 阅读 · 0 评论 -
append
.请修改append函数,利用这个函数实现:两个非降序链表的并集,1->2->3和2->3->5并为1->2->3->5另外只能输出结果,不能修改两个链表的数据。#include using namespace std;typedef struct Node{ struct Node* next; int data;}Node,*LNode;Node* append(原创 2013-04-09 15:15:10 · 520 阅读 · 0 评论 -
在从1到n的正数中1出现的次数
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。#include using namespace std;class CountOne{private: int num; int len;public: CountOne(int num):num(num) { len = 0; int n = num; while(n) { len原创 2013-04-08 09:50:41 · 327 阅读 · 0 评论 -
查找最小的k个元素
题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。Solution:#include#includeusing namespace std;bool cmp(int a,int b){ return a<b;};void findMinK(int *arr,int n,int k){原创 2013-04-01 14:31:21 · 357 阅读 · 0 评论 -
判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:8/ \6 10/ \ / \57911因此返回true。如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。bool isPostResult原创 2013-04-01 16:35:55 · 347 阅读 · 0 评论 -
把二元查找树转变成排序的双向链表
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。10/ \6 14/ \ / \4 81216solution:#include using namespace std;typedef struct BiNode{ struct BiNode* lchild; st原创 2013-04-01 09:15:32 · 403 阅读 · 0 评论 -
输入一个整数和一棵二元树
输入一个整数和一棵二元树从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22和如下二元树10/ \5 12/ \4 7则打印出两条路径:10,12和10,5,7。#include #include using namespace std;typedef struct BiNode{原创 2013-04-01 10:26:54 · 1702 阅读 · 0 评论 -
翻转句子中单词的顺序
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如输入“I am a student.”,则输出“student. a am I”。#include using namespace std;class Reverse{private: char *str; int len原创 2013-04-02 08:47:58 · 338 阅读 · 0 评论 -
求1+2+…+n
要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)#include using namespace std;class Sum{private: static int i; static int sum;public: Sum() { i++; sum+=i; } static void print()原创 2013-04-02 09:19:53 · 463 阅读 · 0 评论 -
输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印
例如输入 8 / \ 6 10 / \ / \ 5 7 9 11 输出8 6 10 5 7 9 11。以下代码是用字母代替数字,便于查看#include using namespace std;typedef struct BiNode{ struct BiNode* lchild,*rchild; char data;}B原创 2013-04-02 20:44:22 · 393 阅读 · 0 评论 -
在一个字符串中找到第一个只出现一次的字符
如输入abaccdeff,则输出b。#includeusing namespace std;class FirstChar{private: int hashTable[256];private: void initial() { for(int i=0;i<256;i++) hashTable[i] = 0; }public: FirstChar() {原创 2013-04-02 21:38:41 · 305 阅读 · 0 评论 -
n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始
#include using namespace std;int findLastNum(int k,int n){ int t; int begin = 0; int* arr = new int[n]; for(int i = 0;i arr[i] = i; int count = 0; //i = 0; while(count {原创 2013-04-03 16:38:47 · 413 阅读 · 0 评论 -
合并链表
typedef struct Node{ struct Node* next; int data;}Node,*LNode;void combine(LNode &head,LNode aL,LNode bL){ if(NULL==aL) { head = bl; return; } if(NULL==bl) { head =al; return; } N原创 2013-04-05 15:36:51 · 342 阅读 · 0 评论 -
写一个函数,它的原形是int continumax(char*outputstr,char*intputstr)
功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:"abcd12345ed125ss123456789"的首地址传给intputstr 后,函数将返回9,outputstr所指的值为123456789#include using namespace std;int continueMax(原创 2013-04-05 16:00:02 · 491 阅读 · 0 评论 -
整数的二进制表示中1的个数
输入一个整数,求该整数的二进制表达中有多少个1unsigned int countOne(int num){ unsigned int k = 0; while(num) { if(num&&0x00000001==1) k++; num = num>2; } return k;}原创 2013-04-05 16:48:13 · 414 阅读 · 0 评论 -
左旋转字符串(字符串)
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。 要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。 void reverseStr(char*& input,int k){ if(NULL == input||k<=0) return;原创 2013-04-05 16:19:08 · 297 阅读 · 0 评论 -
物理内存管理(页管理)
Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数4k(在i386体系结构中)大小页,从而分配和回收内存的基本单位便是内存页了。利用分页管理有助于灵活分配内存地址,因为分配时不必要求必须有大块的连续内存[1],系统可以东一页、西一页的凑出所需要的内存供进程使用。虽然如此,但是实际上系统使用内存还是倾向于分配连续的内存块,因为分配连续内存时,页表不需要更改,因此能降低TLB的刷新原创 2013-09-25 16:20:50 · 975 阅读 · 0 评论