数据结构 ---【绪论】
什么是数据结构
数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素的集合。它包含三方面的内容,逻辑关系、存储关系 以及 操作。
什么是数据: 数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机 中并被计算机程序识别和处理的符号【二进制0和1】的集合。数据是计算机程序加工的原料。
数据元素、数据项: 数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。 一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。
数据对象是具有相同性质的数据元素的集合,是数据的一个子集。
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
形式定义:二元组(D,S)其中D是数据元素的有限集,S是D上关系的有限集。
例如,可以用三个4位的十进制数表示一个含12位数的十进制数。、
逻辑结构
数据结构中所说的“关系”实际上是指数据元素之间的逻辑关系,又称此为逻辑结构
- 是数据元素之间逻辑关系描述。
- 是程序员根据具体问题抽象出来的数学模型
- 与数据的存储无关,独立于计算机
存储结构(物理结构)
是指数据结构在存储器中的具体实现。与孤立的数据元素表示形式不同,数据结构中的数据元素不但要表示其本身的实际内容,还要表示清楚数据元素之间的逻辑结构
-
- 是数据在计算机内的表示方法。
- 是逻辑结构的具体体现
- 包含数据元素本身的表示与数据元素间逻辑关系的表示
数据运算
对数据施加的操作。运算的定义依赖于逻辑结构,但运算的实现必依赖于存储结构(真正理解)
顺序存储结构:
特点是借助于数据元素的相对存储位置来表示数据元素之间的逻辑结构
链式存储结构:
特点是借助于指示数据元素地址的指针表示数据元素之间的逻辑结构
小结
1、数据的逻辑结构:数据元素之间的逻辑关系。四种逻辑结构的特点:
①集合中任何两个结点之间都没有逻辑关系,组织结构松散
②线性结构中结点按逻辑关系依次排列成一条“锁链”。
③树型结构具有分支、层次特性,形态像自然界中的树。
④图状结构最复杂,其中的各个结点按逻辑关系互相缠绕,任何两个结点都可以邻接。
数据类型、抽象数据类型:
数据类型是一个值的集合和定义在此集合上的一组操作的总称。
1)原子类型。其值不可再分的数据类型。
2)结构类型。其值可以再分解为若干成分(分量)的数据类型。
抽象数据类型(Abstract Data Type,ADT)是抽象数据组织及与之相关的操作【ADT 用数学化的语言定义数据的逻辑结构、定义运算。与具体的实现无关。🥳】
什么是算法?
算法(Algorithm): 就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。
算法效率
算法效率分析分为两种:
第一种是时间效率,第二种是空间效率。
时间效率:被称为时间复杂度,而空间效率:被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。
时间复杂度
时间复杂度的概念 时间复杂度的定义:
在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一 个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知 道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个 分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度
实际中我们计算时间复杂度时,我们其实并不一定要计算精确的执行次数,而只需要大概执行次数,那么这 里我们使用大O的渐进表示法。
算法的特性
- 有穷性
一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。 用有限步骤解决某 个特定的问题
注:算法必须是有穷的,而程序可以是无穷的
如:微信是程序,不是算法
- 确定性
算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。
- 可行性
算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
- 输入
一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。
- 输出
一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。
- 可读性
算法应具有良好的可读性,以帮助人们理解。
- 健壮性
输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
算法分析
时间复杂度:
算法转换成程序并在计算机上执行时,从开始到结束所需要的时间
空间复杂度:
算法对输入数据进行运算所需的辅助工作单元
时间复杂度:T(n)=O(f(n))。
表示随着问题规模n的增大,算法执行的时间的增长率和f(n)的增长率相同,称渐近时间复杂度。简称时间复杂度。
数学符号“O”的定义为:
若T(n)和f(n)是定义在正整数集合上的两个函数,如果存在正的常数C和n0,使得当n≥n0时都满足0≤T(n)≤Cf(n),则称T(n) 和f(n)是同一数量级的,记T(n)=O(f(n))
结论1:顺序执行的代码只会影响常数项,可以忽略
结论2:只需挑循环中的一个 基本操作分析它的执行次数 与 n 的关系即可
结论3:如果有多层嵌套循环, 只需关注最深层循环循环了几次
最坏时间复杂度:最坏情况下算法的时间复杂度
平均时间复杂度:所有输入示例等概率出现的情况下,算法的期望运行时间
最好时间复杂度:最好情况下算法的时间复杂度
本文来自博客园,作者:link-零,转载请注明原文链接:https://www.cnblogs.com/e-link/articles/16667556.html❤❤❤