zoukankan      html  css  js  c++  java
  • 数据结构复习

    题型:

    分析题30
    简答题40
    应用题30 (写程序10分) .

    今年比较特殊,好像题比往年简单,然而我还是感到头秃。

    第1章

    计算时间复杂度

    注意:

    一个语句本身的程序步数可能不等于该语句一次 执行所具有的程序步数。

    例如:赋值语句 x = sum (R, n) 赋值操作的程序步数为 1;

    一次执行对函数 sum (R, n) 的调用需要的程序步 数为 2 * n+3;

    一次执行的程序步数为 1+2 * n+3 = 2 * n+4

    大O的表示方法

    T(n) = O(f(n)) 称f(n)为算法的“渐进”时间复杂度 ,简称时间复杂度,以简化算法复杂性的分析。

    说明:在计算算法时间复杂度时,可以忽略所有低次幂和最高次幂的系数。

    大O的运算规则

    • 加法准则(并列程序段 )

    前提:(T_1)(m) = O(f(m)); (T_2)(n) = O(g(n))

    结论:(T)(n)= (T_1)+(T_2) = O(f(n)+g(n))

    (T)(n) = (T_1)+(T_2) = O(max(f(m),g(n)))

    • 乘法准则(嵌套程序段)

    前提:(T_1)(n) = O(f(n)); (T_2)(n) = O(g(n))

    结论:(T)(n) = (T_1)* (T_2) = O(f(n)*g(n))

    常见函数的增长率

    例1

     void exam ( float x[ ][ ], int m, int n ) {      
       float sum [ ];      
       for ( int i = 0; i < m; i++ ) { //x中各行          
          sum[i] = 0.0; //数据累加          
          for ( int j = 0; j < n; j++ )       
              sum[i] += x[i][j];      
       }      
       for ( i = 0; i < m; i++ )  //打印各行数据和          
          cout << i << “ : ” <<sum [i] << endl;  
     }         
     //渐进时间复杂度为 O(max (m*n, m))
    

    例2

    void bubble_sort(int a[], int n ) { 
    //用冒泡排序方法,将a 中n个整数的序列排列成自小至大有序的整数序列。  
        int change ,i; 
        for (i = n-1,change=1; i >=1&&change; - -i ){     
            change= 0;    
            for (j = 0; j<i; ++j )     
            if (a [j] >a[ j+1]) {           
               a [j]<->a[ j+ 1]                     
               change=1;}         
                   } 
    }// bubble_sort
    
    //基本操作:赋值操作。时间复杂度:O(n^2)--最坏情况下时间复杂度 
    

    BubbleSort n-1趟 BubbleExchange ( ) n-i次比较

    当输入的数据已经排好序, 只要比较n-1次, 当输入的数据是减序,需要 比较n(n-1)/2次。

    第2、3章

    线性结构:

    栈和队列
    栈序列
    栈队列的边界条件
    双向循环链的基本操作
    循环队列的判空判满操作

    数据结构第二章笔记

    数据结构第三章笔记

    第4章

    一维数组求地址

    递推式 (LOC ( i ) = LOC ( i -1 ) + l =α+ i*l)

    二维数组求地址

    n行m列的二维数组:

    行优先 (LOC ( j, k ) = a + ( j * m + k ) * l)

    n维数组

    各维元素个数为 (m_1), (m_2), (m_3), …, (m_n)

    下标为 (i_1), (i_2), (i_3), …, (i_n) 的数组元素的存储地址:

    (LOC) ( (i_1), (i_2), …, (i_n) ) = a +

    ( (i_1)* (m_2)* (m_3)* …* (m_n) + (i_2)* (m_3)* (m_4)* …* (m_n)+……+ (i_{n-1})*(m_n) + (i_n) ) * l

    =a+( (sum_{j=1}^{n-1})(i_j) *(prod_{k=j+1}^{n})(m_k)+(i_n)) *l

    ★第5章

    树(要求代码):

    树的特性(知道其推导过程)
    树的遍历(深度和层次遍历及其应用)
    树的建立(先根和后根序列确定一棵树)
    树和二叉树的转换,

    哈夫曼树及编码

    数据结构第五章笔记

    第6章

    集合:

    散列表:创建和冲突检测、查找长度( 成功和非成功)

    数据结构第六章笔记

    第7章

    搜索:

    折半搜索原理及适用条件
    二叉判定树的结构
    三叉排序树的创建和删除

    数据结构第七章笔记

    第8章

    图(掌握原理):

    图的存储结构
    深度和广度序列
    图(强)连通,(强)连通分量
    最小生成树算法
    最短路径和最短路径长度
    拓扑排序

    数据结构第八章笔记

    第9章

    排序算法(掌握原理)

    直接插入、折半插入、希尔排序、冒泡、快排(重点)、简单选择、堆排序

    数据结构第九章笔记

  • 相关阅读:
    zabbix短信网关调用问题总结
    zabbix短信接口调用
    Windows Open with Sublime Text
    [转载]windows下安装Python虚拟环境virtualenvwrapper-win
    Resilio-sync auto restart
    django-orm-standalone
    RabbitMQ笔记
    RabbitMQ启动出错:- unable to connect to epmd on xxxx: timeout (timed out)
    [Python笔记]第十六篇:web框架之Tornado
    [前端笔记]第三篇:JavaScript
  • 原文地址:https://www.cnblogs.com/gylic/p/13166241.html
Copyright © 2011-2022 走看看