笔试面试
不要做程序员的小松鼠
愉快的调bug......
展开
-
C++字符串拷贝实现:递归方法&非递归方法
面试遇到的写代码题: 递归 char* c_copy(char* dst,const char* src) { if (*(src) =='\0') { *dst = '\0'; return dst; } *dst = *src; dst++; src++; c_copy(dst,src);原创 2016-05-09 20:13:05 · 1345 阅读 · 0 评论 -
排序算法:堆排序
堆排序1. 堆: 1. 一种完全二叉树。 2. 每个结点的值都大于或等于其左右子结点的值,大顶堆。 3. 小顶堆同理。2. 是简单选择排序的一种改进:把每次比较的结果用堆来保存起来。3. 堆排序(大顶堆): 1. 将待排序列构造成一个大顶堆。 2. 将堆顶和待排序列最后一个元素交换,也就是保存起来。 3. 将剩余的序列(去除最后一个元素)重新构造成原创 2016-05-14 10:11:06 · 601 阅读 · 0 评论 -
转圈打印二维数组
题目要求: 思路: 我的最初思路: 将矩阵的四个边作为边界,一个循环执行四次九十度转弯,用swich、case实现,当四个边界指向一个位置结束循环,但是在拐点的处理上比较麻烦。 资料参考的思路: 写一个函数,输出二维数组一圈的元素。 循环执行上个函数,也就是输出每个圈的元素。原创 2016-05-08 21:37:01 · 1849 阅读 · 0 评论 -
C++基础知识 动态链接库和静态链接库
动态链接库dll: Dynamic-link Library是一种不可执行的二进制程序文件,包含被可执行程序和其他dll调用的函数。windows中最重要的dll: Kernel32.dll:管理内存、进程、线程。User32.dll:执行用户界面任务,比如窗口的创建和消息的传送。GDI32.dll:画图和显示文本。dll不是唯一的扩展名,如linux下常常是.so。使用: 需要文件原创 2016-05-09 19:45:39 · 2007 阅读 · 0 评论 -
C++判断字符串是否为变形词
思路 遍历字符串a计算a中每个字符出现的次数计算b中相同字符的出现次数比较注意: 任一字符串为空返回false。两个字符串长度不等,可直接返回false。复杂度率高n*n,降低复杂度的方法: 使用哈希表,记录字符和出现次数。使用数组或者容器,acsII个数为256,申请256的空间即可,记录字符出现的次数。 /*题目:给定两个字符串str1和str2,如果str1和str2中原创 2016-05-09 20:59:45 · 1674 阅读 · 0 评论 -
排序算法:归并排序
归并排序1. 将若干有序序列逐步归并为一个有序序列。2. 二路归并:最简单,将若干有序序列两两归并,直至形成一个有序序列。3. 采用的分治法。4. 二路归并非递归思路: 1. 将序列分成n个序列,每个序列一个元素,这样可以任务每个序列都是有序序列。 2. 逐一合并两个相邻的序列,使得每个序列长度为2. 3. 重复步骤2,直到序列的长度为n。 4. 子序列合并过程原创 2016-05-23 21:37:50 · 4202 阅读 · 1 评论 -
哈夫曼树相关知识点总结
1.哈夫曼树:给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。2.哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。3.构造1.权值最小的两个结点,构造成一棵二叉树,该二叉树的权值为两个结点之和,并把该二叉树看成结点。2.重复1步骤。3.哈夫曼编码:字符出现次数等同于权值,是变长原创 2016-08-08 20:41:36 · 3706 阅读 · 0 评论 -
C++基础——深拷贝&浅拷贝
在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存(在堆内存中)。可以理解为深拷贝是建了一个一模一样的副本,拷贝后共有两个实体对象。而浅拷贝只是一个链接,链接的目标还是原来的对象,实体对象数目还是一个。采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误。默认生成的拷贝构造函数是浅拷贝,对任何一个对象的改变都会影响原创 2016-09-03 10:13:12 · 418 阅读 · 0 评论 -
二叉树主要知识点总结
1.二叉树第i层至多有2^(k-1)个结点(i>=1)。 2.深度为k的二叉树上,至多含2^k-1个结点(k>=1) 3.n0 = n2 + 1(度) 4.满二叉树:深度为k且含有2^k-1个结点的树。 5.完全二叉树:除最后一层外,每一层上的节点数均达到最大值;在最后一层上只缺少右边的若干结点。 (树中所含n个结点和满二叉树中编号为1至n的结点一一对应)。 6.具有n个结点的完原创 2016-05-02 20:34:59 · 6521 阅读 · 0 评论 -
排序算法:快速排序
int Partition(int r[], int first, int end){ int i=first; int j=end; //初始化第一个元素为key while (i<j) { while (i<j && r[i]<= r[j]) j--; //右侧扫描 //走到这原创 2016-05-17 21:33:55 · 446 阅读 · 0 评论 -
C++基础知识——变量存储位置
1.栈区(stack):程序运行时由编译器自动分配存放:函数的参数值,局部变量的值。存储连续,其操作方式类似于数据结构中的栈。栈区处于相对较高的地址以地址的增长方向为上的话,栈地址是向下增长的,所以空间有限,windows下大多1-2M。2.堆区(heap): 在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。存放:程序员原创 2016-05-06 10:31:09 · 1368 阅读 · 0 评论 -
C++编译链接
编译:compile,先针对单独原文件进行处理。每个cpp文件(文本形式存在的源代码)作为一个编译单元,被独立编译成一个目标文件(obj,机器语言形式),它用目标语言来描述.cpp的内容。不同CPP文件的函数可以通过声明的方式使用,通常声明放在H文件里。链接:link,把compile处理的结果组合成一个完整的可执行文件。接器将所有的目标文件obj链接起来,形成一个.exe原创 2016-05-10 19:56:46 · 525 阅读 · 0 评论 -
C++基础——vector内存释放
vector内存释放 之前看到这个问题,没有细究,过了两天被问到这个问题!!!为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。STL实现者在对vector进行内存分配时,预留了一些额外的存储区,用于存放新添加的元素。size():成员指当前拥有的元素个数。 capacity():成员指当前(容器必须分配新存储空间之前)可以存储的元素个数。内原创 2016-05-11 21:27:20 · 5067 阅读 · 0 评论 -
C++ 结构体指针的定义
struct node { …… } ; struct node *p1, *p2 ;typedef struct node { …… }Node;typedef Node* pNode;typedef struct node { ……}*pNode;原创 2016-05-02 21:49:57 · 4744 阅读 · 0 评论 -
字符串中数字子串的求和
字符串中数字子串的求和题目: 给定一个字符串str,求其中全部数字串所代表的数字之和。要求: 1.忽略小数点字符,例如“A1.3”,其中包含两个数字1和3。 2.如果紧贴数字子串的左侧出现字符‘-’,当连续出现次数为奇数时, 则数字视为负,连续出现的数量为偶数时,则数字视为正。 例如:“A-1BC--12”,其中包含数字为-1和12。例:原创 2016-05-13 21:18:35 · 1290 阅读 · 0 评论 -
C++基础知识——引用
1.引用就是变量的别名,需要用另一个变量或者对象进行初始化:int &b = a。 2.引用必须初始化,初始化时引用指向的对象必须存在。 3.引用和变量指向同一块内存,通过引用可以改变内存中的内容。 4.通常用在函数的形参定义上:void swap(int &a,int &b)。 5.引用已经指向一个对象之后,这个引用不能指向其他对象。 6.一个指向非常量的引用是不可以用字面值或者临时值进原创 2016-05-03 16:25:43 · 411 阅读 · 0 评论 -
C++基础知识——指向指针的指针
1.数组名会退化为首元素的指针,所以指针数组的名字是一个指向指针的指针: int *a[10]; int **b = a;2.由1我们可以理解二重指针为,该指针指向一个数组,这个数组的每个元素都是指针。3.当一个函数需要改变传递给它的指针的值的时候,使用多重指针,也可以用指向指针的引用作为参数(简单且安全)。在数据结构中常会用到。#include <stdio.h>#inclu原创 2016-05-03 17:13:37 · 609 阅读 · 0 评论 -
C++基础知识—常量和常成员函数
1.常量:程序运行的整个过程中,其值始终不可改变的量,const int a = 100;同int const a = 100。2.指向常量的指针:const char *c = "abc"; 与 char const *c = "abc";相同,const的修饰符是char。c[2] = 'd';//F 不能修改指向的常量c = "def";//T数组名退化为指针,指针的值可以原创 2016-05-04 17:29:21 · 797 阅读 · 0 评论 -
C++基础知识——二维数组做函数参数
1.确定大小的二维数组void Func(int array[3][10]); void Func(int array[][10]); 2.不确定大小的二维数组转为二维指针:从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,所以可以转换成二维指针。void Func(int **array, int m, int n);原创 2016-05-06 21:03:08 · 1234 阅读 · 0 评论 -
二叉排序树(Binary Sort Tree)
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;(4)没有键值相等的结点。查找: 根结点的关键字值等于查找的关键字,成功 若小于根结点的关键字值,递归查左子树。若大于根结点的关键字值,递归查右子树。 若子原创 2016-09-03 10:41:17 · 707 阅读 · 0 评论