1 / 67

《 计算机科学导论 》 之七

《 计算机科学导论 》 之七. 陈庆章 qzchen@zjut.edu.cn. 本章主要内容. 数据结构 数组、链表、栈、队列、树 2. 文件结构 顺序文件、文本文件 索引文件、哈希文件. 数据结构:概念. 计算机是一门研究用计算机进行数据表示和处理的科学。这里面涉及到两个问题:数据 的表示和数据的处理

raoul
Download Presentation

《 计算机科学导论 》 之七

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 《计算机科学导论》之七 • 陈庆章 • qzchen@zjut.edu.cn

  2. 本章主要内容 • 数据结构 数组、链表、栈、队列、树 2.文件结构 顺序文件、文本文件 索引文件、哈希文件

  3. 数据结构:概念 • 计算机是一门研究用计算机进行数据表示和处理的科学。这里面涉及到两个问题:数据的表示和数据的处理 • 数据的表示又直接关系到处理数据的程序的效率。随着计算机的普及,数据量的增加,数据范围的拓宽,使许多系统程序和应用程序的规模很大,结构又相当复杂。因此,为了编写出一个“好”的程序,必须分析待处理的对象的特征及各对象之间存在的关系,这就是数据结构这门课所要研究的问题。

  4. 数据结构:概念 • 数据关系有多种形式 例如:学生名单(线性关系) 家族成员(树形关系) • 数据结构的研究问题: 数据之间的结构关系,包括如何表示(逻辑结构)?如何存储(存储结构)?如何处理(算法)?

  5. 数据结构:概念 • 数据(Data):客观对象的符号表示。 例如:学号,姓名,班名都是数据。 • 数据元素(Data Element):数据的基本单位。相当于“记录”,计算机程序中通常作为一个整体考虑和处理 • 数据项(Data Field) : 相当于记录的“域”, 是数据的不可分割的最小单位,如学号 • 数据对象(Data Object):性质相同的数据元素的集合. 例如: 所有班名相同的记录集合 • 数据结构(Data Structure):是相互之间存在一种或多种特定关系的数据元素的集合。

  6. 004 003 006 005 008 007 001 002 数据结构:概念 • 数据结构的形式定义为:数据结构是一个二元组: Data-Structure=(D,S) 其中:D是数据元素的集合,S是D上关系的集合。 例如某班学生的学号 是按顺序排列的。 学生间学号顺序关系 是一种线性结构关系

  7. 004 003 006 005 008 007 001 002 数据结构:概念 • 例如某班学生的学号 是按顺序排列的。 学生基本情况表的二元组表示(D,S) D = { 001,002,003,004,005,006,007,008} S = { R } R= {<001,002>,<002,003>,<003,004>,<004,005>,<005,006>, <006,007>,<007,008> } 学生间学号顺序关系 是一种线性结构关系

  8. J I A C B D H G F E 数据结构:概念 • 例如假设某家族有10个成员A, B, C, D, E, F, G, H,I, J,他们之间的血缘关系可以用如下图表示。 家族树的二元组表示(D,S) D = { A,B,C,D,E,F,G,H,I,J} S = { R } R = {〈A,B>,<A,C>,<A,D>,<B,E>,<B,F>,<C,G>,<D,H>,<D,I>,<D,J> }

  9. 数据结构:概念 • 数据结构在计算机中有两种不同的表示方法: 顺序表示和非顺序表示 • 由此得出两种不同的存储结构:顺序存储结构和链式存储结构 • 顺序存储结构:用数据元素在存储器中的相对位置来表示数据元素之间的逻辑关系。 • 链式存储结构:在每一个数据元素中增加一个存放地址的指针,用此指针来表示数据元素之间的逻辑关系。

  10. 姓名 电话号码 蔡颖 63214444 陈红 63217777 刘建平 63216666 王小林 63218888 张力 63215555 ... 数据结构:线性表(数组) • 一、概念 线性表是n 个类型相同数据元素的有限序列,通常记作 (a1, a2, a3, …, an) 例1、数学中的数列(11,13,15,17,19,21 例2、英文字母表(A, B, C, D, E Z )。 例3、某单位的电话号码簿。

  11. 数据结构:线性表(数组) • 一、概念 说明:设 A=(a1, a2, ... , ai -1, ai , ai+1, …, an)是一线性表,其有如下性质: 1) 线性表的数据元素可以是各种各样的,但同一线性表中的元素必须是同一类型的; 2) 在表中 ai-1领先于ai ,ai领先于ai+1,称ai-1是ai的直接前驱,ai+1是ai的直接后继;

  12. 数据结构:线性表(数组) • 一、概念 3) 在线性表中,除第一个元素和最后一个元素之外,其他元素都有且仅有一个直接前驱,有且仅有一个直接后继,具有这种结构特征的数据结构称为线性结构。线性表是一种线性数据结构; 4) 线性表中元素的个数n 称为线性表的长度,n=0 时称为空表; 5) ai是线性表的第i 个元素,称i 为数据元素ai的序号,每一个元素在线性表中的位置,仅取决于它的序号;

  13. 数据结构:线性表(数组) • 二、线性表的存储 为了存储线性表,至少要保存两类信息:1)线性表中的数据元素;2)线性表中数据元素的顺序关系;

  14. a1 a2 ai-1 ai ai+1 an 数据结构:线性表(数组) • 二、线性表的存储:顺序存储结构 线性表的顺序存储结构,就是用一组连续的内存单元依次存放线性表的数据元素。 用顺序存储结构存储的线性表——称为顺序表

  15. 数据结构:线性表(数组) • 二、线性表的存储:顺序存储结构 在顺序存储结构下,线性表元素之间的逻辑关系,通过元素的存储顺序反映(表示)出来; 假设线性表中每个数据元素占用 t(教材是使用k)个存储单元,那么,在顺序存储结构中,线性表的第i个元素的存储位置与第1个元素(教材是第0个)的存储位置的关系是: Loc(ai ) = Loc( a1 )+ ( i – 1)t

  16. t个单元 Loc( a1 ) a1 a2 ai-1 ai ai+1 an Loc(ai ) 如何用C语言写程序来实现 插入、删除等操作? 你采用的算法复杂度如何? ? 数据结构:线性表(数组) 线性表中每个数据元素占用 t(教材是使用k)个存储单元,那么,在顺序存储结构中,线性表的第i个元素的存储位置与第1个元素(教材是第0个)的存储位置的关系是: Loc(ai ) = Loc( a1 )+ ( i – 1)t

  17. y x z z a p 数据结构:线性表(数组) 线性表插入图示(P点是插入点,表示在 y 之后插入一个元素a) head head y x p

  18. y x z z q 数据结构:线性表(数组) 线性表删除图示(q 点是要删除点) head p head x y p q

  19. 数据结构:线性表(数组) • 二、线性表的存储:顺序存储结构 顺序表的特点: 1 通过元素的存储顺序反映 线性表中 数据元素之间的逻辑关系; 2 可随机存取顺序表的元素; • 顺序表的插入、删除操作要通过移动元素实现; 教材中(P199)给出两维数组的存储地址计算公式,请自己阅读理解。

  20. 数据结构:线性表(链表) • 二、线性表的存储:链式存储结构 线性表的链式存储结构是用一组任意的存储单元(可以连续也可以不连续)存储线性表的各个数据元素。为了表示线性表中元素的先后关系,每个元素除了需要存储自身的信息外还需保存直接前驱元素或直接后继元素的存储位置。

  21. a4 a3 a1 a2 1010 1012 1014 1016 1018 1020 1022 1024 1026 0 1010 1024 1014 ai+1 an a1 a2 ai-1 ai n 数据结构:线性表(链表) • 二、线性表的存储:链式存储结构 用线性链表存储线性表时,数据元素之间的关系是通过保存直接后继元素的存储位置来表示的

  22. 结点 数据域 指针域 数据结构:线性表(链表) • 二、线性表的存储:链式存储结构(有关术语) 结点:数据元素和直接后继的存储位置(地址)组成一个数据元素的存储结构,称为一个结点; 结点的数据域 :结点中用于保存数据元素的部分; 结点的指针域 :结点中用于保存数据元素直接后继存储地址的部分; 存储后继结点 存储地址 存储数据元素

  23. ai+1 an n a1 a2 ai-1 ai 数据结构:线性表(链表) 头指针:用于存放线性链表中第一个结点的存储地址;空指针:不指向任何结点,线性链表最后一个结点的指针通常是指针;头结点:线性链表的第一元素结点前面的一个附加结点,称为头结点;带头结点的线性链表:第一元素结点前面增加一个附加结点的线性链表称为 带头结点的线性链表; 怎样在计算机上 实现线性链表? • 二、线性表的存储:链式存储结构(有关术语) 线性链表的每个结点中只有一个指针域 故也称为单链表 head是头指针 head 空指针 头结点

  24. 数据结构:线性表(链表) • 二、线性表的存储:链式存储结构 线性链表的特点 1 通过保存直接后继元素的存储位置来表示 数据元素之间的逻辑关系; 2 插入删除操作通过修改结点的指针实现; 3 不能随机存取元素;

  25. 结点 指针域 数据域 指针域 数据结构:线性表(链表) • 三、其他形式链表:双向链表 双向链表中,每个结点有两个指针域,一个指向直接后继元素结点,另一个指向直接前驱元素结点。 存储数据元素 存储后继结点 的地址 存储前驱结点 的地址

  26. (b)空的双向循环链表 a b head (c)非空的双向循环链表 数据结构:线性表(链表) • 三、其他形式链表:双向链表图示

  27. ai-1 ai ② ④ ① ③ ① ai-1 ai ai+1 x ② 数据结构:线性表(链表) • 三、其他形式链表:双向链表的插入与删除图示 p p 在双向链表中插入一个结点时指针的变化情况 在双向链表中删除结点时指针变化情况

  28. head a1 an head 数据结构:线性表(链表) • 三、其他形式链表:单向循环链表 循环链表是线性表的另一种链式存储结构,它的特点是将线性链表的最后一个结点的指针指向链表的第一个结点 (a)非空表 (b)空表

  29. an 栈顶 a2 a1 栈底 数据结构:堆栈(栈) • 概念 栈是限定仅能在表的一端进行插入、删除操作的线性表 出栈 栈的特点 后进先出 进栈 第一个进栈的元素在栈底,最后一个进栈的元素在栈顶, 第一个出栈的元素为栈顶元素, 最后一个出栈的元素为栈底元素 栈的示意图

  30. top E D top C top B B top base A A A base base base 数据结构:堆栈(栈) • 操作 E D C 出栈 A进栈 B C D E 进栈 空栈 栈的基本操作:  构造一个空栈;进栈操作; 出栈操作; 取栈顶元素 栈操作图示

  31. 数据结构:堆栈(栈) • 特点 1 栈是限定仅能在表的一端进行插入、 删除操作的线性表; 2 栈的元素具有后进先出(LIFO)或 先进后出的特点; 3 栈顶元素的位置由一个称为栈顶指针的 变量指示,进栈、出栈操作要修改栈顶指针。

  32. 如何确定运算符的运算顺序? ? 数据结构:堆栈(栈) • 应用举例 设计一个小计算器: 对键入的表达式进行求值。 高级语言中的赋值语句:变量=表达式; 表达式的构成 操作数+运算符+界符(如括号) 表达式的求值: 例 5+6 (1+2)- 4 按照四则运算法则,上述表达式的计算过程为: 5+6 (1+2)- 4=5+6 3- 4 = 5+18-4= 23-4=19 3 2 1 4

  33. 数据结构:堆栈(栈) • 应用举例 设计一个小计算器: 对键入的表达式进行求值。 高级语言中的赋值语句:变量=表达式; 表达式的构成 操作数+运算符+界符(如括号) 表达式的求值: 例 5+6 (1+2)- 4 按照四则运算法则,上述表达式的计算过程为: 5+6 (1+2)- 4=5+6 3- 4 = 5+18-4= 23-4=19

  34. c2 + - * / ( ) # c1 + > > < < < > > - > > < < < > > * > > > > < > > / > > > > < > > ( < < < < < = ) > > > > > > < < < < < = # 算符优先关系表 表达式中任何相邻运算符c1、c2的优先关系有:c1<c2:c1的优先级低于c2 c1=c2:c1的优先级等于c2 c1>c2:c1的优先级高于c2 算符间的优先关系表 注: c1c2是相邻算符, c1在左, c2在右

  35. 算符 栈内优先级 栈外优先级 4 3 • * / + - 2 1 ( 0 5 ) 5 0 # -1 -1 算符的优先级设置 从左向右扫描表达式: 遇操作数——进栈; 遇运算符号cj——与前面的刚扫描过的运算符ci比较 若ci<cj 则进栈cj,( 因此已保存的运算符的优先关系为 c1<c2<c3<c4。。 ) 若ci>cj 则说明ci是已扫描的运算符中优先级最高者,可进行运算;  若ci = cj 则ci为(,cj 为 ),说明括号内的式子已计算完,需要消去括号;

  36. base OPTR栈 OPND栈 top top top top top top top top top top top top top top top top top top top top top top top top top top top top top top top top base 表达式求值示意图:5+6(1+2)-4 =19 数据结构:堆栈(栈) 6 ( 1 + 2 ) - 4 # 读入表达式过程: 5 + × • 应用举例 1+2=3 6×3=18 5+18=23 23-4=19 + ( 2 1 3 × + 18 4 6 - # 19 23 5

  37. 数据结构:队列 • 什么是队列 队列是限定仅能在表头进行删除,表尾进行插入的线性表 (a1, a2, ... , ai -1, ai , ai+1, …, an) 删除 插入

  38. 数据结构:队列 • 什么是队列 队列的特点 先进先出 出队列 入队列 a1 a2 a3 an 第一个入队的元素在队头最后一个入队的元素在队尾 第一个出队的元素为队头元素 最后一个出队的元素为队尾元素 队头 队尾 队 列 的 示 意 图

  39. 数据结构:队列 • 队列特点 1 队列是限定仅能在表尾一端进行插入,表头一端删除操作的线性表; 2 队列中的元素具有先进先出的特点; 3 队头、队尾元素的位置分别由称为队头指针和队尾指针 的变量指示, 4 入队操作要修改队尾指针,出队操作要修改队头指针;

  40. 数据结构:队列 • 队列应用 1)解决计算机主机与外设不匹配的问题;2)解决由于多用户引起的资源竞争问题; 以上在操作系统课程中会讲到 3)离散事件的模拟----模拟实际应用中的各种排队现象;4)用于处理程序中具有先进先出特征的过程;

  41. 数据结构:树 • 树的概念 树形结构是一种重要的非线性结构,讨论的是层次和分支关系。树是n个结点的有限集合,在任一棵非空树中:(1)有且仅有一个称为根的结点。(2)其余结点可分为个互不相交的集合,而且这些集合中的每一集合都本身又是一棵树,称为根的子树。

  42. J I A C B D H G F E K L M 数据结构:树 • 树的概念 T={A, B, C, D, E, F, G, H, I, J,K,L,M} A是根,其余结点可以划分为3个互不相交的集合: T1={B, E, F,K,L} , T2={C, G} , T3={D, H, I, J,M} 这些集合中的每一集合都本身又是一棵树,它们是A的子树。 例如 对于 T11,B是根,其余结点可以划分为2个互不相交的集合: T11={E,K,L},T12={F},T11,T12 是B 的子树。

  43. J I A C B D H G F E K L M 数据结构:树 • 树的概念 树的 基本术语 树的结点:包含一个数据元素及若干指向子树的分支;孩子结点:结点的子树的根称为该结点的孩子;双亲结点:B 结点是A 结点的孩子,则A结点是B 结点的双亲;兄弟结点:同一双亲的孩子结点;堂兄结点:同一层上结点;祖先结点: 从根到该结点的所经分支上的所有结点 子孙结点:以某结点为根的子树中任一结点都称为该结点的子孙

  44. C 文件夹1 文件夹n 文件1 文件2 文件夹11 文件夹12 文件11 文件12 数据结构:树 • 树的概念 树常用来表达一个组织、一种文件结构等。例如Windowsd 文件结构:

  45. E D C A B G F 数据结构:树 • 二叉树的概念 二叉树: 或为空树,或由根及两颗不相交的左子树、右子树构成,并且左、右子树本身也是二叉树。 1)二叉树中每个结点最多有两颗子树;二叉树每个结点度小于等于2; 2)左、右子树不能颠倒——有序树; 3)二叉树是递归结构,在二叉树的定义中又用到了二叉树的概念;

  46. D E E D C C B A A B G G F F 数据结构:树 • 二叉树的概念 (a) (b) (a)、(b)是不同的二叉树, (a)的左子树有四个结点,(b)的左子树有两个结点,

  47. φ 数据结构:树 (a)空树 • 二叉树的基本形态 (c) 右子树空 (b)仅有根 (d) 左、右子树均在 (e) 左子树空

  48. c e a d b f + / - - * 数据结构:树 • 二叉树的应用举例 可以用二叉树表示表达式:a+b*(c-d)-e/f

  49. E C A F D B A B C G 数据结构:树 • 两种特殊的二叉树 满二叉树:如果深度为k的二叉树,有2k-1个结点则称为满二叉树; K=3的满二叉树 K=2的满二叉树

  50. 数据结构:树 • 两种特殊的二叉树 完全二叉树:如果一颗二叉树只有最下一层结点数可能未达到最大,并且最下层结点都集中在该层的最左端,则称为完全二叉树;

More Related