数据结构的基本概念秦臻qinzhen@uestc.edu.cn宽带光纤传输与通信系统技术教育部重点实验室KeyLaboratoryofBroadbandOpticalFiberTransmissionandCommunicationNetworks制作:段景山廖丹秦臻主讲:秦臻Outline数据结构定义数据的逻辑结构数据的存储结构算法Outline数据结构定义数据的逻辑结构数据的存储结构算法什么是数据结构NiklausWirth:《算法十数据结构=程序》(Algorithms+DataStructures=Programs,Prentice-Hall,1976)什么是程序?什么是算法?什么是数据结构?数据结构数据结构的概念数据及数据元素的概念数据是客观事物在计算机内的抽象描述数据指一些事实,或一些数,或一些符号集合组成数据的“事实”、“数值”或“符号”称为数据元素数据元素可由若干个数据项组成数据及数据元素例1、学生花名册数据元素数据学生名字的集合每个学生的名字例2、学生成绩表数据数据元素数据项学生成绩的集合每个学生的成绩名字成绩数据结构的概念数据结构的概念数据结构讨论计算机系统中数据的组织形式及其相互关系是相互之间存在一种和多种特定关系的数据元素的集合例:大楼中的电梯电梯在楼层中只能逐层移动例:公司的组织关系楼层间的关系是线性的员工间形成树型关系涉及元素的集合元素间的关系在关系里的操作电梯的运动人员的管理例:用数据结构描述整数I*1、组成整数数据的全部元素的集合II={0,±1,±2,±3……}2、I中元素的关系集合RE3、I*的运算集合P,比如算术四则运算4、P中诸运算的运算规则RU,如乘、除法优先于加、减法等I*={I,RE,P,RU}数据结构的概念RE={……-10,01,12,……}数据结构的概念例:用数据结构的思想分析以下实物:一个十字路口的红绿灯管制包含两部电梯的管理系统一条公交路线成都市公交系统元素关系运算数据结构的概念元素集合元素间的关系运算计算机系统元素在计算机系统里的表示字符?字串?整数?元素间的逻辑关系--逻辑结构元素在计算机系统中的存储方式,物理空间关系--存储结构操作指令的集合--算法数据的逻辑结构与数据的存储结构例:班级里的同学可能有各种各样的逻辑关系。比如班长、班委、群众等。形成相应的逻辑结构。上课时,大家的座次形成存储结构座次(存储结构)可能与逻辑关系有关,也可能无关。数据结构的概念此外,数据的运算也是数据结构不可分割的一个方面Outline数据结构定义数据的逻辑结构数据的存储结构算法数据的逻辑结构数据元素之间关系的描述描述法二元组关系:一般抽象为前驱与后继关系,即表明结构中,一个元素的前一个元素是谁,它的后一个元素又是谁B=(K,R)K:元素集合R:元素间关系的集合数据的逻辑结构图示法图形要素:结点和有向线段结点:表示一个数据元素,一般以方形框代表不管多么复杂的结点,都看作是一个结点有向线段:表示元素之间的关系。箭尾指向的结点是前驱。箭头指向的结点是后继KiKhKjKi的前驱Ki的后继数据的逻辑结构研究为什么一个结点是另一个结点的前驱或后继数据的逻辑结构线性结构线性表队列堆栈非线性结构树图集合结构Outline数据结构定义数据的逻辑结构数据的存储结构算法数据的存储结构(物理结构)是数据元素在计算机系统存储器中的存放方式也可以说,是数据逻辑结构在存储器中的存放方式数据的存储结构存储器的特点:由地址连续的单元构成K1K2K3K4数据的存储结构逻辑结构K1K2K3K4K5K6数据的存储结构逻辑结构数据的存储结构思考:为什么数据逻辑结构与物理结构没有完全统一?存储器的特点:由地址连续的单元构成。--线性关系单元间的线性关系有时不能直接反映复杂的逻辑关系几种物理存储方式顺序存储方法连续顺序地存放数据元素若数据的逻辑结构也是顺序(线性)的,则逻辑结构和物理结构完全统一了连续存放的数据元素可以在内存中容易找到数据的存储结构链接存储方法元素在内存中不一定连续存放在元素中附加指针项,通过指针可以找到关系元素元素+指针结点元素指针数据的存储结构K1K2K3K4K5K6数据的存储结构逻辑结构索引存储方法为放在内存中的元素建立索引表元素可以离散存放通过查索引表找到需要的元素数据的存储结构散列存储方法结点中设一关键值,利用关键值和相应算式算出结点位置(地址)例:以用户姓名为关键值DJS算式:字母的序号相加04+10+19=33ZXM26+24+13=63数据的存储结构所以,DJS放在33号地址单元ZXM放在63号地址单元小结:数据的逻辑结构与物理结构1、物理结构是元素在内存中的存储方式,与元素间固有的逻辑关系是相对独立的两个问题物理结构着眼于结点在内存中的定位2、简单的逻辑结构可能和物理结构一致例:线性逻辑关系与顺序存储方法3、利用物理结构在内存中找到一个结点,而为什么要找这个结点却由元素间的逻辑关系决定任何一个算法的设计取决于选定的数据逻辑结构,而算法的实现依赖于采用的存储结构4、逻辑结构与存储结构是一个问题的两个方面数据的逻辑结构和存储结构Outline数据结构定义数据的逻辑结构数据的存储结构算法算法算法的概念及特点算法是为解决某一特定类型问题规定的运算规则的有穷集合有穷性:非无限执行,必须在有限步骤内结束确定性:非二义,下一步必须是明确的有效性:每一步是可执行的输入:外部输入零个或多个输出:至少一个特点算法算法与程序相似:都是解决问题的方法和步骤,是指令的集合区别:描述方法联系:程序用某种程序设计语言来实现算法程序使用程序设计语言算法可以使用框图及其他语言算法要求描述一个算法时必须满足:对输入和输出的描述描述语句准确、无二义保证算法的有穷性和有效性算法在数据结构中常见的问题创建、插入、删除、更新、检索、排序……注意:每个问题都有一种和多种算法找到效率最高的,消耗存储空间最小的以最容易理解的方式设计设计的算法不容易出错或出错情况较少算法数据结构研究什么数据之间的逻辑关系,建模数据的存储,如何在计算机中储存如何高效的处理数据,算法的设计一些补充内容在其它一些参考文献中使用的一些常见概念,作一些简单的描述,方便阅读相关资料:ADT时间复杂度空间复杂度ADT抽象数据类型(AbstractDataTypes简称ADT)ADT是指抽象数据的组织和与之相关的操作。可以看作是数据的逻辑结构及其在逻辑结构上定义的操作。抽象数据类型可以看作是描述问题的模型,它独立于具体实现。它的优点是将数据和操作封装在一起,使得用户程序只能通过在ADT里定义的某些操作来访问其中的数据,从而实现了信息隐藏。举例:食堂的队列如果抽象出来,对外部来说,服务的师傅只需要知道服务队头,而队列内部怎么排的并不需要关心。时间复杂度按照不同算法,编写程序,比较其运行时的时间效率;需要实际的代码实现,且受到软件实现等因素影响,所以一般采用事先对算法进行分析估算;只考虑问题的规模(一般用自然数n表示,例如需要处理的数据个数),认为一个特定的算法的时间复杂度,只取决于问题的规模,或者说它是问题的规模的函数;为了方便比较,通常的做法是,从算法选取一种对于所研究的问题(或算法模型)来说是基本运算的操作(例如比较),以其重复执行的次数作为评价算法时间时间复杂度一般用O(f(n))来表示渐进符号(O)的定义:当且仅当存在一个正的常数C,使得对所有的nn0,有f(n)=Cg(n)则f(n)=O(g(n))空间复杂度空间复杂度指算法在运行过程中,临时所需要占用的内存空间大小的度量,不包括提供数据时所占用的空间,是占用内存空间大小的渐进复杂度程序所需内存空间的大小为一个关于数据规模的函数,如果函数为多项式,那么空间复杂度就是忽略了这个多项式的低次项和常系数的单项式。如数据规模是n,所需空间是2*n^3+5*n^2+logn+3个字节,那么空间复杂度是O(n^3)。