当前位置:文档之家› 自考数据结构课件 第一章 绪论

自考数据结构课件 第一章 绪论


5.数据类型和抽象数据类型
数据类型(Data Type) 自20世纪70年代以来,几乎所有的高级程序设计语言都提供了这一 概念。在用高级语言编写的程序中间,程序中出现的每个变量,常量 或表达式,都必须事先说明它们所属的数据类型,每个类型都明显或 隐含的规定了在程序执行期间它的变量,它的表达式所允许取值的范 围,以及允许进行的操作,因此 所谓数据类型是一个值的集合以及在这些值上定义的一组操作的总称。 通常数据类型可以看作是程序设计语言中已实现的数据结构。 【例1.2】C语言的"整数类型"就定义了一个整数可取值的范围(其 最大值INT-MAX依赖于具体机器)以及对整数可施加的加、减、乘、 除和取模等操作。 按"值"是否可分解,可将数据类型划分为两类: ①原子类型:其值不可分解。通常是由语言直接提供。 【例】C语言的整型、字符型等标准类型及指针等简单的导出类型; ②结构类型:其值可分解为若干个成分(或称为分量)。是用户借助 于语言提供的描述机制自己定义的,它通常是由标准类型派生的,故 它也是一种导出类型。 【例】C的数组、结构等类型。
3.数据的四种基本存储方法
数据的存储结构可用以下四种基本存储方法得到: (1)顺序存储方法 该方法把逻辑上相邻的结点存储在物理位置上相邻 的存储单元里,结点间的逻辑关系由存储单元的邻接 关系来体现。 由此得到的存储表示称为顺序存储结构,通常借助 程序语言的数组描述。 该方法主要应用于线性的数据结构。非线性的数 据结构也可通过某种线性化的方法实现顺序存储。 (2)链接存储方法 该方法不要求逻辑上相邻的结点在物理位置上亦相 邻,结点间的逻辑关系由附加的指针字段表示。由此 得到的存储表示称为链式存储结构(Linked Storage Structure),通常借助于程序语言的指针类型描述。
存储内容 元素1 元素4 …….. 元素2 ……..
指针 1400 ∧ ……. 1536 …….
1536
ห้องสมุดไป่ตู้
元素3
1346
(3)索引存储方法 该方法通常在储存结点信息的同时,还建立附加的索引表。 索引表由若干索引项组成。若每个结点在索引表中都有一个 索引项,则该索引表称之为稠密索引(Dense Index)。若一组 结点在索引表中只对应一个索引项,则该索引表称为稀疏索引 (Spare Index)。索引项的一般形式是: (关键字、地址) 关键字是能唯一标识一个结点的那些数据项。稠密索引中索引 项的地址指示结点所在的存储位置;稀疏索引中索引项的地址 指示一组结点的起始存储位置。 (4)散列存储方法 该方法的基本思想是:根据结点的关键字直接计算出该结点 的存储地址。 四种基本存储方法,既可单独使用,也可组合起来对数据结 构进行存储映像。 同一逻辑结构采用不同的存储方法,可以得到不同的存储结 构。选择何种存储结构来表示相应的逻辑结构,视具体要求而 定,主要考虑运算方便及算法的时空要求。
数据项(data
element)—是数据的基本单位,
由若干个数据项组成,也称结点、元素、顶点或记录。
item)—是具有独立含义的最小标
识单位,有时也称为域(field),即数据表中的字 段。
数据结构(data
structure):指的是数据之间
的相互关系,即数据的组织形式。 数据结构一般包括以下三方面内容: ① 数据元素之间的逻辑关系,也称数据的 逻辑结构(Logical Structure); ② 数据元素及其关系在计算机存储器内的 表示,称为数据的存储结构(Storage Structure); ③ 数据的运算,即对数据施加的操作。
(2)存储结构 该表的存储结构是指用计算机语言如何表示结点之间的这种关 系,即表中的结点是顺序邻接地存储在一片连续的单元之中,还是 用指针将这些结点链接在一起? (3)数据的运算 在上面的学生成绩表中,可能要经常查看某一学生的成绩;当 学生退学时要删除相应的结点;进来新学生时要增加结点。究竟如 何进行查找、删除、插入,这就是数据的运算问题。 搞清楚了上述三个问题,也就弄清了学生成绩表这个数据结构。
IsDescending(T) 初始条件:三元组T已存在。
操作结果:如果 T 的 3 个元素按降序排列,则 返回1,否则返回0。 Max(T,&e) 初始条件:三元组T已存在。 操作结果:用e返回T的3个元素中的最大值。 Min(T,&e) 初始条件:三元组T已存在。 操作结果:用e返回T的3个元素中的最小值。 }ADT Triplet
用户也可用typedef 自己定义数据类型
typedef struct { int num; char name[20]; float score; } STUDENT; STUDENT stu1,stu2, *p;
抽 象 数 据 类 型 ADT ( Abstract Data Type)
定义:是指抽象数据的组织和与之相关的操作。可以 看作是数据的逻辑结构及其在逻辑结构上定义的操作 。 数据结构+定义在此数据结构上的一组操作 = 抽象 数据类型
为了增加对数据结构的感性认识,下面举例来说明有关数据结构的概 念。 【例1.1】 学生成绩表,见下表。
(1)逻辑结构 表中的每一行是一个数据元素(或记录、结点),它由学号、 姓名、各科成绩及平均成绩等数据项组成。 表中数据元素之间的逻辑关系是:对表中任一个结点,与它相邻且 在它前面的结点(亦称为直接前趋(Immediate Predecessor))最 多只有一个;与表中任一结点相邻且在其后的结点(亦称为直接后 继(Immediate Successor))也最多只有一个。表中只有第一个结 点没有直接前趋,故称为开始结点;也只有最后一个结点没有直接 后继。故称之为终端结点。例如,表中"李四"所在结点的直接前趋 结点和直接后继结点分别是"张三"和"王五"所在的结点,上述结点 间的关系构成了这张学生成绩表的逻辑结构。
教材: 自考《数据结构》 苏仕华 编著
授课教师:涂风华 开始日期:2014年3月1日
第1章 概论
1.1 基本概念和术语
1.2 学习数据结构的意义 1.3 算法的描述和分析
§1.1 基本概念和术语
数据(data)—是信息的载体。它能够被计算机识
别、存储和加工处理,是计算机程序加工的"原料"。
数据元素(data
2.数据的逻辑结构分类
在不产生混淆的前提下,常将数据的逻辑结构简称 为数据结构。数据的逻辑结构有两大类: (1)线性结构 线性结构的逻辑特征是:若结构是非空集,则有且 仅有一个开始结点和一个终端结点,并且所有结点都 最多只有一个直接前趋和一个直接后继。 线性表是一个典型的线性结构。栈、队列、串等都 是线性结构。 (2)非线性结构 非线性结构的逻辑特征是:一个结点可能有多个直 接前趋和直接后继。数组、广义表、树和图等数据结 构都是非线性结构。
DestroyTriplet(&T) 操作结果:三元组T被销毁。 Get(T,i,&e) 初始条件:三元组T已存在, 1<=i<=3. 操作结果:用e返回T的第i元的值。 Put(&T,i,e) 初始条件:三元组T已存在,1<=i<=3. 操作结果:改变T的第i元的值为e。 IsAscending(T) 初始条件:三元组T已存在。 操作结果:如果T的3个元素按升序排列 ,则返回1,否则返回0。
存储地址 存储内容
Lo 元素1 元素2 ……..
Lo+m
顺序存储
Lo+(i-1)*m
元素i
…….. Lo+(n-1)*m
元素n
Loc(元素i)=Lo+(i-1)*m
h
1345
链式存储
元素2 1536 元素3 1346 元素4
h
元素1 1400

存储地址 1345 1346 ……. 1400 …….
基本操作的定义格式: 赋值参数 基本操作名(参数表) 初始条件:〈初始条件描述〉 操作结果:〈操作结果描述〉
引用参数,以“ &”打头
例:抽象数据类型三元组的定义: ADT Triplet{ 数据对象:D={e1,e2,e3 |e1,e2,e3∈Elemset} 数据关系:R1={<e1,e2>, <e2,e3> } 基本操作: InitTriplet(&T,v1,v2,v3) 操作结果:构造了三元组T, 元素e1,e2和e3分别被赋以 参数v1,v2和v3的值。
4.数据结构三方面的关系
数据的逻辑结构、数据的存储结构及数据的运算这三方面是 一个整体。孤立地去理解一个方面,而不注意它们之间的联系 是不可取的。 存储结构是数据结构不可缺少的一个方面:同一逻辑结构的 不同存储结构可冠以不同的数据结构名称来标识。 【例】线性表是一种逻辑结构,若采用顺序方法的存储表示 ,可称其为顺序表;若采用链式存储方法,则可称其为链表; 若采用散列存储方法,则可称为散列表。 数据的运算也是数据结构不可分割的一个方面。在给定了数 据的逻辑结构和存储结构之后,按定义的运算集合及其运算的 性质不同,也可能导致完全不同的数据结构。 【例】若对线性表上的插入、删除运算限制在表的一端进行 ,则该线性表称之为栈;若对插入限制在表的一端进行,而删 除限制在表的另一端进行,则该线性表称之为队列。更进一步 ,若线性表采用顺序表或链表作为存储结构,则对插入和删除 运算做了上述限制之后,可分别得到顺序栈或链栈,顺序队列
①数据的逻辑结构是从逻辑关系上描述数据,与 数据的存储无关,是独立于计算机的。数据的逻 辑结构可以看作是从具体问题抽象出来的数学模 型。 ②数据的存储结构是逻辑结构用计算机语言的实 现(亦称为映象),它依赖于计算机语言。对机 器语言而言,存储结构是具体的。一般,只在高 级语言的层次上讨论存储结构。 ③数据的运算定义在数据的逻辑结构上,每种逻 辑结构都有一个运算的集合。最常用的检索、插 入、删除、更新、排序等运算实际上只是在抽象 的数据上所施加的一系列抽象的操作。 所谓抽象的操作,是指我们只知道这些操作是 "做什么",而无须考虑"如何做"。只有确定了存 储结构之后,才考虑如何具体实现这些运算。 3
相关主题