Presentation is loading. Please wait.

Presentation is loading. Please wait.

机械CAD中常用的数据结构.

Similar presentations


Presentation on theme: "机械CAD中常用的数据结构."— Presentation transcript:

1 机械CAD中常用的数据结构

2 第四章 机械CAD中常用的数据结构 第一节 基本概念 第二节 线性表 第三节 栈 第四节 树 第五节 二叉树

3 第四章 机械CAD中常用的数据结构 本 章 要 点 数据结构的基本概念 树与二叉树

4 4.1 基本概念 数据 — 数据是指用来描述客观事物的、能输入到计算机中并被计算机接受和处理的符号的总称。用文字符号、数字符号及其它规定的符号对现实世界的事物及其活动的抽象描述。 数据元素 —数据元素是数据的基本单位,是数 据这个集合的一个个体。例如在设计产品的过程中, 可以把该产品的每个部件的每一个零件看作一个相对 独立的单元,这时每个零件就是一个数据元素。

5 §4-1 基本概念 数据结构 ◎数据结构是指数据及其相互之间的联系 ◎数据结构有逻辑结构和物理结构之分
◎数据的逻辑结构仅考虑数据之间的逻辑关系,它独立于数据的存储介质。所关注的是数据之间的联系,是这种联系的抽象描述。 ◎数据的物理结构也称存储结构,是数据结构在计算机中的映象。是一种逻辑结构在存储器中的存储方式,存贮方式有顺序、链接、索引、散列等多种,所以一种逻辑结构可以采用多种物理结构存贮。 ◎通常所说的数据结构就是指逻辑结构

6 数据结构的分类及表示方法 实例:教务处人事简表(表1—1) ◎目录行包括六个数据项,这些定义了表的结构
职工号 姓名 性别 出生日期 职务 部门 01 02 03 04 05 06 07 08 09 10 万明华 赵宁 张利 赵书芳 刘永年 王明理 王敏 张才 马立仁 邢怀常 62.8.5 65.4.1 66.7.5 处长 科长 科员 教务处 教学科 学籍科 考务科 ◎目录行包括六个数据项,这些定义了表的结构 ◎共有十条记录,一个记录就是一个数据元素 ◎“职工号”的值能唯一地标识一个记录,该数据项叫做 关键项

7 1、线性结构 设表1—1中只考虑年龄大小的排列 ◎图形表示
07 04 06 09 10 05 01 03 08 02 ◎结构特点:数据元素之间最多只有一个前驱,最多只有一个后继,元素之间是一对一联系,即1︰1

8 2、树形结构 ◎图形表示 设表1—1中只考虑领导和被领导关系
05 01 03 08 02 07 04 06 09 10 ◎结构特点:每个元素最多有一个前驱,但可有多个后继,元素之间是一对多关系,即1︰N,有层次关系。

9 §4-2 线性表 一、线性表的逻辑结构 线性表是一种最常用且最简单的数据结构,是n个数据元素的有限序列:(a1, a2, a3 , … ai, …, an) 其中 数据元素ai可以是一个数,可以是一个符号,还可以是一个线性表,甚至是更复杂的数据结构。

10 §4-2 线性表 线性表具有以下特点: 线性表是数据元素的一个有限序列 线性表中数据元素的个数定义为线性表的长度,当n =0时,为空表
数据元素在线性表的位置取决于它们自己的序号,数据元素之间的相对位置是线性的,如a1是第一个元素,an是最后一个元素。 除了第一个和最后一个数据元素外,每个数据元素有且只有一个直接前趋,有且只有一个直接后继。当1< i < n时,ai的前一个元素ai-1是它的直接前趋,ai的后一个元素ai+1是它的直接后继。i =1, 2, …, n-1的元素ai有且只有一个直接后继, i =2, 3, …, n的元素ai有且只有一个直接前趋 。

