程序设计基础第10章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《程序设计基础第10章.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 基础 10
- 资源描述:
-
1、数据结构的基本数据结构的基本概念和术语概念和术语10.110.2线性结构线性结构10.3树型结构树型结构图型结构图型结构10.410.5检索检索10.6排序排序10.1.1 10.1.1 数据结构概念数据结构概念 数据结构就是来研究程序设计中计算机操作的对象以及它们之间的关系和运算。数据是人们利用文字符号、数字符号以及其他规定的符号对现实世界的事物及其活动所做的描述。在计算机科学中,数据的含义非常广泛,我们把一切能够输入到计算机中并被计算机程序处理的信息,包括文字、表格、图象等,都称为数据。结点也叫数据元素,它是组成数据的基本单位。在程序中通常把结点作为一个整体进行考虑和处理。一般情况下,一个
2、结点中含有若干个字段(也叫数据项)。字段是构成数据的最小单位。10.1.2 10.1.2 数据结构的逻辑结构与存储结构数据结构的逻辑结构与存储结构 1.1.数据结构的逻辑结构数据结构的逻辑结构 数据元素之间的逻辑关系称为数据的逻辑结构。数据的逻辑结构只是从逻辑关系上描述数据,与数据的存储无关,是独立于计算机的。按照数据元素之间的逻辑关系,又分为两大类:1 1)线性结构)线性结构 线性结构是数据元素之间存在着“一对一”的线性关系的数据结构,如图所示。线性表、栈、队列、串都是线性结构。10.1.2 10.1.2 数据结构的逻辑结构与存储结构数据结构的逻辑结构与存储结构 2 2)非线性结构)非线性结
3、构 非线性结构是数据元素之间存在着“一对多”或“多对一”的线性关系的数据结构,如图所示。树和图都是非线性结构。10.1.2 10.1.2 数据结构的逻辑结构与存储结构数据结构的逻辑结构与存储结构 2.2.数据结构的存储结构数据结构的存储结构 数据在计算机中的存储表示称为数据的存储结构。数据的存储结构是逻辑结构在计算机存储器中的映像,是依赖于计算机的。既然数据的逻辑结构分成了线性结构和非线性结构两种,相应地,其在存储器中的映像就有两种不同的表示方式:顺序映像和非顺序映像。由此得到两种不同的存储结构:10.1.2 10.1.2 数据结构的逻辑结构与存储结构数据结构的逻辑结构与存储结构 1 1)顺序
4、存储结构)顺序存储结构 顺序存储结构是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。顺序存储结构是一种最基本的存储表示方法,通常借助于程序设计语言中的数组来实现。链式存储结构不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。链式存储结构通常借助于程序设计语言中的指针类型来实现。2 2)链式存储结构)链式存储结构10.2.1 10.2.1 线性表线性表 线性表是最基本、最简单、最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑
5、结构简单,便于实现和操作。1.1.定义定义 线性表是一个含有n(n0)个结点的有限序列。当n=0时,称之为空表;当n=1,线性表仅有一个结点,此结点既是开始结点又是终端结点;当n1时,对于其中的结点,有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有一个终端结点没有后继但有一个前驱结点,其它的结点都有且仅有一个前驱和一个后继结点。10.2.1 10.2.1 线性表线性表 ABDC集合中必存在集合中必存在唯一的一个唯一的一个“最后元素最后元素”除第一个元素除第一个元素之外,均有唯之外,均有唯一的前驱一的前驱集合中必存在集合中必存在唯一的一个唯一的一个“第一元素第一元素”除最后一个元除最后一个
6、元素之外,均有素之外,均有唯一的后继唯一的后继10.2.1 10.2.1 线性表线性表 2.2.线性表的基本操作线性表的基本操作123456GetElem(L,i):):取表中元素。取表中元素。InitList(L):):初始化表。初始化表。Length(L):):求表长。求表长。PriorElem(L,x,pre_x):):取元素取元素x x的直接的直接前驱。前驱。NextElem(L,x,next_x):):取元素取元素x x的直接后继。的直接后继。LocateElem(L,x):):定位。返回元素定位。返回元素x x在在线性表线性表L L中的位置。中的位置。10.2.1 10.2.1 线
7、性表线性表 7 8 9ListInsert(L,i,x):):插入元素。插入元素。ListDelete(L,i):):删除元素。删除元素。PrintList(L):):输出线性表。输出线性表。10.2.1 10.2.1 线性表线性表 3.3.线性表的顺序存储线性表的顺序存储 线性表的顺序存储是指用一组连续的存储单元依次存储线性表中的每个数据元素。用这种存储形式存储的线性表又称为顺序表。在程序设计中,往往用一维数组来做顺序表的存储。10.2.1 10.2.1 线性表线性表 存储地址存储地址内存单元内存单元.da1d+La2d+2La3.d+(i-1)Lai.d+(n-1)Lan.相邻两个数据元素
8、的存储位置计算公式为:LOC(ai+1)=LOC(ai)+L 线性表中任意一个数据元素的存储位置的计算公式为:LOC(ai+1)=LOC(a1)+(i-1)*L10.2.1 10.2.1 线性表线性表 (1)数据元素的存储位置反映了线性表中相邻数据元素之间的前后关系,即线性表的逻辑结构与存储结构(物理结构)一致;(2)利用上述给出的数学公式,可以快速地计算出任何一个数据元素的存储地址,这在访问线性表中的任一数据元素所花费的时间开销是相同的,适宜于静态查找。这种存取元素的方法称为随机存取法,使用这种存取方法的存储结构被称为随机存储结构。10.2.1 10.2.1 线性表线性表 缺点缺点:采用顺序
9、存储方式的线性表需要程序预先定义线性表结构,占用固定的内存空间。如果要进行插入数据元素和删除数据元素的操作时,则需移动大量结点。4.4.线性表的链式存储线性表的链式存储 前面提到过,顺序表的存储空间大小需要在程序设计时预选设置一固定值,这就导致在表中的数据元素个数发生动态变化时会出现表满的情况发生。为了能够避免这种现象,引入了用链式存储方式存储线性表的方法,这样存储形式的线性表称之为链表。链表有单链表、双链表和循环链表之分。10.2.1 10.2.1 线性表线性表 单链表采用一个结点存放一个数据元素,每个结点除了包括存放数据元素值的数据域(data)外,还包括指向下一个元素的存储位置的指针域(
10、next),最后一个结点的指针域为空 NULL(图示中用表示)。单链表的结点结构如下所示:datanext 以线性表(bat,cat,fat,hat,jat,lat,mat)为例,来看一下以单链表形式存储的图示:batcatfatmathead 和顺序表相比,用单链表的存储形式更适合于表中元素频繁变动的线性表。10.2.2 10.2.2 栈栈 栈(Stack)是一种特殊的表,这种表只在表的一端进行插入和删除操作。允许插入和删除数据元素的这一端称为栈顶;而另一固定的一端称为栈底。不含任何元素的栈称为空栈。对栈中元素的操作是按照“后进先出”的原则进行的,即后进栈的元素先处理,所以栈又称为后进先出(
11、Last In First Out)表,简称为LIFO表。10.2.2 10.2.2 栈栈 anan-1a2a1栈顶栈顶栈底栈底进栈进栈出栈出栈10.2.2 10.2.2 栈栈 12345置空栈 initStack(s):设置一个空栈S。进栈 push(S,x):将元素x进到栈S中。gettop(S,x):将栈s的栈顶元素赋给x,栈指针递减。判断栈空stackempty(s):若栈为空,返回1,否则返回0。pop(s,x):将栈s的栈顶元素赋给x,栈指针递减。10.2.2 10.2.2 栈栈 栈用顺序表存储,分配一块连续的内存区域存放栈中元素,并用一个变量指向当前的栈顶。假设栈的元素个数最大不
12、超过整数MaxSize,所有的元素都具有同一数据类型 ElemType,则可用下列方式来定义栈类型stack:Typedef struct Elemtype eMAXSIZE;Int top;Stack;10.2.3 10.2.3 队列队列 队列是一种特殊的线性表,对这种线性表,删除操作只在表头(称为队头)进行,插入操作只在表尾(称为队尾)进行。队列的修改是按先进先出的原则进行的,所以队列又称为先进先出(First In First Out)表,简称 FIFO 表。1.1.队列的数学性质队列的数学性质 假设队列为 a1,a2,.,an,那么a1就是队头元素,an为队尾元素。队列中的元素是按 a
13、1,a2,.,an 的顺序进入的,退出队列也只能按照这个次序依次退出。也就是说,只有在a1离开队列之后,a2才 能退出队列,只有在 a1,a2,.,an-1 都离开队列之后,an 才能退出队列。10.2.3 10.2.3 队列队列 入队入队出队出队a1 a2 a3 an-1 an队头队头队尾队尾 队列的示意图队列的示意图10.2.3 10.2.3 队列队列 2.2.队列的基本运算队列的基本运算 1initQueue(q)初始化:初始化:初始化一个新的队列。初始化一个新的队列。2empty(q)队列非空判断:队列非空判断:若队列若队列 q 不空,则返不空,则返回回 TRUE;否则,返回;否则,返
14、回 FALSE。3append(q,x)入队列:入队列:在队列在队列 q 的尾部插入元的尾部插入元素素 x,使元素,使元素 x 成为新的队尾。若队列满,则成为新的队尾。若队列满,则返回返回 FALSE;否则,返回否则,返回 TRUE。10.2.3 10.2.3 队列队列 6length(qlength(q)求队列长度:求队列长度:返回队列的长度。返回队列的长度。5getHead(q)取队头元素:取队头元素:若队列若队列 q 不空,则返不空,则返回队头元素;否则返回空元素回队头元素;否则返回空元素 NULL。4delete(s)出队列:出队列:若队列若队列 q 不空,则返回队头不空,则返回队头元
15、素,并从队头删除该元素,队头指针指向原元素,并从队头删除该元素,队头指针指向原队头的后继元素;否则,返回空元素队头的后继元素;否则,返回空元素 NULL。10.2.3 10.2.3 队列队列 3.3.队列的顺序存储结构队列的顺序存储结构 队列的顺序存储结构可以简称为顺序队列,也就是利用一组地址连续的存储单元依次存放队列中的数据元素。一般情况下,我们使用一维数组来作为队列的顺序存储空间,另外再设立两个指示器:一个为指向队头元素位置的指示器front,另一个为指向队尾的元素位置的指示器rear。C语言中,数组的下标是从0开始的,因此为了算法设计的方便,在此我们约定:初始化队列时,空队列时令fron
16、t=rear=-1,当插入新的数据元素时,尾指示器rear加1,而当队头元素出队列时,队头指示器front加1。另外还约定,在非空队列中,头指示器front总是指向队列中实际队头元素的前面一个位置,而尾指示器rear总是指向队尾元素。10.2.3 10.2.3 队列队列 4.4.队列的链式存储结构队列的链式存储结构 用链表表示的队列简称为链队列,在一个链队列中需设定两个指针(头指针和尾指针)分别指向队列的头和尾。为了操作的方便,和线性链表一样,我们也给链队列添加一个头结点,并设定头指针指向头结点。因此,空队列的判定条件就成为头指针和尾指针都指向头结点。10.2.4 10.2.4 串串 串又称字
17、符串,是一种特殊的线性表,其每个结点仅由一个字符组成。1.1.串的基本概念串的基本概念 串(String)是由0个或多个字符组成的有限序列,一般表示为:S=“a1a2an”。其中:S是串名,双引号括起的字符序列是串值;ai 可以是字母、数字或其它字符;n 为串的长度。10.2.4 10.2.4 串串 2.2.串的基本操作串的基本操作计算机中对串的操作主要包含以下几种:计算机中对串的操作主要包含以下几种:创建串 creat(S)求串长度 length(S)复制串 copy(S1,S2)连接串 concat(S1,S2)求子串 subs(S,i,j)比较串 compare(S1,S2)插入一个子串
18、 insert(S1,i,S2)删除一个子串 delete(S1,i,j)求子串在主串中的位置 index(S1,S2)10.2.4 10.2.4 串串 3.3.串的储存结构串的储存结构 串是一种特殊的线性表,因此串的存储结构表示也有两种方法:静态存储采用顺序存储结构,动态存储采用的是链式存储和堆存储结构。1 1)串的静态存储结构)串的静态存储结构 类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列。由于一个字符只占1个字节,而现在大多数计算机的存储器地址是采用的字编址,一个字(即一个存储单元)占多个字节。因此顺序存储结构方式有两种:10.2.4 10.2.4 串串 (1)
19、紧缩格式:即一个紧缩格式:即一个字节存储一个字符。字节存储一个字符。(2 2)非紧缩格式:这种非紧缩格式:这种方式是以一个存储单元方式是以一个存储单元为单位,每个存储单元为单位,每个存储单元仅存放一个字符。仅存放一个字符。2 2)串的动态存储结构)串的动态存储结构 串的动态存储方式采用链式存储结构和堆存储结构两种形式:10.2.4 10.2.4 串串 (2)(2)堆存储结构堆存储结构(1)(1)链式存储结构链式存储结构 串的链式存储结构中每个结点包含字符域和结点链接指针域,字符域用于存放字符,指针域用于存放指向下一个结点的指针,因此,串可用单链表表示。堆存储结构的特点是,仍以一组空间足够大的、
20、地址连续的存储单元存放串值字符序 列,但它们的存储 空间是在程序执行过程中动态分配的。10.3.1 10.3.1 树的基本概念与术语树的基本概念与术语 树(Tree)是 n(n0)个结点的有限集合T,当 n=0时,集合T为空,此时树为空树;当 n0 时,集合T非空,此时树为非空树,它满足如下两个条件:(1)有且仅有一个特定的称为根(Root)的结点;(2)其余的结点可分为 m(m0)个互不相交的子集T1,T2,Tm,其中每个子集本身又是一棵树,并称其为根的子树(Subtree)。树的具体定义树的具体定义:10.3.1 10.3.1 树的基本概念与术语树的基本概念与术语 用来表示树的方法最直观的
21、就是树形表示法用来表示树的方法最直观的就是树形表示法10.3.1 10.3.1 树的基本概念与术语树的基本概念与术语 度(度(Degree):):一个结点拥有的子树数称为该结点的度。树的度:树的度:一棵树的度是指该树中结点的最大度数。叶子叶子(Leaf)和分支结点:和分支结点:度为零的结点称为叶子或终端结点。度不为零的结点称为分支结点或非终端结点。除根结点之外的分支结点统称为内部结点,根结点又称为开始结点。双亲双亲(Parents)和孩子和孩子(Child):树中某个结点的子树之根称为该结点的孩子或儿子,相应地,该结点称为孩子的双亲或父亲。10.3.1 10.3.1 树的基本概念与术语树的基本
22、概念与术语 兄弟兄弟(Sibling)和堂兄弟:和堂兄弟:同一个双亲的孩子称为兄弟。双亲在同一层的结点互为堂兄弟。路径路径(Path):):若树中存在一个结点序列k1,k2,kj,使得 kj 是 ki+1 的双亲(1ij),则称该结点序列是从 ki 到 kj 的一条路径或道路。若一个结点序列是路径,则在树的树形图表示中,该结点序列“自上而下”地通过路径上的每条边。祖先(祖先(AncestorAncestor)和子孙()和子孙(DescendantDescendant):):一个结点的祖先是指从树的根到该结点所经分枝上的所有结点(包括根结点)。一个结点的子树的所有结点都称为该结点的子孙。结点的层
23、数(结点的层数(LevelLevel):):是从根起算,设根的层数为1,其余结点的层数等于其双亲结点的层数加1。10.3.1 10.3.1 树的基本概念与术语树的基本概念与术语 树的高度树的高度(Height):树中结点的最大层数称为树的高度或深度(Depth)。有序树有序树(Ordered Tree)和无序树和无序树(Unordered Tree):若将树中每个结点的各子树看成是从左到右有次序的(即不能互换),则称该树为有序树;否则称为无序树。森林森林(Forest):是 m(m0)棵互不相交的树的集合。对树中每个结点而言,其子树的集合即为森林;反之,给一个森林加上一个结点,使原森林的各棵树
展开阅读全文