数据结构1
数据结构讨论的范畴:
Algorithm + Data Structures = Programs
—— Niklaus Wirth
Programs : 为计算机处理问题编制一组指令集
Algorithm: 处理问题的策略
Data Structure: 问题的数学模型
概括地说:
数据结构描述现实世界实体的数学模型(非数值计算)及其上的操作在计算机中的表示和实现。
数据:是计算机处理的信息的某种特定的符号表示形式。
数据结构:带结构的数据元素的集合。
数据结构的形式定义为:
数据结构时一个二元组
=(D, S)
抽象数据类型(Abstract Data Type 简称ADT)是指一个数学模型以及定义在此数学模型上的一组操作。
ADT有两个重要特征:
数学抽象 用ADT描述程序处理的实体时,强调的是其本质的特征,其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)
数据封装
将实体的外部特性和其内部实现细节分离,并且对外部用户隐藏其内部实现细节。
抽象数据类型的描述方法
抽象数据类型可用(D, S, P)三元组表示,其中,D是数据对象,S是D上的关系集,P是对D的基本操作集。
抽象数据类型的表示和实现:
抽象数据类型需要通过固有的数据类型(高级编程语言汇总已实现的数据类型)来实现。
算法和算法的度量
算法:是为了解决某类问题而规定的一个有限长的操作序列,一个算法必须满足以下五个重要特性:
有穷性,确定性,可行性,输入,输出
算法效率的衡量方法和准则:
事后统计法: 缺点:1.必须执行程序。 2。其它因素掩盖算法的本质。
事前分析估算:算法选用的策略,问题的规模,编写程序的语言,编译程序产生的机器代码的质量,计算机执行指令的速度。
一个特定算法的“运行工作量”的大小,只依赖于问题的规模(通常用整数量n表示),或者说,它是问题规模的函数。
假如,随着问题规模n的增长,算法执行时间的增长率和f(n)的增长率相同,则可记作: T(n)=O((f(n)))
算法=控制结构+原操作(固有数据类型的操作)
算法的执行时间=原操作的执行次数*原操作的执行时间
算法的存储量包括:
1. 输入数据所占空间; 2.程序本身所占空间 3.辅助变量所占空间。
2. 若输入数据所占空间只取决与问题本身,和算法无关,则只需要分析除输入和程序之外的辅助变量所占的额外空间。若所需额外空间相对于输入数据量而言是常量,则称此算法为原地工作。
抽象数据类型线性表的定义如下:
ADTList {
数据对象:
D={ai| ai C ElemSet, i=1,2,….n, n>=0}
{称n为线性表的表长;称n=0时的线性表为空表}
}
数据关系:
R1={<ai-1,ai>|ai-1, aiCD, i=2..n}
{设线性表的元素}
基本操作:
{结构初始化}
InitList(&L)
操作结果:构造一个空的线性表L。
{销毁结构}
DestroyList(&L)
初始条件:线性表L已存在
操作结果:销毁线性表L