数据结构——绪论


程序=算法+数据结构

一. 基本概念和定义:

  1. 数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
  2. 数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
  3. 有时,一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。
  4. 数据对象是性质相同的数据元素的集合,是数据的一个子集。
  5. 在任何问题中,数据元素都不是孤立存在的,而是在他们之间存在着某种关系,这种数据元素相互之间的关系称为结构

二 数据结构:

  1. 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
  2. 数据结构包括逻辑结构和存储结构两个层次。
(一). 逻辑结构:
  1. 逻辑结构是从具体问题抽象出来的数学模型,从逻辑关系上描述数据,它与数据的存储无关。
  2. 数据的逻辑结构有两个因素:一是数据元素;二是关系。
  3. 根据数据元素之间的关系的不同特性,通常有以下4类基本结构
· 集合:                 “同一个集合”;
· 线性结构:             一对一;
· 树形结构:             一对多;
· 图状结构或网状结构:    多对多;
(二). 存储结构:
  1. 数据对象在计算机中有两种基本的存储结构,分别是顺序存储结构链式存储结构

三. 数据类型:

  1. 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
  2. 数据类型可分为原子类型结构类型
  3. 原子类型的值是不可分解的,例如C语言中的基本类型(整型,实型,字符型和枚举类型),指针类型和空类型。
  4. 结构类型的值是由若干成分按某种结构组成的,因此可以是分解的,并且它的成分可以是非结构的,也可以是结构的。
抽象数据类型:

抽象数据类型是指由用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称,具体包括三部分:数据对象、数据对象上关系的集合,以及对数据对象的基本操作的集合。基本操作有两种参数:赋值参数只为操作提供输入值;引用参数以“&”打头,除可提供输入值外,还将返回操作结果。

ADT 抽象数据类型名
{
	数据对象: <数据对象的定义>
	数据关系: <数据关系的定义> 
	基本操作: <基本操作的定义>
}ADT  抽象数据类型名
基本操作名(参数表) 
	初始条件: <初始条件的描述>
	操作结果: <操作结果的描述> 

四. 算法:

  1. 算法是为了解决某类问题而规定的一个有限长的操作序列。
  2. 算法具有五个特性:有穷性、确定性、可行性、输入和输出。
  3. 一个算法的优劣应该从以下四方面来评价:正确性、可读性、健壮性和高效性。(高效性包括时间和空间两个方面。时间复杂度和空间复杂度是衡量算法的两个主要指标。)
(一). 算法的时间复杂度:
  1. 衡量算法效率的方法主要有两类:事后统计法事前分析估算法。鉴于第一种的缺陷,所以通常采用事前分析估计法,通过计算算法的渐进复杂度来衡量算法的效率。

  2. 问题规模是算法求解问题输入量的多少,是问题大小的本质表示,一般用整数n表示。

  3. 一个算法的执行时间大致上等于其所有语句执行时间的总和,而语句的执行时间则为该条件语句的重复次数和执行一次所需时间的乘积。一条语句的重复执行次数称为语句频度

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

  5. 常见的时间复杂度按数量级递增排列依次为:常量阶O(1)、对数阶O(log2 (n))、线性阶O(n)、线性对数阶O(nlog2 (n))、平方阶O(n……2)、立方阶O(n……3)、k次方阶O(n……k)、指数阶O(2……n)等。
    在这里插入图片描述

  6. 随着n的增大,T(n)的增长较慢的算法为较优的算法。时间复杂度为指数阶O(2……n)的算法效率较低,当n值稍大时就无法应用。应该尽可能选择使用多项式阶O(n……k)的算法,而避免使用指数阶的算法。

  7. 最好时间复杂度,是算法计算量可能达到的最小值;最坏时间复杂度,算法计算量可能达到的最大值;平均时间复杂度,算法计算量的加权平均值。

  8. 通常只讨论算法在最坏情况下的时间复杂度,即分析在最坏的情况下,算法执行时间的上界。

(二). 算法的空间复杂度:

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

对于一个算法,其时间复杂度和空间复杂度往往是相互影响的,有得必有失。鉴于运算空间较为充足,人们都以算法的时间复杂度作为算法优劣的衡量指标。

五. return 表达式和exit的区分:

  1. return 表达式 是某个函数结束并返回一个值,后续还会进行其他的进程。
  2. exit 代表终止程序进程,无后续进程,为异常代码。 OVERFLOW可以看作是“溢出”。

参考 : theday98674的 数据结构(绪论)一文 以及 数据结构(C语言版)清华大学出版社 一书

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值