串的抽象数据类型的定义.
- 格式:ppt
- 大小:230.50 KB
- 文档页数:44
数据结构简答题和论述题1、试描述数据结构和抽象数据类型的概念与程序设计语⾔中数据类型概念的区别。
【解答】数据结构是指相互之间存在⼀定关系的数据元素的集合。
⽽抽象数据类型是指⼀个数据结构以及定义在该结构上的⼀组操作。
程序设计语⾔中的数据类型是⼀个值的集合和定义在这个值集上⼀组操作的总称。
抽象数据类型可以看成是对数据类型的⼀种抽象。
串:是零个或多个字符组成的有限序列。
串是⼀种特殊的线性表,它的每个结点仅由⼀个字符组成。
空串 :长度为零的串,它不包含任何字符。
空⽩串 :仅由⼀个或多个空格组成的串⼦串 :串中任意个连续字符组成的⼦序列称为该串的⼦串。
串变量和串常量通常在程序中使⽤的串可分为:串变量和串常量。
(1)串变量 :串变量和其它类型的变量⼀样,其取值是可以改变的。
(2)串常量 :串常量和整常数、实常数⼀样,在程序中只能被引⽤但不能改变其值。
即只能读不能写。
(1)树形图表⽰: 树形图表⽰是树结构的主要表⽰⽅法。
(2)树的其他表⽰法① 嵌套集合表⽰法:是⽤集合的包含关系来描述树结构。
② 凹⼊表表⽰法:类似于书的⽬录③ ⼴义表表⽰法:⽤⼴义表的形式表⽰的。
上图 (a)树的⼴义表表⽰法如下:(A(B(E,F(I,J)), C,D(G,H)))1.中序遍历的递归算法定义:若⼆叉树⾮空,则依次执⾏如下操作:(1)遍历左⼦树; (2)访问根结点; (3)遍历右⼦树。
2.先序遍历的递归算法定义:若⼆叉树⾮空,则依次执⾏如下操作:(1) 访问根结点; (2) 遍历左⼦树; (3) 遍历右⼦树。
3.后序遍历得递归算法定义:若⼆叉树⾮空,则依次执⾏如下操作:(1)遍历左⼦树; (2)遍历右⼦树; (3)访问根结点。
2、链表具有的特点是B 插⼊、删除不需要移动元素C 不必事先估计存储空间D 所需空间与线性表长度成正⽐顺序队列(1)队列的顺序存储结构称为顺序队列,顺序队列实际上是运算受限的顺序表。
(2) 顺序队列的表⽰①和顺序表⼀样顺序队列⽤⼀个向量空间存放当前队列中的元素。
【⼆】、什么是抽象数据类型【⼆】、什么是抽象数据类型在上⼀篇【】中我详细介绍了我对数据结构的理解,其实描述数据结构,有⼀个很好的⽅法叫抽象数据类型。
下⾯我会详细介绍抽象数据类型。
抽象数据类型英⽂名叫(Abstract Data Type),这⾥有两个关键词,⼀个叫“数据类型”,⼀个叫“抽象”,它们分别是什么意思呢?⾸先说什么是数据类型呢?数据类型,它包含了两个东西,⼀个是“数据对象集”,就是我们说的“是什么东西”,第⼆个是“数据集合相关联的操作集”,就上我在上⼀篇中说的,我们不能单纯讲怎么去处理图书,我们是要对这些图书进⾏操作的,这两件事情:图书的摆放,对图书的操作,是紧密结合在⼀起的。
这两个东西在C语⾔⾥是独⽴处理的,但是在⼀些⾯向对象的语⾔⾥边,⽐如C++、Java,你就会发现,它们很好的为数据类型专门设计了⼀种机制,就是⼀个“类”,把这个数据集跟它相关的操作集封装在⼀个类⾥⾯。
那再说什么是抽象呢?总体来说,我们只描述数据对象集和相关的操作集"是什么",我们不关⼼“它是怎么做到的”这个问题。
可能到现在⼀些没有基础的朋友看起来还是很抽象,没关系,我再举个例⼦,可能帮助你更好的理解抽象数据类型到底是个什么东西,这个例⼦是关于“矩阵”的抽象数据类型的定义。
⾸先我们要给这个抽象数据类型⼀个名称叫“矩阵”,然后我们要描述⼀下它的数据对象集,⼀个N M的矩阵,是由N M个矩阵的元素构成的,我们把这个元素描述成⼀个三元组a,i,j,其中a是这个矩阵元素的值,同时我们还需要知道这个矩阵元素在矩阵⾥⾯所处的位置,就是它的⾏号i和列号j,就这样描述了⼀个数据的对象集,相关联的操作集有很多很多(如下图)我们来看⼀下,为什么这个就叫做“抽象”的表⽰呢?⾸先我们来看,在描述数据对象集的时候,说a是矩阵元素的值,那这个值是float?还是double?还是int?我们在这个抽象数据类型中描述是不关⼼的,相应地,当需要对它的元素值进⾏操作的时候,我们返回的也是ElementType,是⼀个通⽤的元素类型,我在实现这个矩阵相关的所有函数的时候,我在头上写⼀个define,你需要什么,我就把它define(定义)成什么样⼦,这样的话,你实现的这些函数是跟“你那个矩阵元素到底是哪种类型”是没有关系的,哪种类型都是可以运算的。
抽象数据类型1.数据类型数据类型(data type)是⼀个值的集合和定义在这个值集上的⼀组操作的总称。
原⼦类型:如语⾔的整形、字符型等标准类型及指针等简单的导出类型和空类型。
结构类型:其值是由若⼲成分按某种结构组成的,因此是可以分解的,并且它的成分可以是⾮结构的,也可以是结构的,通常是由标准类型派⽣的。
例如,C/C++中的数组、结构等类型。
2.抽象数据类型(abstract data type, ADT)抽象数据类型是指⼀个数学模型以及定义在该模型上的⼀组操作。
它通常是指对数据的某种抽象,定义了数据的取值范围及其结构形式,以及对数据的操作的集合。
“抽象”的意义在于数据类型的数学抽象特性。
3.抽象数据类型的描述⽅法(D,S,P)D是数据对象,S是D上的关系集,P是对D的基本操作集。
4.抽象数据类型⼀般可以由数据对象、数据关系及基本操作来定义。
ADT 抽象数据类型{数据对象(数据对象的定义)数据关系(数据关系的定义)基本操作(基本操作的定义)}ADT 抽象数据类型名其中,数据对象和数据关系的定义⽤集合描述,基本操作的定义格式为返回类型基本操作名(参数表)5.对于每个操作,包含下列5个基本要素:输⼊前置条件过程输出后置条件6.基本操作有两种参数:赋值参数只为操作提供输出值;引⽤参数以&开头,除可提供输出值外,还将返回操作结果。
7.⾯向对象的程序设计(OPP)⽅法。
在⾯向对象程序设计语⾔中,借助对象描述抽象数据类型,存储结构的说明和操作函数的说明被封装在⼀个整体结构中,这个整体结构称为类(class),属于某个类的具体变量称为对象(object)。
8.ADT和类的概念实际上反映了程序或软件设计的两层抽象:ADT相当于是在概念层(抽象层)上描述问题,⽽类相当于是在实现层上描述问题。
抽象数据类型与C++中类的对应关系如下:抽象数据类型——类数据对象——数据成员(属性)基本操作——成员函数(⽅法)。
第1章绪论1.1 数据结构的基本概念数据元是数据的基本单位,一个数据元素可由若干个数据项完成,数据项是构成数据元素的不可分割的最小单位。
例如,学生记录就是一个数据元素,它由学号、姓名、性别等数据项组成。
数据对象是具有相同性质的数据元素的集合,是数据的一个子集。
数据类型是一个值的集合和定义在此集合上一组操作的总称。
•原子类型:其值不可再分的数据类型•结构类型:其值可以再分解为若干成分(分量)的数据类型•抽象数据类型:抽象数据组织和与之相关的操作抽象数据类型(ADT)是指一个数学模型以及定义在该模型上的一组操作。
抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。
通常用(数据对象、数据关系、基本操作集)这样的三元组来表示。
#关键词:数据,数据元素,数据对象,数据类型,数据结构数据结构的三要素:1.逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据,独立于计算机。
分为线性结构和非线性结构,线性表、栈、队列属于线性结构,树、图、集合属于非线性结构。
2.存储结构是指数据结构在计算机中的表示(又称映像),也称物理结构,包括数据元素的表示和关系的表示,依赖于计算机语言,分为顺序存储(随机存取)、链式存储(无碎片)、索引存储(检索速度快)、散列存储(检索、增加、删除快)。
3.数据的运算:包括运算的定义和实现。
运算的定义是针对逻辑结构的,指出运算的功能;运算的实现是针对存储结构的,指出运算的具体操作步骤。
1.2 算法和算法评价算法是对特定问题求解步骤的一种描述,有五个特性:有穷性、确定性、可行性、输入、输出。
一个算法有零个或多个的输入,有一个或多个的输出。
时间复杂度是指该语句在算法中被重复执行的次数,不仅依赖于问题的规模n,也取决于待输入数据的性质。
一般指最坏情况下的时间复杂度。
空间复杂度定义为该算法所耗费的存储空间。
算法原地工作是指算法所需辅助空间是常量,即O(1)。
第2章线性表2.1 线性表的定义和基本操作线性表是具有相同数据类型的n个数据元素的有限序列。