数据结构入门知识看这个就够了

  • 数据:

    • 描述客观事物的数值、字符,能输入到计算机并且被计算机处理的各种符号的集合,数据就是信息在计算机中的表示

  • 数据元素:

    • 数据元素就是数据的基本单位

    • 在计算机程序中,通常把数据元素作为一个整体进行处理

    • 如:

      • 描述学生信息的一条记录就是一个数据元素

      • 描述一个点坐标的信息就是一个数据元素

    • 数据元素通常由若干的数据项组成

    • 如:

      • 描述学生信息中的姓名,学号,成绩都是数据项

      • 点坐标的横坐标,纵坐标都是数据项

  • 数据对象:

    • 如:

      • 学校中所有学生的集合就是数据对象

      • 平面坐标系中所有点的集合就是数据对象

  • 数据结构:

    • 相互之间存在一种或多种特定关系的数据元素的集合

    • 数据结构就是数据元素之间的关系

    • 数据结构分为逻辑结构和物理结构

  • 数据的逻辑结构有四种:

    • 集合:数据仅仅属于同一个 集合,没有其他的相互关系

    • 线性:描述一对一的关系

    • 树形:描述一对多的关系

    • 图形:描述多对多的关系

  • 数据的逻辑结构一般采用二元组的形式定义:

    • 数据结构 = (D,S)

      • D:数据元素的集合

      • S:D中元素之间的关系的集合

  • 例:二元组:set=(D,S),其中:

    • D = {01,02,03,04,05}

    • S = {}

  • 例2:二元组: linearity= {D,S} 其中 D={01,02,03,04} S={ <01,04>, <04,02>,<02,03>} 在数据结构linearity中,数据元素是有序的,有一个被称为第一个的数据元素(01),还有一个被称为最后一个的元素(03)

    01-->04-->02-->03 一对一的线性关系

    例3:二元组: tree= {D,S} 其中 D={01,02,03,04} S={ <01,02>,<01,03>,<02,04>} tree数据结构中,除了第一个元素(01除外),每个元素都有并且只有一个前驱元素,但每一个元素后面都可以有多个直接后继,一对多的关系 例4:二元组: graph= {D,S}

    其中 D={01,02,03,04,05}

    S={<01,02>,<01,03>,<02,05>,<05,06>,<06,02>,<05,04>,<04,05> }

    在graph数据结构中,每个元素可以有多个直接前驱元素,也可以有多个后继元素
    多对多的关系,图形结构数据的物理结构就是逻辑结构在计算机中的存储表示,他有两种表示形式:
    1.顺序存储。 2.链式存储 
    1.顺序存储:就使用一块连续的存储空间,数据之间紧挨在一起,数据的前驱和后续的关系可以通过数据元素在内存中相对位置反映出来
    2.链式存储:数据元素的存储位置不是连续的,每个元素保存下个元素的存储位置
  • 数据类型

    • 一组性质相同的数据大集合及该数据集合上操作的总称

    • 如:Java中的int类型,数据的集合:-2147483648-2147483647,在组数据上的操作:加,减,乘,除.....

  • 抽象数据类型(abstract data type)简称ADT

    • 由一组数据模型及该模型上的一组操作组成

    • 抽象数据类型ADT,仅仅讨论它的逻辑性,不关心实现

    • 抽象数据类型一般使用一个 三元组表示:

      • ADT = (D,S,P)

      • D是数据对象,S是D上的关系,P是D上的操作

    • 在定义抽象数据类型,可以使用以下的格式:

ADT 抽象数据类型名{
    数据对象:<数据对象的定义>
    数据关系:<数据关系的定义>
    数据操作:<基本操作的定义>
}
抽象数据类型可以对应一个Java类,数据对象与数据关系可以通过类的成员变量来存储和表示,数据操作可以使用方法来实现。
  • 算法

    • 算法就是为解决某一个特定问题而规定的一系列操作,是一组有序的指令的集合

    • 数据结构和算法可以看做,一对闺蜜

  • 算法有五个特性:

    • 输入:一个算法有0个或多个输入

    • 输出:至少有一个输出,没有输出的算法是没有意义的

    • 有穷性:算法中执行指令的个数应该是有限的,执行有穷的步骤后能结束

    • 确定性:对于特定的合法输入它的输出应该是唯一的

    • 可行性:算法能够实现,并且在有限的时间内完成

  • 算法设计要求:

    • 正确性:没有语法错误,对于合法的输入产生满足要求的输出,对于特定的输入也能够产生正确的输出

    • 可读性:算法另一个目的是为了交流,方便阅读

    • 健壮性:对于不合理的要求,也能给出合理的提示信息,而不是崩溃

    • 时间效率高与存储空间小。

  • 评价一个算法性能的好坏,实际上就评价算法的资源占有率。计算机最重要的资源就是时间和空间

    • 使用时间复杂度衡量程序运行需要的时间

    • 使用空间复杂度衡量程序所占内存的大小

  • 时间复杂度

    • 讨论计算机程序运行的时间可采用以下方法

      • 事后统计

        • 编程实现这个算法,统计所需要的时间(不准)

      • 事前分析

        • 采用渐进时间复杂度分析估算

      • 渐进时间复杂度,简称时间复杂度。在进行算法分析时,语句总的执行次数,记作T(n),

        是关于时间规模n的函数,分析T(n)随着问题规模n的变化情况,确定T(n)的数量级。

      • T(n) = O(f(n)) ,表示随着问题规模n的增大,算法执行的时间增长率和f(n)函数的增长率相同。f(n)是问题规模n的一个函数

      • 随着输入规模n的增大,T(n)增长越慢的算法越好。

  • 空间复杂度

    • 为了解决某一问题,在执行操作期间所需要的存储空间大小,不包含用来存储输入所需要的空间

    • 记作S(n) = O(f(n))

    • 算法的空间复杂度是以时间复杂度为上限的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java+每天进步亿点点

一起学习一起进步一起高薪

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值