注:看面试题时,主要应该以学习为主,面试题有些基本上是我们编程时会遇上的问题,通过学习面试题会提升我们的编程意识和解决一些日常我们编程所遇到的问题,看完这篇面试题后,希望能对你有所帮助,另外题中有问题的地方可以在评论区指出,在这里谢谢您的观看。
- 题目一
int (*s[10])(int)
上面表示的是什么?
思路:看这类题时,想看变量s先与那个先结合,上述s先与[]相结合说明它是一个数组,再将s[]去掉,就可以得到数组里储存的类型是int (*)(int),指向返回值为int型的函数指针。
解答:数组,数组里的数据类型是指向函数地址的指针。
- 题目二
一句代码实现判断x是否为2的若干次幂
思路:2的若干次幂二进制表示是10、100、1000。。。。因此让x自身减1,在&上x,如果是2的若干次幂得出的结果则必定为0。
解答:x&(x-1) != 0? N : Y
- 题目三
用宏定义实现数据交换swap(x, y)
思路:本题考的是宏的使用以及规范
解答:#define swap(x, y) do{(x)=(x)+(y);(y)=(x)-(y);(x)=(x)-(y);}while(0)
- 题目四
给一个单链表由大到小排序
思路:冒泡排序或者一些其他的排序都可以
解答:(伪代码)
void LinkListSort(Linklist *H)
{
assert(H);
Linklist *P = NULL, Q = NULL;
data_t data;
for(p = H->next; p != NULL; p = p->next)
{
for(Q = p; Q->next != NULL; Q = Q->next)
{
if(p->data < Q->next->data)
{
data = p->data;
p->data = Q->next->data;
Q->next->data = data;
}
}
}
}
- 题目五
在不改变单链表的结构下实现节点数据的逆序输出。
思路:使用递归解决重复回归的问题
解答:
void reshow_LinkList(LinkList *H)
{
if(H == NULL)
return;
else
{
reshow_LinkList(H->next);
printf("%d ", H->data);
}
}