zoukankan      html  css  js  c++  java
  • 2018 北京理工大学889 回忆

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

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

    成绩已经出来了,数据结构122

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

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

    选择(20*2分)

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

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

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

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

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

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

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

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

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

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

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

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

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

    填空(20*2分)

    两个串相等的充要条件?长度相等,对应位内容相同(超纲,不过幸好没有考KMP)

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

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

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

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

    无向的完全图有多少个边?有向的完全图有多少个边? n(n-1)/2, n(n-1)

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

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

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

    有头节点的链表为空的判断条件是什么?head->next=0

    顺序表里存了n个数据,查找某个数据并命中最多需要关键字比较n次,不命中,需要比较n+1次。

    简答(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。(略)

     不命中的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
    ",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
  • 相关阅读:
    h5混合开发好用的下拉刷新插件
    设置窗体可以使用鼠标拖动大小 通过
    C# 使用System.Data.OleDb;避免oracle中文乱码问题
    C# 开启一个新进程并为新进程设置工作目录
    WPF窗体程序入口 自定义窗体启动页面
    WorkFlow WF如何为一个集合赋值
    第三方框架的使用
    AppIcon应用图标 and Launchimage启动图标的制作
    在didSelectRowAtIndexPath 里面取cell的方法
    iOS 开发技术体系
  • 原文地址:https://www.cnblogs.com/xuwangzihao/p/8099016.html
Copyright © 2011-2022 走看看