数据结构概述
数据结构
* 数据结构
*概述和术语
2.数据
数据是信息的载体,是描述客观事物的数,字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。
3.数据元素
数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可以由若干个数据项组成。
例如:学生记录就是一个数据元素,学生记录包含了学生姓名,学号,性别等数据项组成。
4.数据对象
是性质相同的数据元素集合,是数据的一个子集。
例如:整数集数据对象集合H={-1,0,1,2,3…}
5.数据类型
数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
1.原子类型
其值是不可再分的数据。
例如:整数型int ,双精度型double,字符型char等。
2.结构类型
其值可以分解成若干成分。
如数组。
6.抽象数据类型
抽象数据类型(abstract data type ,简称ADT)是指一个数学模型以及定义在该模型上的一组操作。可以定义一个完整的数据结构。抽象数据类型和数据类型实质是一个概念,例如:各个计算机都拥有的“整数”类型是一个抽象数据类型,尽管它们在不同的处理器上实现的方式可以不同,但由于其定义的数学特性相同,在用户看来是一样的。因此“抽象”的意义在于数据类型的数学抽象特性。
抽象数据类型的定义由一个值域和定义在该值域上的一组操作组成。若按其值的不同特性,可细分为三种类型:
1.原子类型:值是不可分解的。
2.固定聚合类型:其值由确定数目的成分按某种结构组成。例如。复数由是由两个实数依确定的次序关系构成。
3.可变聚合类型:和固定聚合类型相比较,构成可变聚合类型值的成分的数目是不确定的。例如:可以定义一个“有序整数序列”的抽象数据类型,其中序列长度是可变的。
抽象数据类型可以用以下三元组表示:
(D,S,P)
D:数据对象,S:D上的关系,P:对D的操作
定义格式:
ADT 抽象数据类型名{
数据对象:(数据对象的定义)
数据关系:(数据关系的定义)
基本操作:(基本操作的定义)
}ADT 抽象数据类型名
7.数据结构
数据结构是相互之间存在一种或者多种特定的关系的数据元素的集合。在任何问题上都不是孤立存在的,它们之间存在某种关系,这种数据元素之间相互存在的关系称为结构。
数据结构包括三个方面:逻辑结构,物理结构(存储结构)和数据的运算。
数据的逻辑结构和物理结构(存储结构)是密不可分的,一个算法的设计取决于逻辑结构,算法实现依赖采用的物理结构(存储结构)。
* 三要素
数据结构的三要素为逻辑结构,物理结构,数据运算。
1.数据的逻辑结构
*什么是数据的逻辑结构
逻辑结构是数据元素之间的逻辑关系。即从逻辑关系上描述数据,它与数据的存储无关。
*逻辑结构的分类
线性结构
一般线性结构
受限线性表:栈,队列,串
线性表推广:数组
非线性结构
集合
树形结构:一般树,二叉树
图状结构:有向图,无向图
2.数据的物理结构(存储结构)
*什么是数据的物理结构(存储结构)
存储结构是指数据结构在计算机中的表示(又称映像)。他包括数据元素的表示和关系的表示。数据的存储结构是用于计算机语言实现的逻辑结构,它依赖与计算机语言。
*物理结构分类
1)顺序存储
思想:把逻辑上相邻的元紧存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。
优点:可以实现随机存取毎个元紧占用最少的存储空间。
缺点:只能使用相邻的一整块存储单元,因此可能产生较多的外部碎片。
2)链式存储。
思想:不要求逻辑上相邻的元素在物理位计上也相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系。
优点:是不会出现碎片现象,能充分利用所有存储单元;
缺点:每个元素因存储指针而占用额外的存储空间,且只能实现顺序存取。
3)索引存储。
思想: 在存储元紫信息的同时,还建立附加的索引表。索引表中的每项称为索引项, 索引项的一般形式是(关键学,地址)。
优点:检索速度快;
缺点:附加的索引表额外占用存储空间。另外,增加和删除数据时也要修改索引表,
因而会花费较多的时间。
4)散列存储。
思想:根据元素的关键字直接计算出该元素的存储地址,又称哈希( Hash )存储。
优点:检索、增加和删除结点的操作都很快:
缺点:若散列函数不好,则可能出现元素存储单元的冲突,而解决冲突会增加时间和空间开销
3.数据的运算
施加在数据上的运算包括运算的定义和实现。运算的定义是针对逻辑结构的,指出运算的功能
运算的实现是针对存储结构的,指出运算的具体操作步骤
算法
概述及特性
* 什么是算法
是对特定问题求解步骤的描述,他是指令有限序列,其中某个指令可包含一个或者多个操作。
*算法的特性
1.可行性
算法中描述的操作都可以通过已经实现的基本运算执行有限次操作。
2.有穷性
一个算法必须在执行有穷个步之后结束,且每步都是可在有穷时间内完成的。
3.确定性
算法中每条指令必须有确切的含义,对于相同的输入只能得到相同的输出。
4.输入
一个算法有零个或者多个输入,这些取自于某个特定的对象集合。
5.输出
一个算法有一个或者多个输出,这些输出是与输入有着某种特定关系的量。
*优秀的算法应该具备的特点
1.正确性
算法应该正确地解决求解问题。
2.可读性
算法应该有良好的可读性,帮助人们理解。
3.健壮性
输入非法数据时,算法能适应地做出反应或进行处理,而不会产生莫名其妙的输出结构。
4.效率
效率是指算法执行的时间,存储量需求是指算法执行过程中所需要的最大存储空间,这两者的规模问题有关。
*算法效率的度量
1.时间复杂度
时间复杂度语句频度的总和,语句频度是指该语句在算法中被重复执行的次数。
2.空间复杂度
一个程序执行时所需要的存储空间来存放本身所用指令、常数、变量和输入数据外,还需要对一些数据进行操作的工作单元和存储一些为实现计算机所需信息的辅助空间。即空间复杂度。