您的位置:首页 > 理论基础 > 数据结构算法

数据结构 第一章 绪论

2016-01-23 09:36 330 查看
如何编写一个好的程序?

三步:分析待处理问题的特性、提取对象模型,设计应用于该对象的算法;

定义

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.空间复杂度

原地工作:执行算法所需要的额外空间是个常数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 数据结构