数据结构——第1章 绪论

金歌  金牌会员 | 2024-4-26 17:18:15 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 936|帖子 936|积分 2808

目录

1.1 数据结构的研究内容

1.2 基本概念和术语

1.2.1 数据、··元素、··项和··对象

数据:是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。
数据元素:是数据的基本单位,也称元素/记录,用于完整地描述一个对象。如学生表中的一名学生。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。如学生基本信息表中的学号、姓名、性别等。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。如整数数据对象、字母字符数据对象、由多个数据项组成的复合数据元素。
1.2.2 数据结构

数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系,包括逻辑结构和存储结构。
一、逻辑结构
从逻辑关系上描述数据,与数据的存储无关,独立于计算机,数据元素和关系两要素

  • 集合结构
数据元素之间只有“属于同一集合”的关系。
如确定一名学生是否为班级成员,只需将班级看作一个集合结构。

  • 线性结构
数据元素之间存在一对一的关系。
如将学生信息数据按照其入学报道的时间先后顺序进行排列。

  • 树结构
数据元素之间存在一对多的关系。
如在班级的管理体系中,班长管理多个组长,每位组长管理多名组员。

  • 图结构或网状结构
数据元素之间存在多对多的关系。
如多位同学之间的朋友关系,任何两位同学都可以是朋友。
总结

二、存储结构
数据对象在计算机中的存储表示,也称物理结构。把数据对象存储到计算机时,通常既要存储各数据元素的数据,又要存储数据元素之间的逻辑关系。

  • 顺序存储结构
借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,要求所有的元素依次存放在一片连续的存储空间中,数据从低地址向高地址方向储存,通常借助数组类型来描述。

  • 链式存储结构
无需占用一整块存储空间,但为了表示数据元素(结点)之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址,通常借助指针类型来描述。每个结点占用两个连续的存储单元。
1.2.3 数据类型和抽象数据类型


  • 数据类型
在程序设计语言中,每一个数据都属于某种数据类型。类型规定了数据的取值范围、存储方式以及允许进行的运算,数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
如C语言中的整型变量,其值集为某个区间上的整数,定义在其上的操作为加减乘除和取模等算术运算。

  • 抽象数据类型
就是指由用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称,具体包括...三部分(如下)
定义格式:
  1. ADT 抽象数据类型名
  2. {
  3.     数据对象:<定义>
  4.     数据关系:<定义>//采用数学符号和自然语言描述
  5.     基本操作:<定义>
  6. }ADT 抽象数据类型名
复制代码
基本操作的定义格式:
  1. 基本操作名(参数表)
  2. //赋值参数只为操作提供输入值,以“&”开头,除此之外还将返回操作结果
  3.         初始条件:<描述>//操作执行之前数据结构和参数应满足的条件,为空则省略
  4.         操作结果:<描述>//操作完成后,数据结构的变化状况和应返回的结果
复制代码
1.3 抽象数据类型的表示与实现

运用抽象数据类型描述数据结构,有助于在设计一个软件系统时,不必首先考虑其中包含的数据对象,以及操作在不同处理器中的表示和实现细节,而是在构成软件系统的每个相对独立的模块上定义一组数据和相应的操作,把这些数据的表示和操作细节留在模块内部解决,在更高的层次上进行软件的分析和设计,从而提高软件的整体性能和利用率。
在C++中,用类的声明表示抽象数据类型,用类的实现来实现抽象数据类型。因此,C++中实现的类相当于数据的存储结构以及在存储结构上实现的对数据的操作。
(有在尽量缩减篇幅了其实,觉得这些很有助于理解就保留了)
以复数为例,
  1. //定义部分
  2. ADT Complex
  3. {
  4.     数据对象:D={e1,e2|e1,e2∈R,R是AXT实数集}
  5.     数据关系:S={<e1,e2>|e1是复数的实部,e2是复数的虚部}
  6.     基本操作:
  7.         Create(&C,x,y)
  8.           操作结果:构造复数C,其实部和虚部分别被赋以参数x和y的值。
  9.         Add(C1,C2)
  10.           初始条件:C1,C2是复数。
  11.           操作结果:返回两个复数C1和C2的和。
  12. }ADT Complex
  13. //表示部分
  14. typedef struct      //复数类型
  15. {
  16.     float Realpart; //实部
  17.     float Imagepart;//虚部
  18. }Complex;
  19. //实现部分
  20. void Create(&Complex C,float x,float y)
  21. {
  22.     //构造一个复数
  23.     C.Realpart=x;
  24.     C.Imagepart=y;
  25. }
  26. Complex Add(Complex C1,Complex C2)
  27. {
  28.     //求两个复数C1和C2的和
  29.     Complex sum;
  30.     sum.Realpart=C1.Realpart+C2.Realpart;
  31.     sum.Imagepart=C1.Imagepart+C2.Imagepart;
  32.     return sum;
  33. }
复制代码
1.4 算法和算法分析

1.4.1 算法的定义与特性

算法是为了解决某类问题而规定的一个有限长的操作序列。
有穷性、确定性、可行性、输入和输出。
1.4.2 算法的时间复杂度

描述的是算法执行时间开销和问题规模n之间的关系。包含最好、平均和最坏时间复杂度。时间复杂度通常包括:常量阶、线性阶、平方阶、对数阶等。
求下面语句的执行次数:
[code]for(i=1;i

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表