一、链表系列
1、单链表基础
2、单链表排序、反转
6、有两个有序链表,各自内部是有序的,但是两个链表之间是无序的,合并两个链表。
7、*给定两个非环单链表(first, second),检测两个链表是否有交点,如果有返回第一个交点。
8、n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,
每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。
二、栈和队列系列
1、*栈的顺序栈、链栈实现
2、*队列的顺序表、链表实现
3、定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
三、数组系列
要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。
2、假设你有一个用1001个整数组成的数组,这些整数是任意排列的,
假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。
如果你在运算中使用了辅助的存储方式,那么你能找到不用这种方式的算法吗?
例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。
四、字符串系列
4、输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”。
5、写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)
功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,
并把这个最长数字串付给其中一个函数参数outputstr所指内存。
例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,
6、在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
7、定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。
要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。
9、用C语言实现拷贝字符串strcpy()函数。将字符串一逆向拷贝到字符串二中。
10、只要是原字符串中有相同的子串就删掉,不管有多少个,返回子串个数。
五、排序系列
1、直接插入排序
2、希尔排序
3、冒泡排序
4、快速排序
5、直接选择排序
6、堆排序
六、内存管理
七、常见面试题
1、如果每次可以往上爬1个或2个或3个台阶,不能往下走,从第0个台阶开始,爬到第n个台阶有多少种方案?
2、如果每次可以往上爬1个或2个或3个台阶,爬楼梯过程中允许最多往下走一次,每次走1个台阶,从第0个台阶开始,爬到第n个台阶有多少种方案?
3、如果每次可以往上爬1个或2个或3个台阶,爬楼梯过程中允许最多往下走k次,每次走1个台阶,从第0个台阶开始,爬到第n个台阶有多少种方案?
4、*C实现大整数四则运算
要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
7、斐波那契数列
八、逻辑推理系列
1、村子里有50个人,每人有一条狗,在这50条狗中有病狗(这种病不传染),于是人们要找出病狗。
要求下排每个数都是先前上排那十个数在下排出现的次数。
上排的十个数如下:
[0,1,2,3,4,5,6,7,8,9]
3、有两个房间,一间房里有三盏灯,另一间房有控制着三盏灯的三个开关,
现在要求受训者分别进这两房间一次,然后判断出这三盏灯分别是由哪个开关控制的。
4、你让一些人为你工作了七天,你要用一根金条作为报酬。金条被分成七小块,每天给出一块。
5、有4张红色的牌和4张蓝色的牌,主持人先拿任意两张,再分别在A、B、C三人额头上贴任意两张牌,
A、B、C三人都可看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色牌,
九、基础题
1、*C语言基础一
2、*C语言基础二