11 §4-2 线性表 二、线性表的存储结构 图 4-2 线性表的顺序存储结构示意图
1、顺序存储就是用一组连续的存储单元,按照数据元素的逻辑 顺序依次存放。 假定一个线性表A(n),它的每个数据元素占m个存储单元,第一个数据元素在内存中的开始地址为b,那么,第i个数据元素的存储位置为: L(ai)=b+(i-1)m 元素序号 i n 内存内容 a 1 2 3 存储地址 b +m +2m b+(i-1)m b+(n-1)×m 4-2 线性表的顺序存储结构示意图

12 §4-2 线性表 线性表的顺序存储结构的特点 有序性:各数据元素之间的存储顺序与逻辑顺序一致。
均匀性:每个数据元素所占存储空间的长度是相等的。 因此对表中数据元素进行的访问、修改运算速度快。在删除或插入运算时,必须进行大量数据元素的移动,增加运算时间。 这种存储结构多用于查找频繁、很少增删的场合。如工程手册中的数表。向量、数组、栈、队列属于顺序存储结构。

13 §4-2 线性表 2、线性表的链式存储结构 用一组任意的存储单元存放表中的数据元素。由于存储单元可以是不连续的,因此为了表示表中元素的逻辑关系,除了存储元素本身的信息之外,还要存储这个元素直接后继或直接前趋的存储位置。这两种信息组成数据元素的存储映象,称为结点。结点包括两种域,存放数据元素本身的域称为数据域,存储直接后继或直接前趋地址指针的域称为指针域。 a) 结点 b) 单向链表 4-5 链表结构 数据域 指针域 D ata Link Data2 Link2 Data n Ù Data1 Link1 H head

14 §4-3 栈 一、栈的逻辑结构 栈也是线性表,它与普通线性表的区别就在于对它的运算仅限定在表尾。
进栈 出栈 栈顶 a n 3 2 栈底 1 图4-13 - 栈的逻辑结构 假定栈s=(a1, a2, a3, ,…,, ai, …, an),则a1称为栈底元素,an为栈顶元素。进栈的顺序是a1, a2, a3, ,…, an),出栈的顺序是an, an-1, …, a3, a2, a1。它的显著特点是后进先出(LIFO --- Last In First Out) 。

15 §4-3 栈 二、栈的运算 建立一个栈 栈的存储结构用数组s[n]。设m为栈的上界,则在C语言中,由于第1个数组元素是s[0],所以栈的上界m等于n-1。设一栈顶指针为TOP,它不必指向数据元素的实际地址,只记录数据元素的逻辑序号即可。当元素尚未进栈时,令TOP等于-1。 进栈 如果有元素进栈,首先检查栈顶指针TOP,如果TOP等于m,表示栈满,显示栈满信息,否则将发生上溢。如果TOP<m,令TOP=TOP+1,将该元素赋给s[TOP]。 出栈 出栈即取走栈顶元素。首先检查栈顶指针TOP,如果TOP=-1,表示栈空,显示出错信息,否则将发生下溢。如果TOP>-1,出栈元素为s[TOP],然后令TOP=TOP-1。

16 §4-4 树 一、树的逻辑结构 A B C D F G H I E L K J
1 2 3 4 树根 子树根 树叶 - 17 树的逻辑结构 树是由一个或一个以上结点组成的有限集T,其中一个结点称为根,其余结点可分为若干个互不相交的有限集T1,T2,T3,…,Tn,每一个集合本身又是一棵树,称为根的子树。可见,树结构是一个递归定义。

17 §4-4 树 A B C D F G H I E L K J 图 - 17 树的逻辑结构 结点的度:结点的孩子(子树)的数量称为度。
树的度:树中所有结点中最大的度数称为这个树的度数。图4-17所示的树,其度数为4。 根结点:没有直接前趋的结点,A为根结点。 分支结点:度不为0的结点,或者有直接后继的结点。如结点B,F,D,J。每个分支结点可以有不只一个直接后继。 叶结点:没有直接后继的结点,或者说度为0的结点。如结点E,K,G,H,C,I,L都是树叶,也称终端结点。 A B C D F G H I E L K J 1 2 3 4 树根 子树根 树叶 - 17 树的逻辑结构

