数据结构 第一章 绪论

来源:互联网 发布:直销会员结算软件 编辑:程序博客网 时间:2024/05/16 15:19

如何编写一个好的程序?
三步:分析待处理问题的特性、提取对象模型,设计应用于该对象的算法;

定义
1.数据:客观事物的符号表示(广义);能够输入计算机并被处理的符号总称。
2.数据元素:对于待分析问题而言的基本数据单元。一个数据元素可以有多个属性,称为数据项。比如人有五官,但是人力资源管理者看来,考虑问题的单位是人。
3.数据对象:同性质的数据元素的集合。此“对象”非C++中的“对象”。
4.数据结构:具有某种或多种关系的数据元素集合。按元素的关系分类,大体上有四种类别的数据结构:
(1)线性结构:元素之间存在一对一的关系.如电话目录上的联系人。
(2)树:一对多。如公司的人员结构。
(3)图:多对多。如星座。
(4)集合:无特殊关系的集合,关系仅为所有元素属于同一个集合。
1-4关系: 1包含3包含4包含2

数据结构
1.数据结构有逻辑结构和存储结构之分.逻辑结构表示数据结构的抽像,与算法的设计有关;而存储结构则与算法的实现有关。算法和数据结构紧密联系,对与每一个问题,选取合适的数据结构直接决定算法设计。
2.逻辑结构的形式定义:DataStructure = (D, S)
D:由有限的元素组成的集合, S:该集合内部元素的关系的有限集(关系可以不止一种,故有“关系集合”一说)
3.存储结构的中的元素又可称为结点。如果s的表示是通过d之间的相对位置来表示的,那么它是顺序存储结构;如果s的表示是通过指针来表示的,那么称它为链式存储结构

数据类型
1.定义:一个值的集合和定义在该集合上的一组操作的总称。
2.虽然数据类型的概念由高级语言引入,但是在硬件层次上也存在这一概念。如CPU中的位、字节、字。
3.数据类型有原子类型结构类型之分,原子类型即为基本类型,不可分解;结构类型有原子类型构成,结构类型中可以包含其他的结构类型,即可分解。
4.数据结构和数据类型的区别:数据结构关注的是计算机存储和组织数据的方式,以及各个组成元素之间的关系;而数据类型关注的是逻辑层面上的类型的描述,关注数据的有效操作。

ADT抽象数据类型
1.一个抽象出来的数学模型及其操作的集合。ADT本质也是一种数据类型。ADT强调用户自定义的数据类型。
2.可分为三类:
(1)原子类型:较少。大部分原子类型已经由编译器实现。有者,比如四精度的浮点数,1000位的整数。(这些基本用不到)
(结构类型:)
(2)固定聚合类型:结构的组分(成员)数目固定,如复数类型
(3)可变聚合类型:结构的组分数目不固定,如可变数组
(4)多形数据类型:组分的具体类型不固定。类似于C++中模板类型T,但是操作是固定的。讨论各种数据结构(表、树、图)时,其实就是该类型(可以为具体化为int, double等)
3.形式化表示:(D, S, P),多了一个P(基本操作集合),多了对数据的操作(如+、-、*、/)
伪码
ADT typename
{
 D://数据对象定义
 S://数据关系定义
 P://基本操作定义
  p1(parameterlist)//基本操作名(参数列表)
   initial://初始条件,
   influence://操作结果
 p2……
  ……
  ……
}ADT typename

初始条件为操作必须满足的先决条件,不满足时返回错误或终止程序。
4.抽象数据类型typename的表示和实现
(1)类型定义
(2)基本操作函数声明
(3)基本操作函数定义

算法
1.算法即是指令序列,一个算法可以没有输入,但一定有输出
2.算法的设计要求:
(1)正确性:(对于正确的输入),能够得到正确的结果。有些算法只要在绝大多数数情况下正确即可。
 (2)可读性
 (3)健壮性:对于错误的输入,能够做出相应的反应。
 (4)高效率(运行时间短)、低存储量。

算法效率
1.时间复杂度:

事前统计方法:一个算法的运行时间取决于4个要素:
 (1)算法策略
 (2)问题规模
 (3)编程语言
 (4)编译器产生的机器代码质量
 (5)CPU执行单位指令的时间

如何使用事前统计方法
从算法中选取一个对于问题而言的基本操作,表示为问题规模n的函数f(n),O(f)即为算法的时间复杂度(O表示操作时间)。对于依赖问题输入的O,f即可取其平均值,也可取其最坏情况下对应的最大值

事后统计方法:在程序运行时获取算法的执行时间

2.空间复杂度

原地工作:执行算法所需要的额外空间是个常数。

0 0