
C/C++
文章平均质量分 78
yuhan_9204
这个作者很懒,什么都没留下…
展开
-
标准调用 C调用
函数的调用规范 函数的调用规范,也称为调用约定(Calling convention)。函数的调用规范决定了函数调用时,实参压栈、退栈及堆栈释放方式,以及函数名改编(Name Mangling)的方案,也即命名规范。 Windows环境下常用的调用规范有: 1)__cdecl:这是C/C++函数默认的调用规范,参数从右向左依次传递,压入堆栈,由调原创 2014-11-09 09:12:12 · 610 阅读 · 0 评论 -
编程题
1.原题:有20个数组,每个数组里面有500个数,升序排列,求出这10000个数中最大的500个,求复杂度。算法实现:为简化,设有5个数组,每个数组里面有10个数,升序排列,求出50个数中最大的5个数。通过分析不难求出要充分利用每个数组是升序排列。因此,我们可以从每个数组中取各自数组中的最大数,由此,得到一个数组,该数组中的元素有20个。接下来,需要对这20个数字求出最大值,如果利用冒泡或者选原创 2015-06-17 18:41:42 · 384 阅读 · 0 评论 -
递归算法详解
C语言通过运行时堆栈来支持递归的调用,在我们刚接触递归的时候,国内很多教材都采用求阶乘和菲波那契数列来描述该思想,就如同深受大家敬爱的国产的C语言程序设计,老谭也用了阶乘来描述递归,以至于很多新手一看见阶乘就理所当然的认为是递归,坑了不少人,说实在的,描述这个思想还是可以,但是利用递归求阶乘可是没有一点好处,递归解决菲波那契数列效率更是低得惊人,这点是显而易见的!废话不多说,接下来我们进入正题!(原创 2014-10-17 08:48:47 · 321 阅读 · 0 评论 -
程序员面试宝典 6 - 预处理、const 与sizeof
1.宏定义(1)用预处理指令#define 声明一个常数,泳衣表明1年中有多少米哦啊(忽略闰年问题)#define SECONDS_PER_YEAR (60*60*24*360)UL //小心溢出,用long (2).写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。#define MAX(A,B) (A)2.const(1).#include"std原创 2015-06-05 11:31:43 · 403 阅读 · 0 评论 -
程序员面试宝典第五章 程序设计基本概念
5.1赋值语句1.#includeusing namespace std;int i=1;int main(){ int i=i; //后面的i为main()函数定义的i,未定义值 cout<<i; }输出: i = 2025146132 2.#includeusing namespace std;int main(){ int x=2,y ,原创 2015-06-03 12:56:15 · 565 阅读 · 0 评论 -
程序员面试宝典 7 - 指针与引用
指针基本问题指针和引用的差别 ★相同点: 都是地址的概念; 指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。 ★ 区别: 指针是一个实体,而引用仅是个别名; 引用使用时无需解引用(*),指针需要解引用; 引用只能在定义时被初始化一次,之后不可变;指针可变; 引用没有 const,指针有 const,const 的指针不可原创 2015-06-06 17:34:08 · 701 阅读 · 0 评论 -
面试题集锦 1
1.为什么栈会溢出? ——我举了个例子比如整形的数大小是有上限的,如果定义了比最大值大的数赋给了整形变量,此时就会越界。 【百度百科】:堆栈溢出就是不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界,结果覆盖了老的堆栈数据。举例如下:[cpp] view plaincopy原创 2015-06-04 22:07:59 · 388 阅读 · 0 评论 -
程序员面试宝典 实现正确匹配(即数组中某值与B中某值相等) P93
面试宝典中87页中面试例三,不再叙述原题。大意即是有两个数组a和b,两个数组的元素相同,但是顺序不同,写一个算法求出数组a和数组b中元素之间的对应关系。题意要求不能对同一个数组中的两个元素进行比较,也不能去取数组元素中的特定值进行比较。只能进行a和b元素之间的比较。利用双重循环的时间复杂度为O(n^2),根据书中提示的优化方法定义一下数据结构利用快排的思想和二分查找的思想对数组进行比较原创 2015-06-08 17:32:37 · 1030 阅读 · 0 评论 -
C++继承:公有,私有,保护
#includeusing namespace std;//////////////////////////////////////////////////////////////////////////class A //父类{private: int privatedateA;protected: int protecteddateA;public:转载 2015-07-01 20:08:41 · 262 阅读 · 0 评论 -
2012年10月份,百度笔试题
一、简答题1、列举几个常见的哈希算法,简述哈希算法的主要用途http://blog.youkuaiyun.com/zxycode007/article/details/6999984这篇文章介绍的很清楚了。主要用途:查找关键字、文件校验、数字签名2、描述OSI的7层架构,并指出HTTP、UDP、ARP协议在那一层?应用层:为应用程序提供网络服务表示层:确转载 2015-07-09 20:48:27 · 355 阅读 · 0 评论 -
char str[]与char *str的区别
在C语言中,对字符串的操作主要有两种方式,一是使用字符数组,char str[];二是使用字符指针。那么二者有什么区别呢?下面将分述二者的使用,最后进行比较。一、字符数组 使用char str[]定义一个字符数组str,中括号内可以写上数字表示数组大小,也可以不写。如果不写数字,则必须为字符数组提供初始值,以便编译器进行内存分配。可转载 2015-06-11 16:47:09 · 444 阅读 · 0 评论 -
程序员面试宝典 zigzag数组问题 p92 new二维数组
由于对同一斜线上的元素,s=i+j为常数1.对于第n个(n每一斜线个数比上一行多一个,则每一斜线的第一个值表示了在该斜线之前元素的个数,即一个累加 :(s+1)*s/2斜线中的任意元素可表示为s*(s+1)/2+i2.同理对于第n个(n>=N)的斜线:每斜线的元素个数开始减少,等差数组不适用,为方便起见,可以用减法计算元素个数,剩余元素的斜线原创 2015-06-08 15:41:12 · 611 阅读 · 0 评论 -
C++ 三大函数该写就要写
记得C++ 沉思录上说过,如果数据成员有指针类型的,最好把三大函数补全,不然的话容易产生浅拷贝和内存泄露。这里给出一个简单的例子。#include #include #include #include using namespace std;class CDemo{public: CDemo():str(new char[1]) {转载 2015-06-11 19:07:00 · 392 阅读 · 0 评论 -
多线程 handle
#include #include using namespace std;DWORD WINAPI Fun1(LPVOID lpParameter);DWORD WINAPI Fun2(LPVOID lpParameter);int index = 0;int tickets = 100; //全局变量tickets用来表示销售的剩余票数HANDLE hMutex;int原创 2015-06-16 09:54:28 · 474 阅读 · 0 评论 -
程序员面试宝典9 -STL模板与容器
1.#include#includeusing namespace std;void print(vector v){ cout<<v.size()<<endl; for(vector::iterator iter =v.begin();iter!=v.end();iter++) cout<<*iter<<" "; cout<<endl<<endl;}int sum(v原创 2015-06-11 20:50:27 · 453 阅读 · 0 评论 -
关于全排列算法的思考
http://blog.sina.com.cn/s/blog_6fb300a30100mvzp.html已经是求职过程中第三次碰到这个问题了,笔试两次,又面了一次,觉得这个问题确实值得深思啊。我还是尽量总结下吧,说不定以后还会碰到。问题:已知输入为一个字符串,求其全排列的输出。比如输入为abc,那么输出有以下几种:abcacbbacbcacabcba转载 2015-03-05 21:11:05 · 474 阅读 · 0 评论 -
[C++]数据结构:最大堆MaxHeap的创建与使用
首先先介绍一下最大树的概念。最大树是每个节点的值都要大于或等于其子节点的值的树。而最大堆就是最大的完全二叉树。因为最大堆是完全二叉树,所以拥有n个元素的堆的高度为[log2(n+1)]。因此如果可以在O(height)的时间内完成插入和删除操作,则其复杂度为O(log2n)。下面是一个最大堆的图例。这里的第一层和第二层是标记第几层子节点,并不是树的第几层。转载 2015-06-18 09:55:52 · 1402 阅读 · 0 评论 -
位域
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位转载 2014-10-30 21:43:07 · 317 阅读 · 0 评论 -
字符匹配kmp算法
字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。 这种算法不太容转载 2014-11-03 09:25:57 · 356 阅读 · 0 评论 -
快速排序 解析
快速排序法原理也是用了分治法,主要原理是将数组分为A[p..q-1] 和A[q+1..r],然后调整元素使得A[p..q-1]小于等于q,也小于等于A[q+1..r]。然后不断的递归,到最后就排序完成。上代码:[cpp] view plaincopy// QuickSort.cpp : 定义控制台应用程序的入口点。 //转载 2014-10-14 10:18:48 · 260 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两转载 2014-10-18 08:19:56 · 316 阅读 · 0 评论 -
vector
vector c;c.back(); //fanhu原创 2014-10-11 09:23:09 · 283 阅读 · 0 评论 -
stack,deque,queue对比
stack堆栈,没有迭代器,支持push()方法。后进先出,top()返回最顶端的元素,pop()剔除最顶元素deque双端队列,支持迭代器,有push_back()方法,跟vector差不多,比vector多了个pop_front,push_front方法queue队列,先进先出,不支持迭代器,有push()方法,pop()剔除第一个元素,front()返回第一个元素代码原创 2014-12-17 09:31:13 · 418 阅读 · 0 评论 -
寻找最小的K个数—yuan
1.快速排序,找到第K个最小的数,输出1到K。 /* 对三种情况进行处理:(m = pos - left + 1) 1、如果m=k,即返回的主元即为我们要找的第k小的元素,那么直接返回主元array[i]即可; 2、如果m>k,那么接下来要到低区间array[left....pos-1]中寻找,丢掉高区间; 3、如果m#include原创 2014-12-01 10:54:17 · 465 阅读 · 0 评论 -
每天一算法
1.给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数要求下排每个数都是先前上排那十个数在下排出现的次数。上排的十个数如下:【0,1,2,3,4,5,6,7,8,9】举个例子,上排数值: 0,1,2,3,4,5,6,7,8,9下排数值: 6,2,1,0,0,0,1,0,0,00在下排出现了6次,1在下排出现了2次,2在下排出现了1次,3在下排原创 2014-10-09 09:43:04 · 563 阅读 · 0 评论 -
二叉树
1. a / \ b c /\ / e f g原创 2014-10-20 09:02:59 · 269 阅读 · 0 评论 -
VS2010下创建静态链接库和动态链接库
下面介绍一下用VS2010如何创建静态链接库和动态链接库,并测试创建的库。1.静态链接库打开VS2010,新建一个项目,选择win32项目,点击确定,选择静态库这个选项,预编译头文件可选可不选。在这个空项目中,添加一个.h文件和一个.cpp文件。名字我们起为static.h和static.cppstatic.h文件:[cpp] view转载 2015-01-26 15:44:45 · 322 阅读 · 0 评论 -
删除链表给定元素值
#include using namespace std;struct Node{ int data; Node *next;};void LinkedListInit(){ Node *L; L = new Node[sizeof(Node)]; if(L == NULL) //判断是否有足够的内存空间 print原创 2015-05-09 10:39:00 · 420 阅读 · 0 评论 -
关于static类成员变量
一直以为对static成员变量还算了解。直到昨晚看了《Effective C++》3rd Item49,才发现自己其实什么都不懂,真是惭愧!所以写下这篇随笔,为以后定期回顾参考,也希望大家不要犯类似的错误。先看以下代码:#include using namespace std;class Base{ static int itest;转载 2015-05-06 16:15:18 · 555 阅读 · 0 评论 -
字符串的全排列和组合算法
一、字符串的排列用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列,如 abc 的全排列: abc, acb, bca, dac, cab, cba一、全排列的递归实现为方便起见,用123来示例下。123的全排列有123、132、213、231、312、321这六种。首先考虑213和321这二个数是如何得出的。显然这二个都是123转载 2015-08-25 14:24:10 · 441 阅读 · 0 评论