数据结构课件.ppt

数据结构课件

第3章 稀疏矩阵和广义表 主要学习内容 1. 稀疏矩阵的定义和三元组线性表表示 2. 稀疏矩阵的转置运算 3. 广义表的定义和表示,广义表长度和深度的计算 4. 广义表的链接存储结构中结点类型的定义 一般了解内容 1. 稀疏矩阵的顺序存储、带行指针向量的链接存储,它们中非零元素结点的结构 2. 稀疏矩阵的转置运算的算法描述 3. 分别求广义表长度和深度的递归算法 3.1 稀疏矩阵 3.2 广义表 3.1 稀疏矩阵 一、稀疏矩阵的定义 1、定义:是一种特殊矩阵,它的非零元素的个数远远小于零元素的个数 2、三元组线性表表示 包括元素的行号、列号和元素值三项 以行号为主序,列号为辅序 3、抽象数据类型(略) 二、稀疏矩阵的存储结构(了解) 1、顺序存储(了解) 非零元素的结构 struct Triple{ int row,col; ElemType val; }; 其中row为行号、col为列号、val为元素值 稀疏矩阵的顺序存储结构 struct SMatrix{ int m,n,t; Triple sm[MaxTerms+1]; }; 其中m为行数、n为列数、t为非零元素的个数,sm数组用来存储每个三元组元素,MaxTerms要大于等于t 2、链接存储(了解) 带行指针向量的链接存储(了解) 每个三元组结点 struct TripleNode{ int row,col; ElemType val; TripNode* next; }; 其中row为行号、col为列号、val为元素值 带行指针向量的链接存储类型 struct LMatrix{ int m,n,t; TripleNode* vector[MaxRows+1]; }; 其中m为行数、n为列数、t为非零元素的个数,vector数组用来存储每行单链表的表头指针,MaxRows要大于等于m 十字链接存储(了解) 每个三元组结点 struct TripleNode{ int row,col; ElemType val; CrossNode* down, * right; }; 十字链接存储类型 struct CLMatrix{ int m,n,t; CrossNode* rv[MaxRows+1]; CrossNode* cv[MaxColumns+1]; }; 三、稀疏矩阵的运算(不要求掌握算法) 1、在初始化一个稀疏矩阵的函数定义中,矩形形参说明为引用参数 2、稀疏矩阵的转置(要求掌握其方法,不要求掌握算法) 练习:P117:普通题T1 小结与训练: P116:单选题T1、2;填空题T1——6 3.2 广义表 一、定义 1、定义:是n(n=0)个元素的序列。在非空广义表中,元素分单元素和表元素两类 2、一般用小写字母表示单元素,用大写字母表示表元素 二、广义表的表示 1、线性表表示 例:D=(A(),B(e),C(a,(b,c,d))) 2、图形表示 圆圈表示表元素,方框表示单元素 例: D=(A(),B(e),C(a,(b,c,d)))的图形表示如下图 三、基本概念 1、长度: 指广义表中所含元素的个数 在图形表示中等于处于第二层的元素个数 2、深度: 指广义表中括号嵌套的最大次数 在图形表示中等于总层数减1,空表的深度取1 (以后所学的)“树”的深度等于总层数 3、表头 指第一个元素 4、表尾 指除第一个元素以外的所有元素构成的表 练习:求以下各广义表的长度、深度、表头、表尾:P106 A=() B=(e) C=(a,(b,c,d)) D=((),(e),(a,(b,c,d))) E=((a,(a,b),((a,b),c))) 结果: 长度 深度 表头 表尾 A 0 1 没有

文档评论(0)

1亿VIP精品文档

相关文档