2018 北京理工大学889 回忆

北理889只考一门数据结构,不像其他院校(402,912)计算机专业要考四大名著(机组,计网,数据结构,操作系统)。

下面列出的选择填空题目不全,只有一些印象深刻的和比较重要的。(大题没有考AVL树,B+树,关键路径,线索二叉树,哈夫曼树,最小增量排序,基数排序有点儿失望)从算法题和简答题可以看出来,北理还是比较注重基础的,但是我在今年的卷纸上看到了往年的影子,拿到卷纸第一感觉是材质很一般,然后就是有种woc我是不是被透题了的感觉。。。今年选择填空没出文字游戏好评,卷面感觉没有哪题有二义性。

成绩已经出来了,数据结构122我是不服的。。。。。。感觉不是满分也该是140+的。。。不知道哪儿扣了分,我猜的话可能就是复杂度计算太简单扣分,然后非递归的中序遍历没有写标准答案扣分了?

 

转载注明出处 :http://www.cnblogs.com/xuwangzihao/p/8099016.html 

感谢北理考研群各位伙伴一路陪伴:492030260 

 

选择(20*2分)

前三道题考什么是逻辑结构什么是存储结构。(存储结构:线性非线性。逻辑结构:hash)

时间复杂度O(n^2)代表程序运行时间与n^2成正比

m阶B-树是m阶平衡二叉树

 无向图任意一点可深搜遍历所有的点意味着这图是个连通图

线性探测解决冲突的hash,k个数字映射到一个位置产生多少次冲突?

一个二叉树,每个节点度为0或2,问你高度为h,最少多少个节点?(2h-1)

当一组数据里面的数都离它该在的位置很近的时候,用直接插入排序进行排序。

邻接矩阵是对称矩阵的图是无向图 

1001个点的完全二叉树有501个叶子节点。

用数组存储二叉树,21个节点高度为6的至少需要把数组开多大?

循环队列存在a[0..20],尾指针指向尾元素,头指针指向头元素的前一个,现在头指8尾指3,队里有16个元素。

123456顺序进栈,问不可能的出栈序列。

abcdef顺序进入一个两边都可进,只能一边出的队列,问不可能的出队序列。

 

填空(20*2分)

两个串相等的充要条件?(超纲,不过幸好没有考KMP)

给你一个广义表,问你表长和深度。(超纲)

7阶B-树非根节点最少有几个子树

 20个数字做归并排序,需要5趟归并,第3趟时把长度为4的数据合并成长度为8的。

在稠密图上求最小生成树用prime算法比较好

无向的完全图有多少个边?有向的完全图有多少个边?

给你几个数,问你他们构成的二叉搜索树长啥样。

10个点的图用kruskal,时间是10ms,则40个点大概160ms。(考它的时间复杂度的)

希尔排序最后一趟的增量必须是1

有头节点的链表为空的判断条件是什么?

顺序表里存了n个数据,查找某个数据并命中最多需要关键字比较n次,不命中,需要比较n次。(这题我觉得是废话,很诡异,我不知道答案是不是两个n。。。)

 

简答(4*10分)

1,汉诺塔时间复杂度分析。

O(2^n)

2,进栈顺序是abcdefg,出栈序列是bdcfeag,问具体的进栈出栈次序。

操作                                栈                    输出序列

push(a) push(b)              ab                    NULL  

pop(b)                             a                      b                   

push(c) push(d)              acd                  b   

pop(d) pop(c)                  a                     bdc

push(e) push(f)               aef                  bdc  

pop(f) pop(e) pop(a)       NULL              bdcfea              

push(g)                           g                     bdcfea                     

pop(g)                             NULL              bdcfeag                           

3,n*n的特殊矩阵(主对角线上三角矩阵)A压缩存储在一维数组s里,写出s[k]和a[i][j]的具体关系。(略)

4,链式解决冲突的hash表,hash函数x%13,hash表容量13,给你12个数字,让你画出hash后的情况,问你命中时的ASL和不命中时的ASL。(略)

 

算法设计(3*10分)

1,删除有头节点链表最小值,有头节点,传入参数是头节点的指针。

 1 typedef struct Link{
 2     ElemType data;
 3     Link* next;
 4 }*LinkList;
 5 bool deleteMin(LinkList head){
 6     if(!head->next)return 0;//fail
 7     //找到想要删除的目标节点的前驱
 8     LinkList p=head->next,aim=head;
 9     while(p->next){
10         if(p->next->data<aim->data)aim=p;
11         p=p.next;
12     }
13     //屏蔽掉那个节点并释放空间(删除它)
14     p=aim->next;
15     aim->next=aim->next->next;
16     free(p);
17     return 1;//success
18 }
deleteMin

2,中序遍历,非递归实现。

 1 #include<vector>
 2 #include<cstdio>
 3 using namespace std;
 4 typedef struct Node{
 5     int data;
 6     Node * lc;
 7     Node * rc;
 8 }BTNode;
 9 vector<pair<BTNode*,bool> > s;//second 表示它的左孩子是否访问过
10 void inOrder(BTNode * root){
11     pair<BTNode*,bool> tmp;
12     tmp.first=root;tmp.second=0;
13     s.push_back(tmp);
14     while(!s.empty()){
15         tmp=s.back();
16         s.pop_back();
17         if(!tmp.second){
18             tmp.second=1;
19             if(tmp.first->lc){
20                 s.push_back(tmp);
21                 tmp.first=tmp.first->lc;
22                 tmp.second=0;
23                 s.push_back(tmp);
24             }else{
25                 s.push_back(tmp);
26             }
27         }else{
28             printf("%d\n",tmp.first->data);//work()
29             if(tmp.first->rc){
30                 tmp.first=tmp.first->rc;
31                 tmp.second=0;
32                 s.push_back(tmp);
33             }
34         }
35     }
36 }
37 //用到了C++的vector和pair,为了标记当前栈顶元素状态,vector模拟栈
inOrder

3,递归实现的快排。

 1 int Partition(int *a,int l,int r){
 2     a[0]=a[l];
 3     while(l<r){
 4         while(l<r&&a[r]>=a[0])r--;
 5         a[l]=a[r];
 6         while(l<r&&a[l]<=a[0])l++;
 7         a[r]=a[l];
 8     }
 9     a[l]=a[0];
10     return l;
11 }
12 void QuickSort(int *a,int l,int r){
13     if(l<r){
14         int pivot=Partition(a,l,r);
15         QuickSort2(a,l,pivot-1);
16         QuickSort2(a,pivot+1,r);
17     }
18 }
quickSort

 

转载于:https://www.cnblogs.com/xuwangzihao/p/8099016.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值