数据结构一章绪论_第1页
数据结构一章绪论_第2页
数据结构一章绪论_第3页
数据结构一章绪论_第4页
数据结构一章绪论_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构一章绪论1.1基本术语数据(Data)是人们约定的符号,用它来表示客观事物及其活动,是信息的载体。数据是计算机程序加工处理的对象。数据元素(DataElement)是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理,在不同的情况下,又可以称为元素、结点、顶点或记录。数据是由数据元素构成的。数据项(DataItem)是构成数据元素不可分割的具有独立含义的最小标识单位。若数据元素可再分,则数据元素是由若干个数据项组成;如数据元素不可再分,数据元素和数据项是同一概念,如整型数据就是不可再分的。数据类型(DataType)是一个值的集合和定义在这个值集上一组操作的总称。按值的不同特性,高级程序设计语言中的数据类型可分为原子类型和结构类型两类。第一章绪论1.2数据结构的定义及研究的内容数据结构的定义及研究的内容数据结构(DataStructure):按照某种逻辑关系组织起来的一批数据,用一定的存储方式存储在计算机的存储器中,并在这些数据上定义一个运算的集合,就称为一个数据结构(DataStructure)。数据结构重点研究的内容:(1)数据的逻辑结构:即数据之间的逻辑关系。(2)数据的存储结构:即数据及数据之间的关系在计算机存储器中的表示。(3)数据的运算:即对数据施加的各种操作。数据的逻辑结构数据的逻辑结构(LogicalStructure:的是数据元素之间的逻辑关系。它是人们根据实际问题的需要和问题本身所含数据之间的内在联系而抽象出来的数学模型,与如何利用计算机存储和处理无关,所以被称为数据的逻辑结构。由于数据的逻辑结构是数学模型,可以借助数学方法来表示,具体的可以用离散数学中关系代数的二元组表示:Data_Structure=(D,S)通常取S中的一个关系rj来进行讨论,rj可以表示为数据元素的序偶<di,dj>的集合。如果集合中有序偶<di,dj>,表示数据元素di和dj之间有rj这种关系。用二元组表示的数据的逻辑结构,有如下的常用术语(1)前趋结点、后继结点、相邻结点(2)开始结点、终端结点、内部结点数据的逻辑结构还能够利用更形象的图形表示

数据的逻辑结构有两大类:(1)线性结构:经典的线性结构是线性表。线性结构的逻辑特征是:有且仅有一个开始结点和一个终端结点,其余的内部结点都有且仅有一个前趋结点和一个后继结点,也就是说结构中的数据元素间存在着一对一的相互关系。(2)非线性结构:经典的非线性结构有树形结构和图形结构。树形结构的逻辑特征是:有且仅有一个开始结点,可有若干个终端结点,其余的内部结点都有且仅有一个前趋结点,可以有若干个后继结点,也就是说结构中的数据元素间存在着一对多的层次关系。图形结构的逻辑特征是:可有若干个开始结点和终端结点,其余的内部结点可以有若干个前趋结点和若干个后继结点,也就是说结构中的数据元素间存在着多对多的网状关系。表1.1某校围棋社团学生简表学号姓名性别出生日期职务01黄家正男1982-08-05团长02赵芳女1981-08-15组长03王明女1983-04-01组长04王红女1982-06-28组员05张小才男1984-03-17组员06马立伟男1983-10-12组员07孙刚男1982-07-05组员08刘永男1982-12-09组员例1.1在表1.1中,八名学生按学号从小到大排列,形成一个线性结构。假设表示这种逻辑结构的关系为r1,则r1可以定义为学生按学号顺序递增排列的关系,该线性结构的逻辑结构可用二元组表示为:L=(D,S),r1∈SD={01,02,03,04,05,06,07,08}r1={<01,02>,<02,03>,<03,04>,<04,05>,<05,06>,<06,07>,<07,08>}图1.1线性结构的图示例1.2

在表1.1中,学生之间还存在着领导与被领导关系,其中01号学生为团长,直接领导02和03号学生,他们分别是组长,02号学生直接领导04和05号学生,03号学生直接领导06、07和08号学生,假设表示这种逻辑结构的关系为r2,则r2可以定义为学生之间的领导与被领导关系,该数据结构的逻辑结构可用二元组表示为:T=(D,S),r2∈SD={01,02,03,04,05,06,07,08} r2={<01,02>,<01,03>,<02,04>,<02,05>,<03,06>,<03,07>,<03,08>}图1.2树形结构的图示例1.3在表1.1中,学生之间还有好友关系,如01和02、03、05号是好友,02和04号是好友,03和05号是好友,04和05、06号是好友,06和07之间是好友,08无好友,假设表示这种逻辑结构的关系为r3,则r3可以定义为学生之间的好友关系,该数据结构的逻辑结构可用二元组表示为:G=(D,S),r3∈SD={01,02,03,04,05,06,07,08} r3={<01,02>,<02,01>,<01,03>,<03,01>,<01,05>,<05,01>,<02,04>,<04,02>,<03,05>,<05,03>,<04,05>,<05,04>,<04,06>,<06,04>,<06,07>,<07,06>}数据的存储结构数据的存储结构(StorageStructure),是指数据的逻辑结构到计算机存储器的映射。对于数据的逻辑结构G=(D,S),在映射中,一方面要将数据集D中的数据元素存放到存储器中,另一方面还要体现关系集S,常见的体现关系S的方式有显示和隐含两种。常用的实现数据存储结构的方法有如下四种:1.顺序存储2.链接存储3.索引存储4.散列存储四种存储方法,可以单独使用,也可以组合起来对数据结构进行存储映象。同一种逻辑结构采用不同的存储方法,可以得到不同的存储结构。针对具体的应用,某种数据结构选择何种存储结构主要考虑运算的方便及效率。存储结构的描述:数据的存储结构是数据的逻辑结构用计算机语言的实现,它是依赖于计算机语言的,因此可以借用高级语言中提供的数据类型(如数组、指针等)来描述它。1.顺序存储基本思想是:把逻辑上相邻的数据元素存储在物理位置上相邻的存储单元里。数据元素间的逻辑关系由存储单元的邻接关系来体现,也就是说逻辑关系上相邻物理位置上也相邻,数据元素的逻辑次序与物理次序一致。这是一种隐含体现关系的存储方法,关系隐含在存储位置上。数据元素在存储区域中是连续存放的,这种存储方法称为顺序存储结构(SequentialStorageStructure),通常用计算机高级语言中的数组来描述。2.链接存储基本思想是:通过附加指针域表示数据元素之间的关系。这种存储方法不要求逻辑上相邻的数据元素存储位置上也相邻,数据元素间的逻辑关系是通过附加指示其他数据元素位置的地址信息(指针)而得到的,这是一种显示体现关系的存储方法。数据元素在存储区域中可以是连续的,也可以是不连续的,通常用计算机高级语言中的指针来描述,称为链接存储结构(LinkedStorageStructure)。由于不要求存储空间的连续性,很适合动态存储管理例1.4用上述两种方法存储有序序列A=(99,

123,134),假设每个数据元素占2个字节,即一个存储单元为两个字节。图1.4关系的映像方法3.索引存储基本思想是:除了存储数据元素,还要建立一个或若干个附加的索引表来标识数据元素的地址。索引表中的每一项称为索引项,是用来标识一个或一组数据元素的存储位置。索引项一般形式为(关键字,地址),其中的关键字是用来标识数据元素的数据项。若每个数据元素对应一个索引项,则该索引表为稠密索引(DenseIndex)。若一组数据元素对应一个索引项,则该索引表称为稀疏索引(SparseIndex)。索引存储方法主要是用于实现快速查找而设计的一种存储方式。4.散列存储基本思想是:根据数据元素的关键字直接计算出该结点的存储地址,通常称为关键字-地址转换法。在此方法中需要设计一个散列函数,以关键字为自变量,散列函数值即为地址。用这种存储方法设计的存储结构最适合按关键字进行查找,但数据元素之间的关系已经无法在存储结构上体现。

数据的运算数据的运算(也称操作)是指对数据元素进行加工和处理。运算的种类很多,具体视应用的要求而设置运算的种类。对每种数据结构设置一些基本运算(操作),使得不同应用都能通过这些操作实现对数据结构的各种访问,是数据结构中研究的一个重要方面。数据结构的基本操作一般包括查找、插入、删除、更新、排序等。这些基本运算实际是在抽象的数据上所施加的一系列抽象的操作,所谓抽象的操作,就是不涉及具体的应用,只知道这些操作应该完成的功能,但无须考虑“如何完成”。这些运算的粒度很小,是构造复杂运算的基础。数据基本运算的定义是基于数据的逻辑结构,每种经典的逻辑结构都有一个运算的集合。数据的运算是定义在数据的逻辑结构上而实现在数据的存储结构上的。数据的运算是通过算法来描述的。在讨论任何一种数据结构时,都应该将数据的逻辑结构、数据的存储结构和数据的运算这三方面看成一个整体,不要孤立地理解一个方面,而要注意它们之间的联系1.3算法算法的概念及特性算法(Algorithm)是解决特定问题的方法和步骤,是由若干条指令组成的有限序列。一个算法必须具有以下五个特性:(1)有穷性:对于任意一组合法输入值,一个算法必须总是在执行有穷步骤后结束,有限时间内完成。(2)确定性:算法中每条指令都确切地规定了所应执行的操作,使算法的执行者或阅读者能明确其含义及如何执行,不致产生二义性或多义性;另外,在同一条件下,一个算法只能有一条执行路径。(3)可行性:算法中的每一步都是可行的,都可以通过手工或机器可以接受的有限次操作在有限时间内完成。(4)输入:一个算法有0个或多个输入,这些输入是算法所需的初始量或待处理的对象,来自某个特定的对象集合。(5)输出:一个算法有1个或多个输出,这些输出与输入有着某种特定的关系。算法的描述

算法一般可以采用自然语言、程序流程图、伪码、高级程序设计语言等描述。算法的评价通常从定性和定量两方面来评价一个算法算法的定性评价,是从算法的设计者和使用者角度来衡量优劣的

(1)正确性(Correctness)是指算法应当满足具体问题的需求,即对合理的输入,算法都会得出正确的结果,这是设计和评价一个算法的首要条件,否则其他的评价标准也就无从谈起。(2)可读性(Readablity)是指算法被理解的难易程度。(3)健壮性(Robustness)是指算法对输入的非法数据恰当地作出反映或进行相应处理的能力。(4)简单性(Simplicity)是指一个算法所采用的逻辑结构、存储结构以及处理过程的简单程度。

算法的定量评价(1)时间复杂度(TimeComplexity)是一个算法运行时所耗费的系统时间,也就是算法的时间效率。每条语句重复执行的次数称为语句的频度(Frenquencycount)当不考虑算法运行的软硬件环境时,算法所耗费的时间就是该算法中所有简单语句的频度之和。一般情况,在讨论算法的时间效率时,主要考虑当问题规模n趋向无穷大时,时间复杂度T(n)的数量级,亦称为算法的渐近时间复杂度,则T(n)=O(f(n))。记号“O”是一个数学符号,其数学定义是:设T(n)和f(n)均为正整数n的函数,若存在两个正整数M和n0,使得当n≥n0时,都有|T(n)|≤M|f(n)|存在,则T(n)=O(f(n))。在多数情况下,当一个算法中有若干个循环语句时,算法的时间复杂度是由嵌套循环中最内层循环语句的频度决定的。需要注意的是,如果算法中包括对其他函数或算法的调用,计算算法的时间复杂度时还要分析被调用算法或函数的时间复杂度。例1.5

求一维数组元素中的最大值

intsum(inta[],intn){ inti,s;(1) s=a[0]; /*1次*/(2) for(i=1;i<n;i++;) /*n次*/(3) if(s<a[i])s=a[i];/*n-1次*/(4) returns; /*1次*/}T1(n)=1+n+n-1+1=2n+1T1(n)=O(n),即f(n)=n例1.6两个n阶方阵相加voidMatrixadd(inta[][],intb[][],intc[][],intn){inti,j;(1)for(i=0;i<n;i++) /*n+1次*/(2) for(j=0;j<n;j++) /*n×(n+1)次*/(3)c[i][j]=a[i][j]+b[i][j];/*n2次*/}T2(n)=n+1+n×(n+1)+n2=2n2+2n+1T2(n)=O(n2),即f(n)=n2

例1.7求两个n阶方阵的乘积voidMatrixmlt(inta[][],intb[][],intc[][],intn){inti,j,k;(1)for(i=0;i<n;i++) /*n+1次*/(2)for(j=0;j<n;j++) /*n×(n+1)次*/(3){c[i][j]=0; /*n2次*/(4)for(k=0;k<n;k++) /*n2×(n+1)次*/(5)c[i][j]=c[i][j]+a[i][k]*b[k][j];/*n3次*/}}T3(n)=n+1+n×(n+1)+n2+n2×(n+1)+n3=2n3+3n2+2n+1T3(n)=O(n3),即f(n)=n3

最好时间复杂度、最坏时间复杂度和平均时间复杂度

例1.8

在一维数组中查找指定的元素

intsearch(inta[],intx,intn)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论