数据结构基础知识

数据结构基础知识

研究内容

数据结构主要研究非数值计算问题,非数值计算问题无法用数学方程建立数学模型


基本概念和术语

  • 数据:是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。
  • 数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。有些情况下,也称为元素、记录等。
  • 数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
  • 数据对象:是性质相同的数据元素的集合,是数据的一个子集。
  • 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。包括逻辑结构存储结构两个层次。

逻辑结构

数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。

两个要素:数据元素关系(关系是指数据元素间的逻辑关系)
四种结构:

  • 集合结构:数据元素之间除了”属于同一集合“的关系外,别无其它关系。
  • 线性结构:数据元素之间存在一对一的关系。
  • 树结构:数据元素之间存在一对多的关系。
  • 图结构或网状结构:数据元素之间存在多对多的关系。

在这里插入图片描述
其中集合结构、树结构和图结构都属于非线性结构。
在这里插入图片描述


存储结构

数据对象在计算机中的存储表示称为数据的存储结构,也称物理结构。

  • 顺序存储结构:借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。
  • 链式存储结构:数据存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间。

数据类型和抽象数据结构

数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
抽象数据类型一般指由用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称,具体包括三部分:数据对象数据对象上关系的集合以及对数据对象的基本操作的集合

抽象数据定义格式如下:

ADT 抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}ADT 抽象数据类型名

其中,数据对象和数据关系的定义采用数学符号和自然语言描述,基本操作的定义格式为:

基本操作名(参数表)
初始条件:<初始条件描述>
操作结果:<操作结果描述>

基本操作有两种参数:赋值参数只为操作提供输入值;引用参数以”&“打头,除可提供输入值外,还将返回操作结果。


算法和算法分析

算法特性:

  • 有穷性
  • 确定性
  • 可行性
  • 输入
  • 输出

评价算法优劣的基本标准:正确性可读性健壮性高效性


算法的时间复杂度

衡量算法效率两种方法:事后统计法和事前分析估算法
不考虑计算机的硬件等环境因素,影响算法时间代价的最主要因素是问题规模。(问题规模是算法求解问题输入量的多少,是问题大小的本质表示,一般用整数n表示)
一条语句的重复执行次数称作语句频度

一般情况下,算法中基本语句重复执行的次数是问题规模n的某个函数f(n),算法的时间复杂度记作
T(n)=O(f(n))
它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度

时间复杂度分析举例

  • O(1)常数
  • O(n)线性 一层for循环
  • O(n^2) 平方 两层for循环
  • O(n^3) 立方 三层for循环
  • O(lgn) 对数 二分查找
  • O(nlgn) 排序
  • O(2^n) 指数
    常见函数的增长率
    常见函数的增长率
    最好时间复杂度:算法在最好情况下的时间复杂度
    最坏时间复杂度:算法在最坏情况下的时间复杂度
    平均时间复杂度:算法在所有可能情况下,按照输入实例以等概率出现时,算法计算量的加权平均值
    通常只讨论算法在最坏情况下的时间复杂度。

算法的空间复杂度

类似于算法的时间复杂度,我们采用渐进空间复杂度作为算法所需存储空间的量度,简称空间复杂度,它也是问题规模n的函数,记作:
S(n)=O(f(n))

通常情况下,鉴于运算空间较为充足,人们都以算法的时间复杂度作为算法优劣的衡量标准。


借鉴:《数据结构》严蔚敏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值