数据结构和数据库
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、绪论
(1)数据:数据 (Data) 是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被程序处理的符号的总称。数据是计算机程序加工的“ 原料” 。例如,一个利用数值分析方法解代数方程的程序,其处理的数据是整数和实数;一个编译程序或文字处理器 ( 比如 Word) 处理的数据是字符串。因此,对计算机科学而言,数据的含义极为广泛,如图象、声音等都可以通过编码而归之于数据的范畴。
(2)数据元素:相对独立的数据单位。对于一个文件来说,每个记录就是它的数据元素;对于一个字符串来说,每个字符就是它的数据元素;对于一个数组来说,每一个数值就是它的数据元素。
数据对象 (Data Object) :数据对象 (Data Object) 是性质相同的数据元素的集合,是数据的一个子集。例如,整数数据对象的集合可表示为N ={0 ,±1 ,±2…….} ,字母字符数据对象的集合可表示为C={‘A','B',…'Z'} 。
(3)数据结构 (Data Structure) :是指数据元素之间存在着的一种或多种特定的关系。我们根据数据元素之间关系的不同特性,将数据结构划分为四种类型:
●集合:结构中的数据元素之间除了“同属于一个集合”的关系外,别无其它关系;
●线性结构:结构中的数据元素之间存在一对一的关系,即相邻数据元素之间具有“前驱”和“后继”的关系;
●树形结构:结构中数据元素之间存在一对多的关系;
●图状结构或网状结构:结构中数据元素间存在多对多的关系。由于“集合”是数据元素之间关系极为松散的一种
结构,因此也可以用其它结构来表示它。
(4)存储结构 (Storge Structure) : 数据结构在计算机中的表示 ( 或称映象 ) 称为数据的存储结构,又称为物理结构。
顺序存储结构:用数据元素在存储器中的相对位置来表示数据元素之间的逻辑关系。
链式存储结构:在每一个数据元素中增加一个存放地址的指针,用此指针来表示数据元素之间的逻辑关系。
二、线性表和广义表
1、线性表:线性表是具有相同属性的数据元素组成的一个有限序列。
线形表的存储结构:有顺序存储结构和链接存储结构两种。
(1)顺序存储结构:采用数组来来存储线性表,为保持线性表的线性关系,在数组中元素连续、顺序地存放。
用 C++ 类表示的线性表顺序存储结构:
struct List {
ElemType * data; //存放元素的数组
int size; //顺序表当前已存表项的最后位置(线性表的长度)
};
(2)线性表的链接存储:
线性表用单链表作为存储结构的类型定义 :
struct LNode {
ElemType data; //数据域
LNode* next; //后继指针
};
2、广义表:广义表是由 n(n>=0) 个元素组成的有限序列。表的元素或者是某种类型的对象 ( 称为单元素 ) ,也可以是一个广义表 ( 称为表元素 ) 。广义表是一种递归数据结构。表示为:
LS =(?0,?1,?2,…,?n-1)
为了区分单元素和表元素,一般表元素用大写表示,单元素用小写表示。
表头:广义表第一个元素的值。可能是单元素也可能是表。
表尾:广义表除第一个元素外由其它元素组成的表。
广义表结构的特点:有次序性、长度、有深度、可递归、可共享。
struct GLNode {
bool tag; // 标志域
union{
ElcmType data // 数据域
GLNode* sublist; // 子表的表头指针域
};
GLNode* next; // 指向后继结点的指针域
};
关于联合变量union: 联合变量表示其中的几种变量公用一个内存区域,在不同的时间可以存储不同类型的数据,编译器在编译时自动生成一个变量,其长度为联合中长度最大的变量。在这里广义列表中某个节点如果是单元素,那么Union变量就表现为ElcmType,如果是广义表,那么就表现为GLNode。
三、稀疏矩阵
1、矩阵:( Matrix )是一个具有 m 行× n 列的数表,共有m × n 个数。
稀疏矩阵:是矩阵中的一种特殊情况,它的非零元素的个数远远小于零元素的个数。如图 3-1 就是一个3×5 的稀疏矩阵。
三元组:对于矩阵中的每个非零元素,可用它的行号、列号以及元素值这个三元组( i,j,a ij )来表示。
稀疏矩阵的三元组表示:把每个非零元素的三元组按照行号为主序(即为主关键字)、列号为辅序(即为次关键字)进行排列,就构成了一个表示稀疏矩阵的三元组线性表。
2、稀疏矩阵的的存储结构:
(1)顺序存储:就是对其相应的三元组线形表进行顺序存储。这种存储方式的优点是利用数组存储,操作灵活。但由于数组自身的问题,存储数据的数组的长度 MaxTerms 取一个大于非零元素个数的值,可能会浪费部分存储空间,另外插入和删除非零元素需要移动大量元素。示意图如图 3-2 。
①用于存储每个元素的结构类型(三元组)
struct Triple {
int row,col; // 行、列
ElemType val; // 元素值
};
②用于存储稀疏矩阵的结构类型(三元组顺序存储)
struct Smatrix {
int m,n,t;
// 稀疏矩阵的行、列和非零元素个数
Triple sm[MaxTerms+1];
// 存储三元组的数组 , MaxTerms 大于等于非零元素个数
}
(2)带行指针向量的链接存储:在这种连接存储中,需要把具有相同行号的三元组节点按照列号从小到大的顺序连接成一个单链表。这种存储方式可以节约存储空间,对于非零元素的增加和删除都很方便,缺点是不利于按列操作。