如果你有理想的话,就要努力去实现,就这样。
一、选择题
1、队列(a.b.c.d.e)依次入队,允许在其两端进行入队操作,但仅允许在一端进行出队操作,则不可能得到的出队序列是()
A、b, a, c, d, e
B、d, b, a, c, e
C、d, b, c, a, e
D、e, c, b, a, d
答案:B。队列是遵循先进先出的原则, d出队之后,b不可能在c出队之前出队。
2、向一个栈顶指针为h的带头结点的链栈中插入指针s所指的结点时,应执行()
A、h->next=s;
B、s->next=h;
C、s->next=h;h->next=s;
D、s->next=h->next;h->next=s;
答案: D。分析这题向链表的头插,s->next=h;h->next=s
3、若一棵二叉树具有12个度为2的结点,6个度为1的结点,则度为0的结点个数是()
A、16
B、11
C、13
D、不确定
答案:C。分析:总的结点个数 = 1 + 12*2 + 6*1 = 31
31 = no + n1 + n2 = n0 + 12 + 6;所以no =13.
4、假设你只有100Mb的内存,需要对1Gb的数据进行排序,最合适的算法是()
A、归并排序
B、插入持序
C、快速排序
D、冒泡排序
答案:A。分析:这题的考点是外排序,因为内存远小于需要排序的数据量,这里只有归并排序是外排序而且时间复杂度是O(n * logn)。
5、
答案:C。分析:
平衡二叉树,或是一棵空树,或符合以下特性:
【平衡特性1】:左子树的深度和右子树的深度相差不能超过1,可以是0(代表左右子树深度一样)、-1(代表左子树比右子树少一层)、1(代表左子树比右子树多一层) 【平衡特性2】它的左右子树也要是平衡二叉树 。
查找树,或是一棵空树,或满足符合以下特性:
【查找特性1】:若左子树不为空,左子树节点所有的值均要小于根节点;
【查找特性2】: 若右子树不为空,右子树节点所有的值均要大于根节点;
二、编程题
1、快到碗里来
题目分析:考了简单的数学,但是是超大数,int会爆,要用double(8字节)。
代码示例:
usingnamespacestd; intmain() { doublel, r; while (cin>>l>>r) { if (l<=3.14*2*r) { cout<<"Yes"<<endl; } else { cout<<"No"<<endl; } } return0; }
2、跳台阶拓展问题
分析:考点:动态规划/找规律
代码示例:
usingnamespacestd; intmain() { intn; cin>>n; cout<<pow(2, n-1) <<endl; return0; }
总结
本文总共讲了5题牛客高频的选择题,以及两道牛客编程题,希望大家读后能够有所收获!