您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 数据结构 绪论 什么是数据结构
教材:《数据结构》(C语言版)严蔚敏吴伟民编著清华大学出版社计算机科学与技术学院开设本课程的背景:《数据结构》是计算机相关专业的一门重要的专业基础课。它主要研究计算机加工对象的逻辑结构、在计算机中的存储结构以及实现各种基本操作的算法。它是学习操作系统、编译原理、数据库原理等计算机专业核心课程的基础,掌握好这门课程的内容,是学习计算机其他相关课程的必备条件。本课程讲述的主要内容:分别讲述数据结构的基本概念、线性表、栈和队列、串、数组和广义表、树和二叉树、图、查找、排序等内容。学习本课程的基本方法:上课认真听讲;仔细阅读教材中的大量例题,从而体会并最终掌握数据结构中的基本概念;独立完成每个章节的练习题和作业题。1.1什么是数据结构第一章绪论1.3算法和算法分析1.2基本概念和术语学习提要:1.熟悉各名词术语的含义,掌握基本概念。2.了解抽象数据类型的定义、表示和实现方法。3.理解算法五个要素的确切含义,掌握估算算法时间复杂度的方法。重难点内容:数据的逻辑结构、数据存储结构、时间复杂度的估算方法§1.1什么是数据结构程序设计:为计算机处理问题编制一组指令集。算法:处理问题的策略。数据结构:问题的数学模型。程序=算法+数据结构数值计算的程序设计问题:例如:结构静力分析计算─━线性代数方程组预报人口增长情况─━微分方程非数值计算的程序设计问题:算法:?模型:?基本操作是“比较两个数的大小”取决于整数值的范围例1:求一组(n个)整数中的最大值。例2书目自动检索系统登录号:书名:作者名:分类号:出版单位:出版时间:价格:书目卡片001高等数学樊映川S01002理论力学罗远祥L01003高等数学华罗庚S01004线性代数栾汝书S02……………………书目文件按书名按作者名按分类号高等数学001,003……理论力学002,……..线性代数004,………………..樊映川001,…华罗庚002,….栾汝书004,….…….…….L002,…S001,003,…………索引表线性表算法:需要检索的书目?如何检索?用户界面?模型:?例3人机对奕问题树……..……..…...…...…...…...算法:对奕的规则和策略模型:?例4教学计划编排问题图课程代号课程名称先修课程C1计算机导论无C2数据结构C1,C4C3汇编语言C1C4C语言C1C5计算机图形学C2,C3,C4C6接口技术C3C7数据库原理C2,C9C8编译原理C4C9操作系统C2C1C3C4C7C6C5C2C8C9算法:如何确定课程的次序关系?模型:?概括地说:数据结构是一门讨论“描述现实世界实体的数学模型(非数值计算)及其上的操作在计算机中如何表示和实现”的学科。§1.2基本概念和术语一、数据与数据结构二、数据类型三、抽象数据类型数据(data):所有能被输入到计算机中,且被计算机处理的符号的集合,是计算机操作的对象的总称。数据元素(dataelement):是数据(集合)中的一个“个体”,是数据的基本单位,由若干个数据项组成,也称结点、元素、顶点或记录。一、数据与数据结构数据项:是数据结构中讨论的最小单位。例如:描述一个学生基本信息的数据元素可以是称之为组合项学号姓名性别专业班级出生日期籍贯年月日数据结构(datastructure):是指互相之间存在着一种或多种关系的数据元素的集合。或者说,数据结构是带结构的数据元素的集合。例:一个含12位数的十进制数可以用三个4位的十进制数表示3214,6587,9345a1(3214),a2(6587),a3(9345)在a1、a2、a3之间存在“次序”关系:a1,a2、a2,a33214,6587,9345a1a2a36587,3214,9345a2a1a3≠又例,在2行3列的二维数组{a1,a2,a3,a4,a5,a6}a1a2a3a4a5a6行的次序关系:列的次序关系:row={a1,a2,a2,a3,a4,a5,a5,a6}col={a1,a4,a2,a5,a3,a6}a1a3a5a2a4a6a1a2a3a4a5a6再例,在一维数组{a1,a2,a3,a4,a5,a6}的数据元素之间存在如下的次序关系:{ai,ai+1|i=1,2,3,4,5}可见,不同的“关系”构成不同的“结构”。集合结构:数据元素间“同属于一个集合”数据的逻辑结构可归结为以下四类:线性结构:一个对一个树形结构:一个对多个图状结构:多个对多个数据结构的形式定义为:数据结构是一个二元组Data_Structure=(D,S)其中:D是数据元素的有限集,S是D上关系的有限集。例:在计算机科学中,复数可取如下定义Complex=(C,R)其中,C是含两个实数集合{c1,c2};R={P},P是定义在集合C上的一种关系{c1,c2}。数据的逻辑结构:只抽象反映数据元素的逻辑关系。数据的存储结构:逻辑结构在存储器中的映象。“数据元素”的映象?“关系”的映象?数据元素的映象方法:用二进制位(bit)的位串表示数据元素。(321)10=(501)8=(101000001)2A=(101)8=(001000001)2关系的映象方法:(表示x,y的方法)1、顺序映象以相对的存储位置表示后继关系。例如:令y的存储位置和x的存储位置之间差一个常量C。而C是一个隐含值,整个存储结构中只含数据元素本身的信息xy2、链式映象以附加信息(指针)表示后继关系。需要用一个和x在一起的附加信息指示y的存储位置。yx例如:复数z1=3.0-2.3i,z2=-0.7+4.8i的存储结构。顺序存储结构链式存储结构3.0二、数据类型在用高级程序语言编写的程序中,必须对程序中出现的每个变量、常量或表达式,明确说明它们所属的数据类型。例:C语言中,提供int,char,float等基本数据类型,数组、结构体、共用体、枚举等构造数据类型指针、空(void)类型等。用户也可用typedef自己定义数据类型typedefstruct{intnum;charname[20];floatscore;}STUDENT;STUDENTstu1,stu2,*p;数据类型是一个值的集合和定义在此集合上的一组操作的总称。不同类型的变量,其所能取的值的范围不同,所能进行的操作不同。三、抽象数据类型(AbstractDataType简称ADT)ADT定义:指一个数学模型以及定义在该模型上的一组操作。“抽象”的意义在于数据类型的数学抽象特性。例如:矩阵+(求转置、加、乘、求逆、求特征值)构成一个矩阵的抽象数据类型。ADT的描述方法:抽象数据类型可用三元组(D,S,P)表示。其中:D是数据对象;S是D上的关系集;P是对D的基本操作集。ADT抽象数据类型名{数据对象:〈数据对象的定义〉数据关系:〈数据关系的定义〉基本操作:〈基本操作的定义〉}ADT抽象数据类型名其中基本操作的定义格式为:基本操作名(参数表)初始条件:〈初始条件描述〉操作结果:〈操作结果描述〉赋值参数:只为操作提供输入值。引用参数:以&打头,除可提供输入值外,还将返回操作结果。初始条件:描述了操作执行之前数据结构和参数应满足的条件,若不满足,则操作失败,并返回相应出错信息。操作结果:说明了操作正常完成之后,数据结构的变化状况和应返回的结果。若初始条件为空,则省略之。例如,抽象数据类型复数的定义:数据对象:D={e1,e2|e1,e2∈RealSet}数据关系:R1={e1,e2|e1是复数的实数部分|e2是复数的虚数部分}ADTComplex{基本操作:AssignComplex(&Z,v1,v2)操作结果:构造复数Z,其实部和虚部分别被赋以参数v1和v2的值。DestroyComplex(&Z)操作结果:复数Z被销毁。GetReal(Z,&realPart)初始条件:复数已存在。操作结果:用realPart返回复数Z的实部值。GetImag(Z,&ImagPart)初始条件:复数已存在。操作结果:用ImagPart返回复数Z的虚部值。Add(z1,z2,&sum)初始条件:z1,z2是复数。操作结果:用sum返回两个复数z1,z2的和值。}ADTComplex假设:z1和z2是上述定义的复数则Add(z1,z2,z3)操作的结果z3=z1+z2即为用户所求的结果ADT有两个重要特征:数据抽象:用ADT描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)。数据封装:将实体的外部特性和其内部实现细节分离,并且对外部用户隐藏其内部实现细节。ADT的表示和实现:抽象数据类型需要通过固有数据类型(高级编程语言中已实现的数据类型)来实现。例如,对以上定义的复数。typedefstruct{floatrealpart;floatimagpart;}complex;//-----存储结构的定义//-----基本操作的函数原型说明voidAssign(complex&Z,floatrealval,floatimagval);//构造复数Z,其实部和虚部分别被赋以//参数realval和imagval的值floatGetReal(complexZ);//返回复数Z的实部值floatGetimag(complexZ);//返回复数Z的虚部值voidadd(complexz1,complexz2,complex&sum);//以sum返回两个复数z1,z2的和//-----基本操作的实现voidadd(complexz1,complexz2,complex&sum){//以sum返回两个复数z1,z2的和sum.realpart=z1.realpart+z2.realpart;sum.imagpart=z1.imagpart+z2.imagpart;}{其它省略}一、算法的定义二、算法设计的原则三、算法效率的衡量方法和准则四、算法的存储空间需求§1.3算法和算法分析算法是对特定问题求解步骤的描述,是指令的有限序列。1.有穷性2.确定性3.可行性4.有输入5.有输出一、算法的定义一个算法必须满足以下五个重要特性:1.有穷性:对于任意一组合法输入值,在执行有穷步骤之后一定能结束,即算法中的每个步骤都能在有限时间内完成。2.确定性:对于每种情况下所应执行的操作,在算法中都有确切的规定,使算法的执行者或阅读者都能明确其含义及如何执行。并且在任何条件下,算法都只有一条执行路径。3.可行性:算法中的所有操作都必须足够基本,都可以通过已经实现的基本操作运算有限次实现之。4.有输入:有零个或多个输入,取自特定的对象集合。5.有输出:有一个或多个输出,是算法进行信息加工后得到的结果。二、算法设计的原则设计算法时,通常应考虑达到以下目标:1.正确性2.可读性3.健壮性4.高效率与低存储量需求1.正确性:在合理的数据输入下,能在有限的运算时间内得到正确结果。对算法是否“正确”的理解可以有以下四个层次:a.程序中不含语法错误;b.程序对于几组输入数据能够得出满足要求的结果;c.程序对于精心选择的、典型、苛刻切带有刁难性的几组输入数据能够得出满足要求的结果;d.程序对于一切合法的输入数据都能得出满足要求的结果;2.可读性:易于人对算法的理解;另一方面,晦涩难读的程序易于隐藏较多错误而难以调试;3.健壮性:当输入的数据非法时,算法应当恰当地作出反映或进行相应处理,而不是产生莫名奇妙的输出结果。并且,处理出错的方法不应是中断程序的执行,而应是返回一个表示错误或错误性质的值,以便在更高的抽象层次上进行处理。4.高效率与低存储量需求:效率指的是算法执行时间。存储量指的是算法执行过程中所需的最大存储空间。两者都与问题的规模有关。有两种衡量算法效率的方法:1.事后统计法:利用计算机内记时功能,用一组或多组相同的统计数据区分。2.事前分析估计法:求出算法的一个时间界限函数。三、算法效率的衡量方法和准则和算法执行时间相关的因素:1.算法选用的策略2.问题的规模3.编写程序的语言4.编译程序产生的机器代码的质量5.计算机
本文标题:数据结构 绪论 什么是数据结构
链接地址:https://www.777doc.com/doc-3598741 .html