2020 北京理工大学889 回忆

该回忆版由(492030260)群内小伙伴讨论回忆出来的,我代为整理,除非搞到原题,任何考研机构不可能比我们这个更全,希望大家购买所谓真题的时候理性消费。 

其中选择的第4题,第12题,填空的第1题,比较有歧义,不保证回忆和答案的正确性。其他题目或者答案如果有问题,或者你回想起了其他的题目或者题目细节,欢迎在评论区写出、群里@我或者直接私聊我。再次感谢!!!!

 

转载请注明出处 :https://www.cnblogs.com/xuwangzihao/p/12081845.html

 

选择题20个

1,给你入栈顺序123,出栈顺序231,问你操作序列。(push、push、pop、push、pop、pop

2,下列哪个说法错误:

  A 对称矩阵的存储只需要存主对角线和上三角或下三角

  B 对角矩阵不用存储零【对角线上可能有零】

  C 稀疏矩阵可以用三元组

  D 稀疏矩阵有分布规律,可以用三元组

3,给了一循环队列A[0……30],rear指向队尾元素,front指向队头元素的前一个位置,存储了11个元素,当前front指向25,求rear指针位置。(5)

4,有一个无向图,每个边值不同,问下列哪一个选项是错的。

  A 生成树不一定唯一

  BC很简单,不记得了。。。

  D 两节点的最短距离一定是最小生成树上的两节点最短距离

5,一个外层循环n,内层循环2n的程序,问你时间复杂度。(O(n^2))(注意不要选O(2n^2),渐进复杂度省略常数)

  A O(2n)         B O(n)

  C O(2n^2)     D O(n^2)

6,二维矩阵的压缩方式:(答案应该是十字链表和三元组,不要选散列和邻接表)

7,请选出排序算法的启动时间最少的算法,所谓启动时间就是说选出第一个元素的最终位置所花的时间。

  A 归并排序    B 堆排序
  C 插入排序    D 快速排序

8,下列哪个空间复杂度不是常数:

  A 归并排序    B 堆排序
  C 快速排序    D 置换-选择排序

9,顺序表下列哪个操作平均复杂度与众不同。

  A 删除元素a     B 查找元素a
  C 求表长         D 在第i个元素后插入

10,给你一个图,问你哪个dfs序是不可能的(简单题,没啥说的

11,给你一个 [1..5, 1..5] 上三角矩阵,问你压缩成一维后(下标从零开始),在行优先的情况下,a33的下标。(9

12,关于m阶b树性质,下列哪个错误:(每个节点最少有2个子树,注意根节点为叶子结点的情况)

  A 每个节点最少有2个子树

  B 每个节点最多m-1关键字

  C 叶节点都在同一层

  D 记录是有序的

13,中序线索二叉树的后继不可能是:

  A 祖先   B 兄弟   C 右孩子的左子树   D 儿子

14,问你抽象数据类型说法错误的是:(D 用户可以看外面,也能清楚看到内部算法过程

15,给你一个序列,问你折半查找某个不存在的数字的比较次数。(简单题

16,对于一个森林来说,以孩子兄弟表示法表示,那么对于森林中的叶子节点,在孩子兄弟表示法中应该是()

  A 没有左孩子                    B 没有右孩子
  C 有左孩子,没有右孩子     D 既没有左孩子也没有右孩子

17,n个节点的正则(完全)二叉树,分支节点个数为?

  A n/2      B (n-1)/2      C (n+1)/2     D n

18,给了四个序列问哪个不是折半查找的查找序列。(简单题,只要保证搜索范围在不断缩小就行,比如目标是12,你之前已经比较过10和14了,这时候序列出来个8,那明显就不是折半查找的查找序列了)

19,给了四个序列问哪个既不是大根堆,也不是小根堆。(简单题,选项里有一个 83 82 84,83两个孩子一大一小,那肯定错了啊)

 

填空题15个题,20个空

1,给了一个hash函数和输入序列,问你某一个值在表中的key是什么,问你平均查找长度。(这题第一问简单,第二问。。。可能要把成功查找的平均值和不成功的平均值再求平均

2,问你100个数字归并排序需要几趟(7

3,给你前序中序求层次遍历。(简单题

4,基数排序的步骤:(分配)和收集

5,给你一个序列,问步长为3的一趟希尔排序后是什么样(简单题

6,5层(不含叶子结点层)3阶B树结点最多 121 个,最少 31 个。

7,在二叉搜索树中删除u,已知u的祖先是p,u只有左子树s。操作是:p->lc=s,s->parent=p;然后释放u的空间。

8,给你一个avl的插入序列(10,9,15,12,11),问你它旋转后的树的层次遍历。(10,9,12,11,15

9, 一个n个节点的完全二叉树只有一个叶子结点的点是第几个点。(n/2

10,单链表中删除q的后继结点的操作(q->next=q->next->next

11,给你一个hash函数x%7,和几个数,问你能和48映射在同一位置的数字是(62

12,广义表((a),(((b)),c),(d)),求长度:3,深度:4,表头:(a),表尾((((b)),c),(d))

13,森林的后序遍历是树的 中 序遍历

14,给你一个序列(1,2,3,4,5),问你折半查找数字2所用的比较次数为2次。

 

简答题4个

1,给你中序和层次遍历,让你画出那个树,并写出前续和中序。

简单题,没啥说的

 

2,已知L是单向循环链表,长度大于4,p1p2为指向其中两个不同节点的指针,问你A程序的意思和复杂度。

 1 void A(L, p1, p2){
 2 
 3   B(p1,p2);
 4 
 5   B(p2,p1);
 6 
 7 }
 8 
 9 void B(LNode *s, LNode *e){
10 
11   LNode *p=s;
12 
13   while(p->next!=e)p=p->next;
14 
15   p->next = s;
16 
17 }
简答题2题面代码

A的功能是把循环链表L在p1和p1的前缀处切开、p2和p2的前缀处切开,分割成两个单向循环链表。复杂度是O(n)

 

3,有两个小问:

  1,一个50个点,100条边的无向图,点信息20字节,边信息10字节,邻接信息4字节,n、m、type各8字节,用邻接矩阵表示,问你存储这个图要花多少字节。

  50*20+50*50*(10+4)+3*8

  2,问你邻接表存储的无向图求连通分量的复杂度分析。

  时间复杂度:O(n+e)。因为要DFS每一个节点,且每个边都访问一遍。

  空间复杂度:O(n)。因为要开染色标记的辅助数组,如果DFS是递归实现,还要用深度为n的系统栈。

 

4,给你14个带权重的字母,设计一种三进制编码。

构造三叉哈夫曼树,没啥好说的,唯一要注意的点是要加一个权重为0的空节点。因为:(n-1)%(m-1)=(14-1)(3-1)=1。我一开始忘加了,写完才发现不对,浪费了15分钟。

 

算法题3个:

1,现有一字符数组S,其中存储的是从a到z的小写字母。设计一个算法,对该字符数组进行重新排列,使得所有的字母‘a’都放在前面,其他字母放在a后面,请分析你设计的算法的时间复杂度。

void MaxAFront(char S[],int n); 

提供两种思路:

1,用‘a’做轴,做一趟快排,把小于等于的放左,大于的放右

2,两个指针pq,p指向0,q遍历,遇到一个a就交换pq指向的元素然后p++

 

2,一个有表头节点的单链表l。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k(k为正整数)个节点。若查找成功,输出该节点的data值,并return 1,否则return 0.

int KtoLast(LinkList L,int k)
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *LinkList

 

提供三种思路:

1,两个指针pq,先让p走k步,然后pq一起走,如果p指向空,那么q就是倒数第k个元素。

2,计算表长n,然后输出正向第n-k+1个元素

3,递归,返回值是当前层深度,回溯的时候就可以判断是否为倒数第k个。

 

这题要注意两个坑,

一个是列表长度可能小于k,那就是无解。

一个是不允许改变链表,也就是说不能用“反转、取正向第K个、再转回来”的算法。

 

3,二叉树t中,每个节点都拥有一个权值(正整数),请设计一个递归算法,求T中所有叶子权值的最大值,假设函数定义如下。

int MaxLeafValue(BiTree T)
typedef struct BiTNode{
int w;
struct BiTNode *lchild,*rchild;
}BiTNode.*BiTree

int MaxLeafValue(BiTree T){

  if(!T) return 0;

  if(!T->lchild&&!T->rchild)  return T->w;

  return max(MaxLeafValue(T->lchild), MaxLeafValue(T->rchild));

}

posted @ 2019-12-23 01:05  徐王  阅读(1825)  评论(16编辑  收藏  举报