您好,欢迎访问三七文档
数据结构(C语言版)任课教师:冯向阳教学计划安排开课周次:1-16周周一:5、6节,松1318周四:1、2节,松1318上机实践:周四:1、2节(第3周-16周)158期终考试形式:闭卷考试教学计划安排章内容学时章内容学时1绪论27图6+42线性表8+48动态存储管理略3栈和队列4+49查找6+44串略10内部排序4+25数组和广义表211外部排序略6树和二叉树8+612文件略本课程的内容及学习的基本方法本课程讲述的主要内容:将分别讲述数据结构的基本概念、线性表、栈和队列、数组、树型结构、图结构、查找、排序等内容。学习本课程的基本方法:上课认真听讲。仔细阅读教材及课件的讲授内容,体会并灵活掌握数据结构中的基本概念和知识点。仔细阅读教材及课件中的大量例题,多做算法练习。本课程成绩计算平时成绩占10%上机实践实验占20%期终考试占70%E-mail地址:fengxy@dhu.edu.cn网络硬盘URL:章绪论学习要点熟悉各名词、术语的含义,掌握基本概念,特别是数据的逻辑结构和存储结构之间的关系。分清哪些是逻辑结构的性质,哪些是存储结构的性质。了解抽象数据类型的定义、表示和实现方法。熟悉类C语言的书写规范、表示和实现方法。理解算法五个要素的确切含义和对算法正确性的理解。掌握计算语句频度和估算算法时间复杂度的方法。数据结构的发展史数据结构作为一门独立的课程在国外是从1968年才开始设立的。1968年美国唐·欧·克努特教授开创了数据结构的最初体系,他所著的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作。随着计算机技术的不断发展,数据结构广泛应用于计算机科学的各个领域。编译程序利用堆栈、符号表和语法分析树;操作系统由过程并列表和文件支持,并利用由可用空间的并列表或表格组成的存储管理模式;人工智能程序利用堆栈、队列、集、搜索树、表格和图;数据库利用串、并列表、树、环和表格。数据结构讨论的范畴数据结构是计算机相关专业的一门重要的专业基础课。它主要研究计算机加工对象的逻辑结构、在计算机中的表示形式以及实现各种基本操作的算法。它是学习操作系统、编译原理、数据库原理等计算机专业核心课程的基础。掌握好这门课程的内容,是学习计算机其他相关课程的必备条件。NikalausWirth(Pascal语言之父)Algorithm+DataStructures=Programs问题求解程序编写数据结构程序设计算法数据结构讨论的范畴数据处理的种类数值数据非数值数据数值(整数,实数)字符字符串文字图形图象声音程序原始数据结果数据数值性计算数值性计算:数值计算问题的数学模型通常可以用一组线性或非线性的代数方程组或微分方程组来描述。即使是不需要用计算机求解的简单问题也需要一个数学模型来描述。鸡兔同笼问题:二元一次方程组房屋设计或桥梁设计中的结构应力分析:线性代数方程组天气预报:环流模式方程数值性计算例已知:游泳池的长len和宽wide,求面积area(2)设计求解问题的方法(3)编程main(){intlen,wide,area;scanf(“%d%d%\n”,&l,&w);area=len*wide;printf(“area=%d”,area);}(1)建模型:问题涉及的对象:游泳池的长len,宽wide,面积area;对象之间的关系:area=lenwide非数值性计算非数值性计算:当操作对象的关系更加复杂,操作形式不再是单纯的数值计算,而更多地是对这些具有一定关系的数据进行组织管理,就需要对之进行非数值性处理。当计算机进入非数值计算领域,特别是用在管理上的时候,计算机的操作对象之间的关系就无法用数学方程加以描述了。应用举例1——学籍档案管理假设一个学籍档案管理系统应包含如下页的表1-1所示的学生信息。学号姓名性别出生年月……99070101李俊男1980.12……99070102王力强男1981.2……99070103杜汇军男1981.3……99070104林阳女1981.5………………………………表1-1学生基本情况非数值性计算(举例1)非数值性计算(举例1)特点:每个学生的信息占据一行,所有学生的信息按学号顺序依次排列构成一张表格。表中每个学生的信息依据学号的大小存在着一种前后关系,这就是我们所说的线性结构。对它的操作通常是插入某个学生的信息,删除某个学生的信息,更新某个学生的信息,按条件检索某个学生的信息等等。非数值性计算(举例2)112211231323122132313213个对象的全排列过程应用举例2:输出n个对象的全排列可以使用下页所示的图示描述。非数值性计算(举例2)特点:在求解过程中,所处理的数据之间具有层次关系,这就是我们所说的树形结构。对它的操作有:建立树形结构,输出最底层结点内容等等。应用举例3——制定教学计划在制定教学计划时,需要考虑各门课程的开设顺序。有些课程需要先导课程,有些课程则不需要,而有些课程又是其他课程的先导课程。比如,计算机专业课程的开设情况如下页的表1-2所示。非数值性计算(举例3)C12需要的先导课程编号课程名称课程编号C11C10C9C8C7C6C5C4C3C2C1数值分析普通物理线性代数高等数学操作系统编译原理计算机组成原理算法分析与设计汇编语言数据结构离散数学程序设计基础C9,C10,C1C9C9无C3,C6C5,C3C11C3,C4C1C1,C2C1无表1-2计算机专业学生的必修课程非数值性计算(举例3)C4C5C2C1C9C3C7C10C11C6C8C12图1-2课程先后关系的图形描述形式非数值性计算(举例3)特点:课程之间的先后关系用图结构描述。通过实施创建图结构,按要求将图结构中的顶点进行线性排序。结论:以上所举例子中的数学模型正是数据结构要讨论的问题。因此,简单地说,数据结构是一门讨论描述现实世界实体的数学模型(非数值计算)及其上的操作在计算机中如何表示和实现的学科。基本概念和术语(数据)数据(data)数据是对客观事物的符号表示。在计算机科学中,其含义是指所有能够输入到计算机中并被计算机程序处理的符号集合。例如,一个个人书库管理程序所要处理的数据可能是下表所示的表格。基本概念和术语(数据元素)数据元素(dataelement)数据元素也称为结点,是数据集合中的一个实体,是数据结构中讨论的基本单位。数据元素按其组成可分为简单型数据元素和复杂型数据元素。前者由一个数据项组成;后者由多个数据项组成,它通常携带着一个概念的多方面信息。基本概念和术语(数据项)数据项(dataitem)一般情况下,一个数据元素中含有若干个字段,也称为数据项。数据元素是数据项的集合。数据项是数据结构中讨论的最小单位。数据项之间的关系数据项和数据项之间存在次序关系例如,一个含12位数的十进制数可以用三个4位的十进制数来表示。3214,6587,9345=a1(3214),a2(6587),a3(9345)在a1、a2和a3之间存在次序关系:a1,a2、a2,a33214,6587,9345≠6587,3214,9345a1a2a3a2a1a3数据项之间的关系(续)数据项和数据项之间存在次序关系又例,2行3列的二维数组{a1,a2,a3,a4,a5,a6}行的次序关系:row={a1,a2,a2,a3,a4,a5,a5,a6}列的次序关系:col={a1,a4,a2,a5,a3,a6}a1a2a3a4a5a6a1a3a5a2a4a6a1a2a3a4a5a6≠基本概念和术语(数据结构)数据结构(datastructure)数据结构是以数据项为元素的一种结构。数据结构的组成是由各数据项之间的关系和用来存储、恢复这些数据项的存取函数来确定的。为了叙述上的方便和避免产生混淆,通常把数据的逻辑结构(logicstructure)统称为数据结构,把数据的物理结构统称为存储结构(storagestructure)。数据的逻辑结构数据的逻辑结构(logicstructure)数据元素和数据元素之间的逻辑关系成为数据的逻辑结构。如下的表格数据中,各数据元素之间在逻辑上有一种线性关系。数据的逻辑结构的分类数据的逻辑结构可归结为以下四类:线性结构:结构中的数据元素之间存在一个对一个的关系。树形结构:结构中的数据元素之间存在一个对多个的关系。图状结构:结构中的数据元素之间存在多个对多个的关系。集合:结构中的数据元素除了同属于一个集合的关系外,别无其他关系。数据的逻辑结构的分类(续)数据的逻辑结构可归结为以下四类:线性结构树形结构图状结构集合结构数据结构的形式定义数据结构的形式定义为:数据结构是一个二元组:Data_Structure=(D,S)其中:D是数据元素的有限集,S是D上关系的有限集。严格地讲,以上定义仅是数据的逻辑结构的定义。例如,在计算机科学中,复数可看成一种数据结构Complex=(C,R)其中,C是含两个实数的集合{c1,c2};R={P},而P是定义在集合C上的一种关系{c1,c2},其中有序偶c1,c2表示c1是复数的实部,c2是复数的虚部。数据的存储结构数据的存储结构(storagestructure)是指数据结构在计算机中存储器中的具体实现。与孤立的数据元素的表示形式不同,数据结构中的数据元素不但要表示其本身的实际内容,还要表示清楚数据元素之间的逻辑关系。数据元素之间的关系在计算机中有两种不同的表示方法:顺序映像和非顺序映像,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。数据的存储结构(续)顺序存储结构:特点是借助于数据元素的相对存储位置来表示数据元素之间的逻辑结构。链式存储结构:特点是借助于指示数据元素地址的指针来表示数据元素之间的逻辑结构。在不同的编程环境中,存储结构可有不同的描述方法。用高级语言程序设计语言进行编程时,通常可用该语言提供的数据类型来描述。数据类型数据类型:是指程序设计语言中各变量可取的数据类型。数据类型是高级程序设计语言中的一个基本概念,它和数据结构的概念密切相关。一方面,在程序设计语言中,每一个数据都属于某种数据类型。类型明显或隐含地规定了数据的取值范围、存储方式以及允许进行的运算。可以认为,数据类型是在程序设计中已经实现了的数据结构。另一方面,在程序设计过程中,当需要引入某种新的数据类型时,总是借助编程语言所提供的数据类型来描述数据的存储结构。C++的基本数据类型及取值的范围数据类型占用字节数取值范围精度int4-231~231-1shortint2-216~216-1longint4-231~231-1unsignedint40~232-1unsignedshortint20~216-1unsignedlongint40~232-1char1-128~127signedchar1-128~127unsignedchar10~255float43.4e+38~3.4e+386位double81.7e+308~1.7e+30815位longdouble10-3.4e+4932~3.4e+493217位抽象数据类型抽象数据类型(AbstractDataType简称ADT):ADT是指一个数学模型以及定义在此数学模型上的一组操作。ADT的两个重要特征:数据抽象:用ADT描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)。数据封装:将实体的外部特征和其内部实现细节分离,并且对外部用户隐蔽其内部实现细节。ADT需要通过固有数据类型(高级编程语言中已实现的数据类型)来实现。抽象数据类型的格式定义ADT的格式定义:和数据结构的形式定义相对应,ADT可用一个三元组表示:AD
本文标题:数据结构基础教程
链接地址:https://www.777doc.com/doc-2429225 .html