18 §4-4 树 A B C D F G H I E L K J 图 - 17 树的逻辑结构 边:结点间的连线
孩子:结点的直接后继称为该结点的孩子。如B是A的孩子。 兄弟:同一双亲的孩子间称为兄弟。如E,F,G,H 堂兄弟:双亲在同一层的结点互为堂兄弟。如G与I,J互为堂兄弟。 深度:树的最大层次数量称为树的深度或高度。 祖先:从根到该结点所经的所有结点都是该结点的祖先。如结点L的祖先是A,D,J结点。 子孙:以该结点为根的子树中的任一结点都是该结点的子孙。如I,J,L是D的子孙,结点A的子孙则是树中其余的11个结点。 A B C D F G H I E L K J 1 2 3 4 树根 子树根 树叶 - 17 树的逻辑结构

19 §4-4 树 二、树的存储结构 用定长或不定长两种方式描述树的结点。 1. 定长方式
以最大度数结点的结构作为该树的所有结点的结构 ,每个结点都有 相同数量的子树域。 数据域 指向直接后继 1 的指针 2 n a) 定长方式的结点 A H C G b) 树结构 A B C D E F G H B E D F c)定长结点的链表结构

20 §4-4 树 2. 不定长方式 每个结点增加一个存放度数的域,结点长度随着度数不同而不同。 … a) 不定长结点 b) 不定长结点的链表结构
数据域 结点的度 指向直接后继 1的指针 2的指针 n的指针 a) 不定长结点 A 2 B 3 E 1 D C G H F b) 不定长结点的链表结构 不定长结点表示的树

21 §4-4 二叉树 一、二叉树的逻辑结构 1. 定义 二叉树是树结构的一种,但不同于一般树结构,即每个结点至多有两棵子树,并有左右之分,不能颠倒。二叉树可以是空的,一般树则至少有一个结点。 二叉树的深度和度的定义与树一致 。 基本形态 只有根结点 根的右子 树为空 根的左子 树为空 根的左右子 树都不空

22 二叉树的性质 第0层(根) 第1层 第2层 第3层(h=3) 1、若层次从0开始,则第i层最多有2 个结点

23 §4-4 二叉树 2. 几种特殊二叉树 (1)深度为k的有2k-1 个结点的二叉树称为满二叉树。
(2)深度为k,结点为n的二叉树,它从1到n的标号,如果与深度为k的满二叉树的标号一致,就称为顺序二叉树。 (3)结点的度数或者为零,或者为2的二叉树称为完全二叉树。 1 A 2 B 3 C 4 D 5 E F 6 G 7 (a) 1 A 2 B 3 C 4 D 5 E F 6 1 A 2 B 3 C 4 D 5 E (b) (c)

24 请判断以下哪个是完全二叉树? (1) (2) 5 (4) (5) (3) (6) (8) (7) (9) 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 (1) (2) 5 1 2 3 4 1 2 3 4 5 6 7 8 9 (4) (5) (3) 1 2 3 4 5 1 2 (6) (8) (7) (9) 1 1 (10)

25 §4-4 二叉树 二、二叉树的存储结构 对于满二叉树或顺序二叉树,存储结构可采用顺序存储形式 。
性质:如果i =1,此结点是根结点。如果i =k,k/2是结点i的双亲结点,2k是i的左孩子,2k+1是i的右孩子。 A B C D E F 1 2 3 4 1 A 2 B 3 C 4 D 5 E F 6 特点:这种存储结构的特点是节省空间,可以利用公式随机地访问每个结点和它的双亲及左右孩子,但不便删除或插入运算。 对于一般二叉树,通常采用多重链表结构。每个结点设三个域:数据域存放结点的值,左子树域存放左子树的地址,右子树域存放右子树的地址 。 图4-25 顺序二叉树的顺序存储

