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

第一章 绪论

知识点
  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
    
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值