数据结构复习

题型:

分析题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章

排序算法(掌握原理)

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

数据结构第九章笔记

posted @ 2020-06-19 20:00  繁辰一梦  阅读(270)  评论(0编辑  收藏  举报