![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试题库
文章平均质量分 56
mmoojing
这个作者很懒,什么都没留下…
展开
-
[开心IT面试题] 包含min函数的栈
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。思路:在栈结构体中添加一个min最小值的变量,可以随时读取。 1.存储结构typedef int SElemType; //变量类型typedef struct LinkStackNode{ SElemT原创 2014-06-15 16:21:15 · 379 阅读 · 0 评论 -
[开心IT面试题] 堆排序
1、基本思想将数组划分成无序区和有序区,利用大根堆或小根堆思想。1)首先将无序区elem[0,n-1]建立大根堆,然后将堆首elem[0]与堆尾elem[n-1]交换,堆尾之后为有序区。2)将新的无序区elem[0,n-2]调整为大根堆,然后将堆首elem[0]与堆尾elem[n-2]交换,堆尾进入有序区。3)将新的无序区elem[0.n-3]调整为大根堆……重复操作,直到无序区只原创 2013-12-31 21:39:07 · 699 阅读 · 0 评论 -
[开心IT面试题] C语言基础二
1 下面四个选项中,均是非法常量的选项是( )。A)'as' B)'\\' C)-0x18 D)0xabc -0fff '\01' 01177 '\0' '\0a' 12,456 0xf "a" 2 下面四个选项原创 2013-12-23 22:01:43 · 947 阅读 · 0 评论 -
[开心IT面试题] 队列的顺序表、链表实现
C++面试题中很大一个板块——数据结构,主要包括线性表、栈、队列、字符串、二叉树等等,今天我们说说队列。一、概念 队列是限定性线性表,只允许在表的一端插入元素,而在另一端删除元素的线性表。允许删除一端称为队头,允许插入一端称为队尾;队列的特性是先进先出。队列的存储方式有两种:顺序存储结构和链式存储结构。二、顺序存储结构 用一组连续的存储单元依次存放自队头原创 2013-12-22 16:14:16 · 678 阅读 · 0 评论 -
[开心IT面试题] 栈和队列系列
1、栈的基本操作答案:http://blog.csdn.net/mmoojing/article/details/17315955原创 2013-12-14 17:38:18 · 281 阅读 · 0 评论 -
[开心IT面试题] 栈的顺序栈、链栈实现
C++面试题中很大一个板块——数据结构,主要包括线性表、栈、队列、字符串、二叉树等等,今天我们说说栈。一、概念 栈是限定性线性表,限制在表的一端进行插入和删除的线性表。允许插入、删除的一端称为栈顶,栈顶的当前位置是动态变化的,只能在栈顶对栈进行操作;不允许插入、删除的另一端称之为栈底,栈底是固定不变的,当表中没有元素时称为空栈。栈的存储方式有两种:顺序存储结构和链式存储结构。原创 2013-12-14 16:06:33 · 802 阅读 · 0 评论 -
[开心IT面试题] 冒泡排序
1、基本思想将数组划分为有序区和无序区,不断通过交换将较大元素移至无序区尾。若在某一趟排序中未发生交换事件时,或无序区已全部排序完时,则排序完毕。2、最优情况:(待排序数组是正序)只用比较一次就行了。复杂度O(n)。最差情况:(待排序数组是逆序)要比较n^2次才行,复杂度O(n^2)。3、冒泡排序属于稳定的排序。最坏时间复杂度O(n^2),最好时间复杂度O(原创 2013-12-29 23:03:36 · 725 阅读 · 0 评论 -
[开心IT面试题] 直接插入排序
1、基本思想将数组分为无序区和有序区,依次将无序区的元素按大小顺序插入到有序区中的适当位置,直到把无序区中元素全部移到有序区时排序完毕。第一趟比较前两个数,然后把第二个数按大小插入到有序区中;第二趟把第三个数与前两个数从后向前扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。2、最优情况:(待排序数组已是有序数组)将无序原创 2013-12-29 15:27:13 · 581 阅读 · 0 评论 -
[开心IT面试题] 希尔排序
1、基本思想希尔排序又称增量缩小排序,是对直接插入排序的一种改进,分组插入方法。先将序列按增量划分为元素个数相同的若干组,使用直接插入排序法进行排序,然后不断缩小增量直至为1,最后使用直接插入排序完成排序。 2、假设待排序数组为[2 6 1 5 3 8 9 4],增量取4、2和1第一趟待排序数组可分成以下四个虚拟组:2和3一组;6和8二组;1和8三组;5和4四组并不是原创 2013-12-29 20:31:16 · 688 阅读 · 0 评论 -
[开心IT面试题] 直接选择排序
1、基本思想 将数组划分为有序区和无序区,寻找无序区中的最小值和无序区的首元素交换,有序区扩大一个,循环至无序区全部交换完时,则排序完毕。2、直接选择排序属于不稳定的排序。时间复杂度都是O(n^2),空间复杂度O(1)。3、代码将elem[]数组按递增进行直接选择排序void SelectSort(int elem[], int elemLen)原创 2013-12-31 20:16:43 · 612 阅读 · 0 评论 -
[开心IT面试题] 快速排序
1、基本思想首先任意选择一个数据做为划分数组的参照数,将所有比参照数小的数移到它前面,将所有比参照数大的数移到它后面。然后再分别对参照数两边继续进行排序,以达到整个序列有效。1)以第一个数组元素作为参照数、以left、right分别做为数组第一个数和最后一个数的标记。2)从right位置开始向前找,找到第一个小于参照数的数,然后将此数赋给left位置。3)从left位置开始向后找,原创 2013-12-30 23:12:23 · 668 阅读 · 0 评论 -
[开心IT面试题] 排序系列
6、堆排序答案:http://blog.csdn.net/mmoojing/article/details/177167255、直接选择排序答案:http://blog.csdn.net/mmoojing/article/details/177163754、快速排序答案:http://blog.csdn.net/mmoojing/article/details/原创 2013-12-29 20:36:20 · 228 阅读 · 0 评论 -
[开心IT面试题] 链表系列
8、n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。答案:http://blog.csdn.net/mmoojing/article/details/171924457、给定两个非环原创 2013-12-08 13:02:18 · 224 阅读 · 0 评论 -
[开心IT面试题] C语言基础一
1 下列四组选项中,均不是C语言关健字的选项是( )。A)define B) gect C) include D) while IF char scanf go type printf case pow 2 下面四个选项中,均是合法原创 2013-12-23 21:29:44 · 950 阅读 · 0 评论 -
[开心IT字符串] 反转字符串
题目: 用C语言实现反转字符串strrev()函数。 思想: 循环,依次将第一个字符和最后一个字符交换,第二个字符和倒数第二个字符交换…(终止符“\0”不动) 面试提问字符串的操作,主要是考察几点:一对指针和字符串的理解,二是是否进行合法性检查,三是返回值是否是恰当。 代码:char *ReverseString(char *string){原创 2014-01-16 18:09:07 · 741 阅读 · 0 评论 -
[开心IT面试题] 找出字符串最长的数字串
题目:写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,outputstr所原创 2014-02-03 22:07:28 · 1492 阅读 · 1 评论 -
[开心IT面试题] 面试题汇总
一、链表系列1、单链表基础2、单链表排序、反转3、找出单链表的倒数第k个元素4、找出单链表的中间元素5、给定单链表,检测是否有环6、有两个有序链表,各自内部是有序的,但是两个链表之间是无序的,合并两个链表。7、*给定两个非环单链表(first, second),检测两个链表是否有交点,如果有返回第一个交点。8、n个数字(0,1,…,n-1)形成一个圆圈,从数字0原创 2014-01-05 17:21:45 · 2074 阅读 · 1 评论 -
[开心IT面试题] 删除子字符串
题目: 只要是原字符串中有相同的子串就删掉,不管有多少个,返回子串个数。 代码:int Delete_Sub_Str(const char *str, const char *sub_str, char *result){ if(str == NULL || sub_str == NULL) { return 0; } //记录子字符串出现次数 int原创 2014-03-19 15:53:43 · 623 阅读 · 0 评论 -
[开心IT面试题] 拷贝字符串
题目: 用c语言实现拷贝字符串strcpy()函数。将字符串一逆向拷贝到字符串二中。 思路: 将字符串一从右到左逐一拷贝到字符串二中。 代码:char *StringReverseCopy(char *strDest, char *strSrc){ if(strDest == NULL || strSrc == NULL) {原创 2014-03-05 16:19:38 · 692 阅读 · 0 评论 -
[开心IT面试题] 比较两个字符串
题目: 用C语言实现比较两个字符串strcmp()函数。思路: 两个字符串从左向右逐个比较字符,当遇到不同的字符或“\0"终止符时比较终止。 当两个字符串相等时返回0,若两个字符串不相等时返回第一个不相等字符的值差。 代码:int StringCompare(char *str1, char *str2){ //当str1 == str2时,返原创 2014-02-20 10:33:06 · 715 阅读 · 0 评论 -
[开心IT面试题] 字符串的左旋转操作
题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。思路:因为要求辅助内存只是1,所以可以通过反转字符串完成。字符串分为两部分,用AB表示,A代表需要左旋转的部分,B代表剩下的部分。首先分别原创 2014-02-13 13:50:54 · 681 阅读 · 0 评论 -
[开心IT面试题] 找出字符串中第一个只出现一次的字符
题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。为了简单起见,假设字符串都是小写字母。思想:先遍历一遍,用一个数组统计每一个字符出现的次数。然后再从字符串的开头开始找出第一个仅出现一次的字符。代码:void FirstAppear(char *outputCh, char *intputstr){ if(in原创 2014-02-11 17:23:59 · 1232 阅读 · 0 评论 -
[开心IT面试题] 翻转句子中单词的顺序
//将字符串中从left到right的子字符串反转char *ReverseString(char *string, int left, int right){ if((string == NULL) || (left == right)) { return string; } char ch; int i = left;//标记要反转的原创 2014-01-21 10:35:03 · 873 阅读 · 1 评论 -
[开心IT面试题] 斐波那契数列
题目:定义Fibonacci数列如下: 0 n=0f(n) = 1 n=1 f(n-1)+f(n-2) n=2输入n,用最快的方法求该数列的第n项。代码: 用递推法替换递归法,用空间换取时间。int Fibonacci(int n){ int sum = 0;原创 2014-02-01 10:08:41 · 920 阅读 · 0 评论 -
[开心IT面试题] 不用乘法或加法增加8倍,用同样的方法增加7倍
题目:不用乘法或加法增加8倍,用同样的方法增加7倍。 解决:利用位运算来实现,左移一位扩大两倍,右移一位缩小两倍。假设数据为X。增加8倍:X 增加7倍:(X > 1原创 2014-01-16 14:38:26 · 941 阅读 · 0 评论 -
[开心IT面试题] 查找最小的K个元素(数组)
题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。原创 2014-01-16 12:36:26 · 607 阅读 · 0 评论 -
[开心IT面试题] 求字符串长度
题目: 用C语言实现求字符串长度strlen()函数。 思路: 遍历一遍字符串里所有字符,当遇到“\0"字符串终止符时退出。 代码:int StringLength(char *string){ int stringLen = 0; if(string != NULL) { while(*string++ != '\0'原创 2014-01-16 17:50:53 · 782 阅读 · 0 评论 -
[开心IT面试题] realloc用法
C++面试题中另一个大板块——内存管理,主要有malloc(free)、new(delete)、calloc、realloc等。今天来说说realloc的用法。1、头文件#include stdlib.h> 有些编译器需要#include ,在TC2.0中可以使用alloc.h头文件2、realloc()函数原型void *realloc(void *mem_a原创 2013-12-16 23:47:52 · 1021 阅读 · 0 评论 -
[开心IT面试题] 逻辑推理系列
5、有4张红色的牌和4张蓝色的牌,主持人先拿任意两张,再分别在A、B、C三人额头上贴任意两张牌,A、B、C三人都可看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色牌,A说不知道,B说不知道,C说不知道,然后A说知道了。请教如何推理,A是怎么知道的?答案:http://blog.csdn.net/mmoojing/article/details/17098611原创 2013-12-08 12:59:46 · 239 阅读 · 0 评论 -
[开心IT面试题] C实现大整数四则运算
由于经常要处理一些大数据的运算,用整型不够,所以用c语言实现了大整数四则运算。废话就不多说,直接贴代码,代码中有注释。 #define BIT_TOTAL 500typedef struct{ char BigInt[BIT_TOTAL]; bool isNegative;}BIGINT;void Reverse(char nData[]){ ch原创 2013-11-14 22:39:36 · 799 阅读 · 0 评论 -
[开心IT面试题] 爬楼梯问题升级版
题目:如果每次可以往上爬1个或2个或3个台阶,不能往下走,从第0个台阶开始,爬到第n个台阶有多少种方案?举例:当n = 1时,有1种方案。当n = 2时,有2种方案当n = 3时,有4种方案。方案一:每次爬1个台阶,爬三次方案二:第一次爬1个台阶,第二次爬2个台阶方案三:第一次爬2个台阶,第二次爬1个台阶方案四:爬一次,一次3原创 2013-11-15 14:08:38 · 848 阅读 · 0 评论 -
[开心IT面试题] 不使用关键字,求和1+2+…+n
题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。 思路:不能使用关键字, 可以使用递归。但是使用递归存在终止递归的问题,也就是如何把n变成终止条件。可以把n转换成布尔值 。对n连续做两次反运算,即!!n,非零的n转换成true,0转换成false。 代码:int S原创 2013-11-17 15:37:34 · 743 阅读 · 0 评论 -
[开心IT面试题] 单链表排序、反转
一、单链表排序 仿照基于数组的冒泡排序算法Node* Sorting_LinkList(Node* node){ if(node == NULL || node->next == NULL) { return node; } Node* result; int temp = 0; int len = Lengt原创 2013-11-20 11:37:48 · 660 阅读 · 0 评论 -
[开心IT面试题] 找出单链表的中间元素
题目:找出单链表的中间元素 思路:建立两个单链表。让第一个每次走两步,第二个每次走一步,当第一个走完时,第二个刚好走到中间。 代码:Node *FindMiddle(Node *node){ Node *first, *second; first = node; second = node; while(first->next != NULL原创 2013-11-23 22:09:28 · 1086 阅读 · 0 评论 -
[开心IT面试题] 1001个数字组成的数组中,找出重复的数字
题目:假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。此外,除一个数字出现两次外,其他所有数字只出现一次。假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。如果你在运算中使用了辅助的存储方式,那么你能找到不用这种方式的算法吗? 思路:使用了辅助的存储方式:假设1001个数组组成的原创 2013-12-09 22:19:36 · 845 阅读 · 0 评论 -
[开心IT面试题] 字符串系列
1、输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。答案:http://blog.csdn.net/mmoojing/article/details/17151921原创 2013-12-08 13:01:53 · 234 阅读 · 0 评论 -
[开心IT面试题] 逻辑推理系列
1、有4张红色的牌和4张蓝色的牌,主持人先拿任意两张,再分别在A、B、C三人额头上贴任意两张牌,A、B、C三人都可以看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色的牌,A说不知道,B说不知道,C说不知道,然后A说知道了。请教如何推理,A是怎么知道的?答案:http://blog.csdn.net/mmoojing/article/details/17098611原创 2013-12-07 22:53:37 · 47 阅读 · 0 评论 -
[开心IT面试题] 关于50个人50条狗有几条病狗的推算
题目:村子里有50个人,每人有一条狗,在这50条狗中有病狗(这种病不传染),于是人们要找出病狗。每个人可以观察其他49条狗,以判断他们是否生病,(如果有病一定能看出来),只有自己的狗不能看,观察后得到的结果不得交流,也不能通知病狗的主人。主人一旦推算出自己家的狗是病狗就得枪毙自己家的狗(发现后必须在一天内枪毙),而且每个人只有权利枪毙自己的狗,没有权利打死其他人的狗。第一天大家原创 2013-11-05 21:12:43 · 2330 阅读 · 0 评论 -
[开心IT面试题] 根据上排给出十个数,在其下排填出对应的十个数
题目:根据上排给出十个数,在其下排填出对应的十个数要求下排每个数都是先前上排那十个数在下排出现的次数。上排的十个数如下:[0,1,2,3,4,5,6,7,8,9]解答:1)设下排数为[a0, a1, a2, a3, a4, a5, a6, a7, a8, a9]a0表示为0在下排出现的次数,以此类推……a9表示为9在下排出现的次数。2)不管上排10个数分原创 2013-11-07 16:20:31 · 752 阅读 · 1 评论 -
[开心IT面试题] 猜自己额头上是什么颜色的牌
题目:有4张红色的牌和4张蓝色的牌,主持人先拿任意两张,再分别在A、B、C三人额头上贴任意两张牌,A、B、C三人都可以看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色的牌,A说不知道,B说不知道,C说不知道,然后A说知道了。请教如何推理,A是怎么知道的?思路:额头上两张牌的组合情况有三种:红红,红蓝,蓝蓝基本规则:首先A说不知道,说明B和C头上所有原创 2013-12-05 22:15:59 · 1317 阅读 · 0 评论