



1. 算法的计算量的大小称为计算的( )。
    A. 效率
    
    B. 复杂性
    
    C. 现实性
    
    D. 难度
   
2. 算法的时间复杂度取决于( )。
    A. 问题的规模
    
    B. 待处理数据的初态
    
    C. A和B
   
3. 计算机算法指的是( ① ),它必须具备( ② )这3个特性。
    ①A. 计算方法
    
    B. 排序方法
    
    C. 解决问题的步骤序列
    
    D. 调度方法
   
    ②A.可执行性、可移植性、可扩充性
    
    B. 可执行性、确定性、有穷性
    
    C. 确定性、有穷性、稳定性
    
    D. 易读性、稳定性、安全性
   
4. 下面说法错误的是( )。
①算法原地工作的含义是指不需要任何额外的辅助空间
②在相同的规模 n 下,复杂度 O ( n )的算法在时间上总是优于复杂度 O (2 n )的算法
③所谓时间复杂度是指在最坏情况下,估算算法执行时间的一个上界
④同一个算法,实现语言的级别越高,执行效率就越低
    A. ①
    
    B. ①;②
    
    C. ①;④
    
    D. ③
   
5. 从逻辑上可以把数据结构分为( )两大类。
    A. 动态结构、静态结构
    
    B. 顺序结构、链式结构
    
    C. 线性结构、非线性结构
    
    D. 初等结构、构造型结构
   
6. 以下数据结构中,( )是线性结构。
    A. 广义表
    
    B. 二叉树
    
    C. 稀疏矩阵
    
    D. 串
   
7. 在下面的程序段中,对 x 的赋值语句的频度为( )
FOR i := 1  TO  n  DO
    FOR j: = 1  TO  n  DO
      x: = x + 1;
   
    A.
    
     O
    
    (2
    
     n
    
    )
    
    B.
    
     O
    
    (
    
     n
    
    )
    
    C.
    
     O
    
    (
    
     n
    
    
     2
    
    )
    
    D.
    
     O
    
    (log
    
     2
    
    
     n
    
    )
   
8. 以下数据结构中,( )是非线性数据结构。
    A. 树
    
    B. 字符串
    
    C. 队
    
    D. 栈
   
9. 下列数据中,( )是非线性数据结构。
    A. 栈
    
    B. 队列
    
    C. 完全二叉树
    
    D. 堆
   
1. 数据元素是数据的最小单位。( )
2. 记录是数据处理的最小单位。( )
3. 数据的逻辑结构是指数据的各数据项之间的逻辑关系。( )
4. 算法的优劣与算法描述语言无关,但与所用计算机有关。( )
5. 健壮的算法不会因非法的输入数据而出现莫名其妙的状态。( )
6. 数据的物理结构是指数据在计算机内的实际存储形式。( )
7. 数据结构的抽象操作的定义与具体实现有关。( )
8. 在顺序存储结构中,有时也存储数据结构中元素之间的关系。( )
9. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。( )
10. 数据的逻辑结构表示数据元素之间的顺序关系,它依赖于计算机的存储结构。( )
1. 对于给定的 n 个元素,可以构造出的逻辑结构有____________、____________、____________、____________4种。
2. 一个算法具有5个特性:____________、____________、____________、有0个或多个输入、有一个或多个输出。
3. 下面程序段的时间复杂度为____________。( n >1)
sum=1; for ( i=0;sum<n;i++) sum+=1;
1. 什么是数据?什么是数据元素?什么是数据项?
2. 什么是数据的逻辑结构?什么是数据的存储结构?什么是数据的操作?
3. 分别画出线性结构、树形结构和图形结构的逻辑结构。
4. 什么是数据类型?什么是抽象数据类型?
5. 基本的存储结构有几种?分别画出数据元素序列 a 0 , a 1 ,..., a n −1 的顺序存储结构示意图和链式存储结构示意图。
6. 评判一个算法的优劣主要有哪几条准则?
7. 什么是算法的时间复杂度?怎样表示算法的时间复杂度?
8. 设求解同一个问题有3种算法,3种算法的空间复杂度相同,各自的时间复杂度分别为 O ( n 2 )、 O (2 n )、 O ( n lg n ),哪种算法最可取?为什么?
9. 按增长率从小到大的顺序排列下列各组函数。
①2 100 ,(3/2) n ,(2/3) n ,(4/3) n 。
② n , n 3/2 , n 2/3 , n !, n n 。
③log 2 n , n log 2 n , n log2 n , n 。
1. 设 n 为在算法前面定义的整数类型已赋值的变量,分析下列各算法中加下画线语句的执行次数,并给出各算法的时间复杂度 O ( n )。
(1)算法1
int i = 1,k = 0;
while(i < n - 1){
   k = k + 10 * i;
   i = i + 1;
}
   (2)算法2
int i = 1,k = 0;
    do {
        k = k + 10 * i;
        i = i + 1;
    }while(i != n);
   (3)算法3
int i = 1,j = 1;
    while(i <= n && j <= n){
        i = i + 1;
        j = j + 1;
}
   (4)算法4
int x = n;
    int y = 0;
    while(x >= (y + 1) * (y + 1)){
        y ++;
}
   (5)算法5
int i,j,k,x=0;
    for(i = 0;I < n;I ++)
        for(j = 0;j < i;j ++)
            for(k = 0;k < j;k ++)
                x = x + 2;
   2. 如下算法实现了将数组a中的 n 个整数类型的数据元素从小到大进行排序,求该算法的时间复杂度。
void bubbleSort(int a[]){
    int n = a.length;
    int i,j,temp,flag = 1;
    for(i = 1;i < n&&flag == 1;I ++){
        flag = 0;
        for(j = 0;j < n - i;j ++){
            if(a[j] > a[j + 1]){
                flag = 1;
                temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
    }
}
   3. 下面的算法是在一个有 n 个数据元素的数组a中删除第pos个位置的数组元素,求该算法的时间复杂度。
boolean delete(int a[],int pos){
    int n = a.length;
    if(pos < 0|| pos >= n)
        return false;                   //删除失败返回
    for(int j=pos + 1;j < n;j ++){
        a[j - 1]=a[j];                  //顺次移位填补
        return true;                    //删除成功返回
    }
}
   4. 分析以下算法的空间复杂度。
static void reverse1(int[] a,int[] b){
    int n = a.length;
    for(int i = 0;i < n;i ++){
        b[i] = a[n – 1 - i];
    }
}