26 §4-4 二叉树 图4-26 二叉树的链式存储结构

27 §4-4 二叉树 二、二叉树的遍历 遍历二叉树是指按一定规律走遍二叉树的每个结点,每个结点访问一次且只访问一次。
根据根结点、左子树、右子树三者不同的先后次序,有6种遍历二叉树的方案。 根结点、左子树、右子树 左子树、根结点、右子树 左子树、右子树、根结点 根结点、右子树、左子树 右子树、根结点、左子树 右子树、左子树、根结点 前三种是按着先左后右的次序,属于常用的遍历方式。

28 §4-4 二叉树 1. 先根遍历 先根遍历的次序是:先访问根结点,再访问左子树,最后访问右子树。遍历结果如下:A,B,D,H,E,C,F,G,I。 图4-27 二叉树 A B D E F G C H I F A B D E G C H I 图4-28 先根遍历

29 §4-4 二叉树 2. 中根遍历 中根遍历的次序是:先访问左子树,再访问根结点,最后访问右子树。遍历结果如下:
D,H,B,E,A,F,C,I,G。 3. 后根遍历 后根遍历的次序是:先访问左子树,再访问右子树,最后访问根结点。遍历结果如下:H,D,E,B,F,I,G,C,A。 A B D E F G C H I A B D E F G C H I 4 - 29 中根遍历 4 - 30 后根遍历

30 例如:次序(V—根,L—左子树,R—右子树)
先序遍历 中序遍历 后序遍历 先右后左: VRL RVL RLV 先左后右: VLR LVR LRV bt A B C D E F G H I J VLR输出序列:A B D E G HI J C F LVR输出序列:D B G EI H J A C F LRV输出序列:D G I JH E B F C A

31 §4-4 二叉树 三、树的二叉树表示 用二叉树表示一般树可以节省存储空间,一般树转换为二叉树的规则是: 树的根结点为二叉树的根结点;
保留根结点的孩子(从左到右)第一个孩子作为二叉树的左子 树。 根结点的其余孩子作为该左子树的右子树(与左子树原属于兄 弟关系,现变为父子关系)。

32 §4-4 二叉树 例题: 1. 保留每个结点与最左孩子的边,去掉其余各边。 2. 连接同一双亲的所有兄弟。
3. 以树根结点为轴心,将整棵树顺时针旋转45即可得到转换 后的二叉树 。 A A E F G B C D H I A B C E F G D H I B C D E F G H I 图4-31 树转换为二叉树

33 §4-4 二叉树 三、二叉树应用举例 利用二叉树排序 排序就是对一组无序的数据递增或递减的规律重新排列。 用二叉树排序的过程分为两步:
先构造这棵二叉树 对这棵二叉树进行遍历 例如: 对一组数据(a1, a2, a3, ,…, ai-1, ai, ai+1, …, an)按递增的规律排序。

34 §4-4 二叉树 (1) 构造二叉树 每一个数据将对应二叉树的一个结点。 该结点在二叉树上的位置是这样确定的:
第一个数据元素a1作为这棵二叉树的根结点; 若 a2< a1,a2作为a1的左子树,否则作为a1的右子树; 第i个数据元素ai首先同这棵二叉树的根结点比较,若 ai< a1,则aI应位于a1的左边,再同a1的左子树结点比较,否则同a1的右子树结点比较,以此类推,直到找到该数据元素的位置为止。 建立数组(9, 36, 45, 13,26,7,12,48)的二叉排序树。

35 §4-4 二叉树 (2) 中根遍历二叉排序树 用中根遍历方式遍历该二叉树,图3-24所示的二叉树排序的结果是:
7, 9, 12, 13, 26, 36, 45, 48 图3-24 建立的二叉树


Download ppt "机械CAD中常用的数据结构."

Similar presentations


Ads by Google