1、数据结构与算法,本课程讲述的主要内容 本课程将分别讲述数据结构的基本概念、线性表、栈和队列、树形结构、图结构、查找、排序等内容。,第1章 绪论,本章主要介绍以下内容数据结构研究的主要内容数据结构中涉及的基本概念算法的概念、描述方法以及评价标准,1.1 数据结构的概念1.2 算法描述1.3 算法分析,1.1 数据结构的概念,当今计算机应用的特点:1、所处理的数据量大且具有一定的关系;2、对其操作不再是单纯的数值计算,而更多 地是需要对其进行组织、管理和检索。应用举例1学籍档案管理 假设一个学籍档案管理系统应包含如下表1-1所示的学生信息,表1-1,特点: 1、每个学生的信息占据一行,所有学生的信
2、息按学号顺序依次排列构成一张表格; 2、表中每个学生的信息依据学号的大小存在着一种前后关系,这就是我们所说的线性结构; 3、对它的操作通常是插入某个学生的信息,删除某个学生的信息,更新某个学生的信息,按条件检索某个学生的信息等等。,图 1-1 3个对象的全排列过程,应用举例2输出n个对象的全排列 输出n个对象的全排列可以使用下图1-1所示的形式描述。,特点: 1、在求解过程中,所处理的数据之间具有层次关系,这是我们所说的树形结构; 2、对它的操作有:建立树形结构,输出最低层结点内容等等。应用举例3制定教学计划在制定教学计划时,需要考虑各门课程的开设顺序。有些课程需要先导课程,有些课程则不需要,
3、而有些课程又是其他课程的先导课程。比如,计算机专业课程的开设情况如下表1-2所示:,表1-2,课程先后关系的图形描形式:,图 1-2 计算机专业必修课程开设先后关系,特点:1、课程之间的先后关系用图结构描述;2、通过实施创建图结构,按要求将图结构中的顶点进行线性排序。 结论:计算机的操作对象的关系更加复杂,操作形式不再是单纯的数值计算,而更多的是对这些具有一定关系的数据进行组织管理,我们将此称为非数值性处理。要使计算机能够更有效地进行这些非数值性处理,就必须弄清楚这些操作对象的特点,在计算机中的表示方式以及各个操作的具体实现手段。这些就是“数据结构”所研究的主要内容。,数据 是对客观事物的符号
4、表示。在计算机科学中其含义是指所有能够输入到计算机中并被计算机程序处理的符号集合。数据元素 (数据的基本单位)是数据集合中的一个实体,是计算机程序中加工处理的基本单位。数据元素按其组成可分为简单型数据元素和复杂型数据元素。简单型数据元素由一个数据项组成,所谓数据项就是数据中不可再分割的最小单位;复杂型数据元素由多个数据项组成,它通常携带着一个概念的多方面信息。,数据项 数据项指不可分割的、含有独立意义的最小数据单位,数据项有时也称为字段。 数据结构 简单地说,就是相互之间存在一种或多种特定(逻辑)关系的数据元素的集合。常见的数据(逻辑)结构有:线性结构、树形结构、集合结构 图形结构 。数据结构
5、包括数据的逻辑结构和数据的物理结构,存储结构(物理结构)是指数据结构在计算机存储器中的具体实现。是数据的逻辑结构在计算机中的表示(又称映像),与孤立的数据元素表示形式不同,数据结构中的数据元素不但要表示其本身的实际内容,还要表示清楚数据元素之间的逻辑结构。 常见的存储结构 顺序存储结构:特点是借助于数据元素的相对 存储位置来表示数据元素之间的逻辑结构; 链式存储结构:特点是借助于指示数据元素地址的指针表示数据元素之间的逻辑结构。,1.2 算法描述,1.2.1 算法的概念 算法是解决某个特定问题的一种方法或一个过程。 计算机对数据的操作可以分为数值性和非数值性两种类型。在数值性操作中主要进行的是
6、算术运算;而在非数值性操作中主要进行的是检索、排序、插入、删除等等。,设计算法的基本过程 1、通过对问题进行详细地分析,抽象出相应的数学模型;2、确定使用的数据结构,并在此基础上设计对此数据结构实施各种操作的算法;3、选用某种语言将算法转换成程序;4、调试并运行这些程序。,算法应该具有下列五个特性 (1)有穷性:一个算法必须在执行有穷步之后结束。 (2)确定性:算法中的每一步,必须有确切的含义,在他人理解时不会产生二义性。 (3)可行性:算法中描述的每一步操作都可以通过已有的基本操作执行有限次实现。 (4)输入:一个算法应该有零个或多个输入。 (5)输出:一个算法应该有一个或多个输出。这里所说
7、的输出是指与输入有某种特定关系的量。,1.3 算法分析,算法的评价标准 正确性:要求算法能够正确地执行预先规定的功能,并达到所期望的性能要求。 可读性:为了便于理解、测试和修改算法,算法应该具有良好的可读性。 健壮性:算法中拥有对输入数据、打开件、读取文件记录、分配内存空间等操作的结果 检测,并通过与用户对话的形式做出相应的处理选择。(4)时间与空间效率:算法的时间与空间效率是指将算法变换为程序后,该程序在计算机上运行时所花费的时间及所占据空间的度量。,算法的时间效率算法的时间效率主要由两个因素决定:1、所需处理问题的数据量大小,数据量大,所花费的时间就多;2、在解决问题的过程中,基本操作的执行次数。 时间特性的分析如果我们将一个算法所花费的时间设计成一个以数据量n为自变量的函数T(n),这个函数在正整数定义域范围内一定是单调递增的。好的算法应该能够在数据量n增长的同时,函数T(n)的增长速度比较缓慢。,空间效率的分析一个算法的空间效率是指在算法的执行过程中,所占据的辅助空间数量。辅助空间就是除算法代码本身和输入输出数据所占据的空间外,算法临时开辟的存储空间单元。在有些算法中,占据辅助空间的数量与所处理的数据量有关,而有些却无关。后一种是较理想的情况。在设计算法时,应该注意空间效率。,