欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构 第一章绪论 知识点整理

程序员文章站 2022-03-25 21:56:21
...

第一章 绪论

知识点
  1. 了解数据结构研究的主要内容

    1. 逻辑结构 ->研究数据元素之间的客观联系。
    2. 存储结构->研究具有某种逻辑关系的数据在计算机存储器内的存储方式。
    3. 算法->研究如何在数据的各种关系(逻辑的和物理的)的基础上对数据实施一系列有效的基本操作。

    逻辑结构+存储结构+算法

  2. 掌握数据结构中涉及的基本概念

    • 数据:描述客观事物的数字、字符以及一切能够输入到计算机中,并且能被计算机程序处理的符号的集合

    • 数据元素:数据这个集合中的一个一个的元素

    • 数据对象:具有相同特性的数据元素的集合

    • 结构:数据元素之间具有的关系(联系)

  3. 掌握算法的时间、空间复杂度及其分析的简易方法

    1. 时间复杂度
      影响因素:

      1. 问题的规模
      2. 编译程序功能的强弱以及所产生的机器代码质量的优劣
      3. 机器执行一条指令的时间长短
      4. 程序中哪些关键语句的执行次数

      频度统计法

    2. 空间复杂度
      影响因素:
      算法本身占据的空间(输入/输出,指令,常数,变量等
      算法要使用的辅助空间

4.内容小结

  1. 结构

    • 逻辑结构
      • 线性结构
        线性表、数组、堆栈、队列、字符串、广义表、文件
      • 非线性结构
        树、二叉树、图
    • 存储结构
      • 顺序存储结构
      • 链式存储结构
      • 索引结构
      • 散列结构
  2. 算法

    • 算法的定义

      • 用来解决某个特定课题的指令的集合
      • 是由人们组织起来准备加以实施的一系列有限的基本步骤
    • 算法的基本特征

      • 输入、输出、有穷性、确定性、有效性
    • 算法的描述

      • 自然语言
      • 某一具体的程序设计语言
      • 自定义的符号语言
    • 算法分析

      • 算法分析是指对算法质量优劣的评价
      • 算法分析的目的是改进算法质量
      • 算法分析的前提是算法必须正确
      • 除正确性外,通常从三个方面分析一个算法:
        • 依据算法编写的程序在计算机中运行时间多少的度量,称之为时间复杂度。
        • 依据算法编写的程序在计算机中占存储空间多少的度量,称之为空间复杂度。
        • 其他方面。如算法的可读性、可移植性以及易测试性的好坏。
习题
  1. 设 n 为正整数。试确定下列各程序段中前置以记号 @ 的语句的频度:
     
    (1)

    i=1; 
    k=0;
    while ( i <= n-1) {
        @ k += 10 * i;
       i++;
    }
    

    答案

    n-1
    

    (2)

    i=1; 
    k=0;
    do{
        @ k +=10 * i;
       i++;
    } while(i <= n-1);
    

    答案

    n-1
    

    (3)

    i = 1; 
    k = 0;
    while (i <= n-1) { 
        i++;
      @ k+= 10 * i;
    }
    

    答案

    n-1
    

    (4)

    k=0;
    for( i=1; i <= n; i++) {
        for (j=i ; j <= n; j++)
         @ k++;
    }
    

    答案

    (n+1)n/2
    

    (5)

    for( i = 1; i <= n; i++) { 
        for (j = 1; j <= i; j++) {
            for (k = 1; k <= j; k++)
          @ x += delta;
      }
    }
    

    答案

    n(n-1)(n-2)/6
    

    (6)

    i=1; 
    j=0;
    while (i+j<=n) {
        @ if (i>j ) j++ ;
       else  i++ ;
    }
    

    答案

    n/2 (n为偶数)  
    (n+1)/2 (n为奇数)
    

    (7)

    x=n; 
    y=0;    // n 是不小于1的常数
    while (x >= (y+1)*(y+1)) {
       @ y++;
    }
    

    答案

    n^1/2
    

    (8)

    x=91; 
    y=100;
    while (y>0 ) {
        @ if (x>100 ) {
            x -= 10; 
            y--; 
            } 
        else x++;
    }
    

    答案

    1100
    
  2. 假设n2的乘幂,并且 n > 2,试求下列算法的时间复杂度及变量count的值(以n的函数形式表示)。

    int Time(int n){
        count = 0;
        x = 2;
        while(x < n/2){
            x *= 2;	
            count++;
        }
            return (count);
    }//Time
    

    答案

    O(log2n)
    log2n-2
    
  3. 试写一个算法,自大至小依次输出顺序读入的三个整数X,YZ的值。
    答案

    int Printf{
        if(x < y){
            t = x;
            x = y;
            y = t;
        }
        if(x < z){
            t = x;
            x = z;
            z = t;
        }
        if(y < z){
            t = y;
            y = z;
            z = t;
        }
        printf(x,y,z);
    }//Printf
    
相关标签: 数据结构