填空题
1、设数组定义为a[60][70],每个元素占2个存储单元,数组按照列优先存储,元素a[0][0]的地址为1024,那么元素a[32][58]的地址为(8048)
2、在一个娱乐节目上,主持人提供有三扇门(假设为A、B、C),只有1扇门后面有奖品,另两扇门后面是空的,而主持人知道具体哪扇门后有奖品。首先,当你选择了一扇门之后(假设A),主持人会把剩下两扇门中的一扇没有奖品的门打开(假设打开的空门为B),现在你有一次机会决定是否要交换重新选择,如果你坚持选择A,你中奖的概率是(1/3),如果你交换选择C,你中奖的概率是(2/3)
假设你选择的1门,而主持人打开的是3门,则奖品在2门后面的概率是
3、一棵深度为h的满二叉树,其最末一层共有(2^h)个节点(根节点深度为0)
4、下面程序的运行结果为(1 3 2)
void foo(int *a , int *b)
{
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
void main()
{
int a = 1 , b = 2 , c = 3;
foo(&a , &b);
foo(&b , &c);
foo(&c , &a);
printf("%d %d %d\n",a,b,c);
}
5、4个结点可以构造出(14)个不同的二叉树 Catalan数
6、设有n个无序的记录关键字,则直接插入排序的时间复杂度为(O(n^2)),快速排序的平均时间复杂度为(O(nlgn))
7、设一组初始记录关键字序列为(20,18,22,16,30,19),则以20为中轴的一趟快速排序结果为(19,18,16,20,30,22)
8、C语言的函数参数传递方式有传递 值 和 传递 地址
9、分配在堆上和栈上的内存,哪一个需要手动进行内存释放? 堆上的内存
问答题:
一、有一个单向循环链表队列,从头开始报数,当报到m或者m的倍数的元素出列,根据出列的先后顺序重新组成单向循环链表。
函数原型: void reorder(Node **head , int m)