数据结构课程

数据结构课程

  • 内容:

    • 《数据结构–Java语言描述(第2版)》
  • 自我提高:

    • 力扣:https://leetcode-cn.com/ ,算法刷题的

1. 绪论

1.1 概述

  • 算法 + 数据结构 = 程序

    • 程序:计算机指令的组合
    • 算法:程序的逻辑抽象
    • 数据结构:数据及其关系的反映,从逻辑结构和存储(物理)结构。
  • 数据结构解决具体问题:

    1. 数据的逻辑结构(数学模型)
    2. 数据的存储结构
    3. 数据操作与运算

1.2 数据与数据结构

1.2.1 术语

  • 数据(Data):数据是信息的载体,是对客观事物的符号表示。
  • 数据元素(Data Element):是数据的基本单位,是一个个体。相当于表的一行。
  • 数据项(Data Item):是数据元素的组成部分。相当于表的列。
  • 数据对象(Data Object):性质相同的数据元素的集合。相当于表。
  • 数据结构(Data Structure):特定关系的数据元素的集合。

1.2.2 逻辑结构

  • 逻辑结构:数据元素之间的逻辑关系,与数据存储无关,独立与计算机之外。

  • 数据元素按照特性:

    1. 集合:元素之间没有关系,比较松散
    2. 线性结构:元素之间存在一对一关系。除了开始和终端结点,其他结点由有一个前驱和一个后继。
    3. 树形结构:元素之间存在一对多关系。
    4. 图形结构:元素之间存在多对多关系。
  • 数据的逻辑结构需要2部分:数据元素(data)、数据元素的关系(relationship)

1.2.3 存储结构:

  • 存储结构:数据的存储结构,也称为物理结构,是数据的逻辑结构在计算机的实现。

    • 数据元素的值存储表示和逻辑关系。
  • 存储结构的4种方式:

    1. 顺序存储:在一片连续的存储空间中进行存储,元素的逻辑位置和物理位置保持一致。例如:数组

    2. 链式存储:可以存储在任意的物理物质上,需要额外的部分存放逻辑关系的指针。例如:链表

    3. 索引存储:存储数据的同时,额外的存储一个索引表。在查询时可以提高效率。

    4. 散列存储:一般情况物理上可以是连续的存储空间,需要通过散列函数hash来确定存储位置。在查询时可以提高效率。

1.2.4 数据操作:

  • 初始化:创建、销毁:
  • 数据操作:插入/添加、删除、修改
  • 数据使用:查找、遍历

1.3 算法

  • 算法:对特定问题求解步骤的一种描述。是指令的有限序列。

1.3.1 算法特性

  1. 有穷性:有限
  2. 确定性:需求确定、指令确定
  3. 有效性:指令都是由意义
  4. 输入:
  5. 输出:

1.3.2 算法目标

  1. 正确性:基本要求,需求和实现对应。
  2. 可读性:使程序员能够读懂,编写代码时可以辅助注释。
  3. 健壮性:临界值的处理、无效数据的校验等。
  4. 高效性:使用较少的资源(资源分2种:时间资源、空间资源)。一个好的算法要做到执行时所需时间尽量短,所需的最大存储空间尽量少。

1.3.3 算法分析:概述

  • 算法的复杂度是衡量算法优劣的重要依据。
  • 算法的复杂度分类:时间复杂度、空间复杂度。
    • 时间复杂度:执行时间的长短。
    • 空间复杂度:执行时空间需求量,也就是计算机资源的使用量。

1.3.4 算法分析:时间复杂度

  • 主要考虑因素:

    1. 算法本身
    2. 问题规模
    3. 程序语言选择
    4. 编译程序(JDK优劣)
    5. 硬件速度
    6. 运行软件
  • 时间复杂度通过大O表示法进行表示的,大O表达式只需要考虑最高次幂的项。

    • 常量阶:O(1)
    • 线性阶:O(n)
    • 平方阶:O(n^2)
    • 立方阶:O(n^3)
    • 对数阶:O(log2n)
    • 线性对数阶:O(nlog2n)
  • O(log2n) 指数计算:R表示次数

  • O (n) :一层循环

  • O(n^2):二层循环(99乘法表)

    int n = 9;
    for(int i = 0 ; i < n ; i ++) {
        for(int j = 0 ; j < n : j ++) {
            // 次数 n*n
        }
    }
    
  • O(n^3):三层循环

    int n = 9;
    for(int i = 0 ; i < n ; i ++) {				//时针
        for(int j = 0 ; j < n : j ++) {			//分针
            for(int m = 0 ; m < n ; m++) {		//秒针
                // 次数 n * n * n
            }
        }
    }
    

1.4 回顾:西格玛Σ 求和

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oiTnxL0Q-1648094210453)(assets/image-20220324113731523.png)]

  • 需求:1+2+3+4+…+n
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值