[工学]计算机辅助机械设计
第2章 CAD中常用的数据结构 用计算机语言编写数值计算程序时,首先需要对变量进行数据类型说明,才能把数据提供给变量,由计算机对其进行存取和计算等操作。如C语言中的整型、浮点型等,数据类型实际上是语言系统提供的数据结构。 计算机不仅要处理数值计算问题,还要大量地处理包括图形、图像、文字、表格、声音等各种各样复杂的问题,这时提供给计算机的已不只是简单的、孤立的数据,而是存在某些关系的数据。 2.1 基本概念 数据 数据是描述客观事物的数字、字符及所有能输入到计算机中并可被计算机接受和处理的各种符号的集合。 数据元素 数据元素是数据的基本单位,是数据这个集合中的一个个体。 数据的逻辑结构和物理结构 数据的逻辑结构仅考虑数据之间的逻辑关系,数据结构一般指数据的逻辑结构。它独立于数据的存储介质。 数据的物理结构也称存储结构,是数据的逻辑结构在计算机中的映象。 计算机处理数据的最小单位叫做位(Bit),一个位表示一个二进制的数,若干位组合起来形成一个位串。 用一个位串表示一个数据元素,称这个位串为一个节点。节点是数据元素在计算机中的映象。 映象的方法不同,数据元素在计算机中的存储结构也不同。顺序映象得到顺序的存储结构,非顺序映象得到非顺序的存储结构。 4.数据类型 数据类型是程序设计语言确定变量所具有的种类。每种程序设计语言都提供一组基本的数据类型。如整型、实型、双精度型、复型、逻辑型、字符型数据类型等; 程序设计语言还可以将不同类型的数据组合成一个有机的整体,构造出新的数据类型用来实现各种复杂的数据结构的运算。 2.2.1线性表的逻辑结构 线性表是一种最常用、最简单的数据结构,是n(n>o)个数据元素的有限序列。可表达成下述逻辑结构: (a1,a2,a3,…,ai-1,ai,ai+1,…,an-1,an) 其中ai可以是一个数、是一个符号,还可以是一个线性表,甚至是更复杂的数据结构。 当n>o时,线性表中的每一个元素,除第一个及最后一个外,每个元素有且只有一个直接前趋,有且只有一个直接后继。 线性表中数据元素的数量定义为线性表的长度。 2.2.2线性表的顺序存储结构 线性表在计算机存储器中的存储形式,可以按照数据元素的逻辑顺序依次存放,即用一组连续的存储单元依次存放各个数据元素,这种存储形式称为顺序存储结构。 假定每个数据元素占用l个存储单元,第一个数据元素占用的第一个存储单元的地址为Loc(a1),则第t个数据元素的存储位置为: Loc(at)=Loc(a1)+(t-1)*l 线性表顺序存储结构的持点 (1)均匀性 每个数据元素所占存储空间的长度相同。 (2)有序性 各数据元素之间的存储顺序与逻辑顺序一致。 顺序存储情况下线性表的删除和插入 1.从线性表中删除一个数据元素 2.2.3线性表的链式存储结构 1.链式存储结构的待点 用一组任意的存储单元存放线性表的数据元素。由于这些存储单元可以是不连续的,为了表示这些元素的线性逻辑关系,除了存储元素本身的数据信息外,还要存储这个元素直接后继或直接前趋的存储位置。 这两种信息的存储映象,称为结点。结点包含两种域,存放数据元素本身的域称为数据域,存放直接后继或直接前趋的域称为指针域。 2.单向链表 (1)建立单向链表 (2)删除单向链表的一个元素 (3)向单向链表插入一个数据元素 3. 双向链表 双向链表的特点: 不但能方便地找到其直接后继,也能方便地找到其直接前趋 双向链表的建立、删除和插入运算 (1)双向链表的建立 (2) 双向链表的删除 (3)双向链表的插入 4. 循环链表 head 链表与线性表相比较,有以下特点: (1)删除或插入运算,数据元素不需要移动; (2)不需要事先分配存储空间,因此不存在空间浪费; (3)表的容量根据需要实行动态申请和动态释放,存储空间利用效率高; (4)按逻辑位置进行查找的速度慢。 因此,链表比较适合用于事先难以确定表的容量大小,并且增删操作频繁的场合。 2.3 栈和队列 1、栈 栈是一种特殊形式的表。表的一端是封闭的,另一端是开口的。 对表只能在开口的一端进行删除(出栈)和插入(进栈)运算,这一端称为栈顶,另一端称为栈底。 设TOP为栈顶指针,则: 2.队(或称队列) 队列是一个两端均开口的线性表,元素只能从表的一端插入,在表的另一端删除。 表中允许插入的一端称为“队尾”,允许删除的一端称为“队头”。 2.4 树和二叉树 树是一类重要的非线性数据结构,元素之间存在明显的层次关系。 几何形体的分解 2.4.1 树 树的逻辑结构 2.4.2 二叉树 1.二叉树的定义 . 二叉树的每