单选
1. 一个局域网的子网掩码是255.255.252.0,下面哪个IP跟其他3个不在同一个局域网上(B)
A、192.168.1.252 B、192.168.4.3 C、192.168.3.3 D、192.168.1.5
解析:IP地址跟子网掩码按位与运算得到网络地址,由该子网掩码得到网络地址占22位,主机地址占10位,ACD的IP跟subne mask AND后,都是192.168.0.0
2. 在带有头节点的单链表HL中,向表头插入一个由指针p指向的节点,则执行:p->next = HL->next; HL->next = p;
解析:
先连接尾巴,后连接头部
void insert(Node* pHead, Node* pNew){
pNew -> pNext = pHead->pNext;
pHead->pNext = pNew;
}
- 带有头节点的链表
头指针为链表的名字- 带头节点是为了操作的统一与方便而设立的,放在第一个元素结点之前,其数据域一般无意义(当然有些情况下也可存放链表的长度、用做监视哨等等)。
- 有了头结点后,对在第一个元素结点前插入结点和删除第一个结点, 其操作与对其它结点的操作统一了。
- 首元结点也就是第一个元素的结点,它是头结点后边的第一个结点。
- 头结点不是链表所必需的。
- 不带有头节点的单链表
3. 当n = 10时,下列函数返回 6
int foo(int n){
if(n < 7)
return n;
return foo(foo(n - 2) + 1);
}
解析:当成是数学函数来理解f(10) = f(f(8) + 1) = f(7) = 6
f(8) = f(f(6) + 1) = f(6 + 1) = f(f(5) + 1) = f(6) = 6
4. 最坏情况下,合并两个大小为n的已排序数组所需要的比较次数为2n - 1
最好情况为n。
- 假设两个数组的长度为m,n
最好情况下,至少需要两两比较一个数组的长度
例如:1,2,3和4,5,6,7合并
1,2,3,4和5,6,7
最坏情况下,比较m + n - 1次
例如:4,9,15和3,10,14合并