数据结构讲义5

合集下载

数据结构第5章课件 中国石油大学(华东)

数据结构第5章课件 中国石油大学(华东)
leftChild data rightChild
二叉链表
leftChild
data rightChild
22
二叉树的链表表示(三叉链表)
每个结点增加一个指向双亲的指针parent,使 得查找双亲也很方便。
leftChild data parent rightChild
三叉链表
data
leftChild
27
BinTreeNode *LeftChild (BinTreeNode *current ) { return (current != NULL )? current->leftChild :NULL; } BinTreeNode *RightChild (BinTreeNode *current ) { return ( current!= NULL) ? current->rightChild : NULL; } int Height( ){return Height(root);} int Size( ){return Size(root);} BinTreeNode *GetRoot ( ) const { return root; } void preOrder( ) {preOrder(root);} //前序遍历 void inOrder( ) {inOrder(root);} //中序遍历 void postOrder( ) {postOrder(root);} //后序遍历 void levelOrder( ) ; // 不需要递归,所以直接对外接 口调用即可。层序遍历 28
b
f
c
d
g
6
e
a
b.嵌套集合表示法: b 根据树的集合定义,写出集合划分。 { a, {b,{e},{f}}, {c}, {d,{g}} } e c d

数据结构课件第5章-PPT文档资料

数据结构课件第5章-PPT文档资料
(a) 非紧缩方式; (b) 紧缩方式
第5章 串
5.2.2
和线性表的链式存储结构相类似,串的存储结构也可采用链 式存储结构,即用线性链表来存储串值。在这种存储结构下,存 储空间被分成一系列大小相同的结点,每个结点用data域存放字 符, link域存放指向下一个结点的指针。 这样, 一个串就可以用 一个线性链表来表示。
private { private declaration }
public { public declaration }
end;
第5章 串
这一段程序可看作一个字符串:“type private
Tstring = class
{private declaration } public {public declaration } end;
”, 其中“ ”表示换行符。Delphi的源程序编辑器提供了字符 串的查找与替换功能。 选择“Search”菜单中的“Replace”项, 在对话框中输入要查找字符串‘private’及替代串‘protected’, 如 图 5.1 所 示 , 则 执 行 命 令 后 以 上 程 序 中 的 关 键 字 ‘ private’ 被 ‘protected’替代。
第5章 串 串中任意个连续的字符组成的子序列称为该串的子串。包含 子串的串称为主串。通常称字符在序列中的序号为该字符在串中 的位置。子串在主串中的位置可以用子串的第一个字符在主串中 的位置来表示。
例如, 假设a、 b、 c、 d为如下的四个串:
a =‘Data’
b =‘Structure’
c =‘Data Structure’ d =‘Data Structure’
const maxlen = 允许的串最大长度;

数据结构讲义5

数据结构讲义5
稀疏矩阵的压缩存储
将稀疏矩阵中的每个非零元素表示为:
(行号,列号,非零元素值)——三元组(3-tuple, triple)
c 定义三元组: row(行) ol(列) item(值)
typedef struct {
int row, col; ElemType item }Triple;
26
//行号,列号 //非零元素值
第l1行 第l1+1行

al1l2

al1h2 a(l1+1)l2
a(l1+1)h2
……
aij

ah1 h2
Loc(al1l2)
(i -l1)×(h2 -l2+1)+(j -l2)个元素
Loc(aij)
Loc(aij)=Loc(al1l2)+((i-l1)×(h2-l2+1)+(j-l2))×c
按列优先存储的寻址方法与此类似。
数据结构
第五章 数组和广义表
• 5.1 数组的定义 • 5.2 数组的顺序表示和实现 • 5.3 矩阵的压缩存储 5.3.1 特殊矩阵 5.3.2 稀疏矩阵 • 5.4 广义表的定义 • 5.5 广义表的存储结构
1
数据结构
5.1 数组的定义
数组的定义
数组是由一组类型相同的数据元素构成的有序集 合,每个数据元素称为一个数组元素(简称为元 素),每个元素受n(n≥1)个线性关系的约束,每 个元素在n个线性关系中的序号i1、i2、…、in称为 该元素的下标,并称该数组为 n 维数组。
27
数据结构
5.3 矩阵的压缩存储—稀疏矩阵
稀疏矩阵的压缩存储——三元组顺序表 采用顺序存储结构存储三元组表
15 0 0 A= 0 91

数据结构讲义5

数据结构讲义5
若i≧j,则aij在下三角形中。aij之前的i行(从第0行到第i1行)一共有1+2+…+i=i(i+1)/2个元素,在第i行上aij之前有j个 元素(即ai0,ai1,ai2,…,aij-1),因此有:
k=i*(i+1)/2+j 0≦k<n(n+1)/2 若i<j,则aij是在上三角矩阵中。因为aij=aji,所以只要交 换上述对应关系式中的i和j即可得到: k=j*(j+1)/2+i 0≦ k<n(n+1)/2 即:
第五章数组和广义表51数组的定义52数组的顺序表示和实现53矩阵的压缩存储531特殊矩阵532稀疏矩阵54广义表的定义55广义表的存储结构数组和广义表可看成是一种特殊的线性表其特殊在于表中的数据元素本身也是一种线性表
数据结构
(Data Structure)
柳 青
Email: liuqing@
i(行)
2014-5-7
j(列)
v(值)
15
5.3 矩阵的压缩存储
例如,三元组表:((1,2,12),(1,3,9),(3,1,-
3),(3,6,14),(4,3,24),(5,2,18),(6,1,15),(6,4,-7))
加上(6,7)这一对行、列值便可作为下列矩阵M的另一种描 述。而由上述三元组表的不同表示方法可引出稀疏矩阵不
2014-5-7 17
5.3 矩阵的压缩存储
矩阵的转置运算
设有一个m×n的矩阵A,则它的转置B是一个n×m的矩阵 且:a[i][j]=b[j][i],1≦i≦m,1≦j≦n,
LOC(i1 , i2 ,, in ) LOC(0,0,,0)

上述讨论均假设数组各维的下界是0,更一般的二维数组

《数据结构》讲义

《数据结构》讲义

《数据结构》讲义什么是数据结构计算机解题步骤:建立数学模型——设计解此数学模型的算法——编制程序——进行测试调整——解答。

其中建立数学模型的实质:找出操作对象之间的关系。

例1. 图书馆书目检索——对应线性关系例2. 博奕树——对应树型关系例3. 交叉路口交通灯管理——对应图状结构。

数据结构是一门研究非数值计算的程序设计问题中(地计算机的操作对象及它们之间的关系和操作等的学科。

位)数据结构的基本概念和术语1. 数据(Data)数据是描述客观事物的数值、字符以及能输入机器且能被处理的各种符号集合。

换句话说,数据是对客观事物采用计算机能够识别、存储和处理的形式所进行的描述;是计算机加工处理的对象。

包括数值、字符、声音、图象等。

2. 数据元素(Data Element)数据元素是组成数据的基本单位, 是数据集合的个体,在计算机中通常作为一个逻辑整体进行考虑和处理。

一个数据元素可由若干个数据项组成(Data Item)。

3. 数据对象(Data Object)数据对象是性质相同的数据元素的集合,是数据的一个子集。

例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={′A′,′B′,…,′Z′},表1-1所示的学籍表也可看作一个数据对象。

由此可看出,不论数据元素集合是无限集(如整数集)、有限集(如字符集),还是由多个数据项组成的复合数据元素(如学籍表),只要性质相同,都是同一个数据对象。

综上1~3所述,再分析数据概念:4. 结构(Data Structure)数据元素相互之间的关系称为结构( Structure ),有四种基本结构。

(1) 集合结构:结构中的数据元素之间除了同属于一个集合的关系外,无任何其它关系。

(2) 线性结构:结构中的数据元素之间存在着一对一的线性关系。

(3) 树形结构:结构中的数据元素之间存在着一对多的层次关系。

(4) 图状结构或网状结构:结构中的数据元素之间存在着多对多的任意关系。

【2019年整理】数据结构课件第5章

【2019年整理】数据结构课件第5章

if (pos >maxlen) or (pos < 1) or (s.curlen = maxlen) then showmessage(’error’)
else begin {若插入位置超出串s的长度, } if pos > s.curlen then pos:= s.curlen; {则将其调整至串s的末尾} if s.curlen+t.curlen<maxlen then len:= s.curlen+t.curlen else len:=maxlen; {计算新串长}
为串的长度。 零个字符的串称为空串(null string),长度为零。
第5章 串
串中任意个连续的字符组成的子序列称为该串的子串。包含
子串的串称为主串。通常称字符在序列中的序号为该字符在串中 的位置。子串在主串中的位置可以用子串的第一个字符在主串中 的位置来表示。 例如, 假设a、 b、 c、 d为如下的四个串: a =‘Data’ c =‘Data Structure’ b =‘Structure’ d =‘Data Structure’
一个线性链表来表示。
由于串结构的特殊性,在串的链表结构中常常涉及到结点的
大小问题,即如何确定结点的data域存放字符的个数问题。 通常
情况下,结点的大小为4或1,如图5.3所示。当结点的大小为4时, 串所占用的结点中最后一个结点的 data域不一定全被串值占满,
这时通常补上“#”或其他的非串值字符。
第5章 串
第5章 串
5.1 串的应用实例及概念
5.2 串的存储结构 5.3 串的基本操作 5.4 串的ADT定义及类定义 5.5 实习五:串的演示程序
第5章 串
5.1 串的应用实例及概念

数据结构专项精讲课程讲义-第三部分-第5章 串

数据结构专项精讲课程讲义-第三部分-第5章 串

1.下面关于串的的叙述中,哪一个是不正确的?( E )A.串是字符的有限序列B.空串是由空格构成的串C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储2 若串S1=‘ABCDEFG’, S2=‘9898’ ,S3=‘###’,S4=‘012345’,执行concat(replace (S1,substr (S1,length(S2), length(S3)), S3),substr(S4,index(S2,‘8’),length(S2)))其结果为(E )A.ABC###G0123 B.ABCD###2345 C.ABC###G2345D.ABC###2345 E.ABC###G1234 F.ABCD###1234G.ABC###012343.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为(C)。

A.求子串B.联接C.匹配D.求串长4.已知串S=‘aaab’,其Next数组值为(A )。

A.0123 B.1123 C.1231 D.12115.串‘ababaaababaa’的next数组为(C )。

A.012345678999 B.012121111212C.011234223456 D.01230123223456.字符串‘ababaabab’的nextval 为(A)。

A.(0,1,0,1,04,1,0,1) B.(0,1,0,1,0,2,1,0,1)C.(0,1,0,1,0,0,0,1,1) D.(0,1,0,1,0,1,0,1,1 )7.模式串t=‘abcaabbcabcaabdab’,该模式串的next数组的值为(D ), nextval数组的值(F)。

A.0 1 1 1 2 2 1 1 1 2 3 4 5 6 7 1 2B.0 1 1 1 2 1 2 1 1 2 3 4 5 6 1 1 2C.0 1 1 1 0 0 1 3 1 0 1 1 0 0 7 0 1D.0 1 1 1 2 2 3 1 1 2 3 4 5 6 7 1 2E.0 1 1 0 0 1 1 1 0 1 1 0 0 1 7 0 1F.0 1 1 0 2 1 3 1 0 1 1 0 2 1 7 0 18.若串S=‘software’,其子串的数目是(B )。

《数据结构》讲义

《数据结构》讲义

《数据结构》讲义数据结构是计算机科学和编程中非常重要的概念之一。

它是指在计算机中存储和组织数据的方法和原则。

一、介绍数据结构在计算机科学领域中具有重要的地位。

它涉及到如何存储和组织数据,以便于对其进行检索和操作。

数据结构可以分为两种基本类型:线性结构和非线性结构。

线性结构包括数组、链表、栈和队列,而非线性结构包括树和图。

二、线性结构1. 数组数组是一种用来存储多个相同类型的元素的数据结构。

它具有固定长度和连续的内存空间。

数组可以通过索引访问元素,可以快速地插入和删除元素,但是其长度固定不变。

2. 链表链表是一种由节点组成的数据结构,每个节点都包含一个值和指向下一个节点的指针。

链表可以在任意位置插入和删除节点,但是访问节点的时间复杂度较高。

3. 栈栈是一种具有特定操作限制的线性结构。

它遵循“先进后出”的原则,即最后插入的元素最先被访问和删除。

栈可以用来实现递归、回溯和表达式求值等功能。

4. 队列队列也是一种具有特定操作限制的线性结构。

它遵循“先进先出”的原则,即最先插入的元素最先被访问和删除。

队列可以用来实现任务调度、缓冲区等功能。

三、非线性结构1. 树树是一种由节点组成的非线性结构。

它包含一个根节点和多个子节点,每个节点可以有任意数量的子节点。

树可以用来表示层次关系、排序和搜索等功能。

2. 图图是一种由节点和边组成的非线性结构。

节点表示实体,边表示节点之间的关系。

图可以用来表示网络、关系和路径等信息。

四、常用数据结构在实际编程中,还有一些常用的数据结构:1. 哈希表:通过哈希函数将元素映射到不同的位置,实现快速的查找和插入操作。

2. 堆:一种特殊的树结构,可以快速找到最大或最小的元素。

3. 二叉搜索树:一种有序的二叉树,可以高效地进行搜索和插入操作。

五、应用场景数据结构在实际开发中有广泛的应用场景,包括但不限于以下几个方面:1. 数据库系统中的索引结构:为了快速检索数据,数据库系统使用各种数据结构来组织数据。

数据结构考研讲义 第五章 图

数据结构考研讲义	第五章	图

第四章图4.1图的概念1.图的定义图是由一个顶点集V和一个弧集R构成的数据结构。

2.图的重要术语;(1)无向图:在一个图中,如果任意两个顶点构成的偶对(v,w)∈E是无序的,即顶点之间的连线是没有方向的,则称该图为无向图。

(2)有向图:在一个图中,如果任意两个顶点构成的偶对(v,w)∈E是有序的,即顶点之间的连线是有方向的,则称该图为有向图。

(3)无向完全图:在一个无向图中,如果任意两顶点都有一条直接边相连接,则称该图为无向完全图。

在一个含有n个顶点的无向完全图中,有n(n-1)/2条边。

(4)有向完全图:在一个有向图中,如果任意两顶点之间都有方向互为相反的两条弧相连接,则称该图为有向完全图。

在一个含有n个顶点的有向完全图中,有n(n-1)条边。

(5)稠密图、稀疏图:若一个图接近完全图,称为稠密图;称边数很少(e<nlogn)的图为稀疏图。

(6)顶点的度、入度、出度:顶点的度(degree)是指依附于某顶点v的边数,通常记为TD(v)。

在有向图中,要区别顶点的入度与出度的概念。

顶点v的入度是指以顶点为终点的弧的数目,记为ID(v);顶点v出度是指以顶点v为始点的弧的数目,记为OD(v)。

TD(v)=ID(v)+OD(v)。

(7)边的权、网图:与边有关的数据信息称为权(weight)。

在实际应用中,权值可以有某种含义。

边上带权的图称为网图或网络(network)。

如果边是有方向的带权图,则就是一个有向网图。

(8)路径、路径长度:顶点vp到顶点vq之间的路径(path)是指顶点序列vp,vi1,vi2,…,vim,vq.。

其中,(vp,vi1),(vi1,vi2),…,(vim,.vq)分别为图中的边。

路径上边的数目称为路径长度。

(9)简单路径、简单回路:序列中顶点不重复出现的路径称为简单路径。

除第一个顶点与最后一个顶点之外,其他顶点不重复出现的回路称为简单回路,或者简单环。

(10)子图:对于图G=(V,E),G’=(V’,E’),若存在V’是V的子集,E’是E的子集,则称图G’是G的一个子图。

数据结构讲义第5章-数组和广义表

数据结构讲义第5章-数组和广义表
对于一个矩阵结构,显然用一个二维数组来表示是非常 恰当的.但有时会遇到这样一类矩阵:在这种矩阵中有 许多值相同的元素或者是零元素,为了节省存储空间, 可以对这类矩阵进行压缩存储. 压缩存储是:为多个值相同的元素只分配一个存储空间: 对零元素不分配存储空间. 特殊矩阵:值相同的元素或者零元素在矩阵中的分布有 一定规律,则称此类矩阵为特殊矩阵,反之,称为稀疏 矩阵.
5.4 广义表
5)若广义表不空,则可分成表头和表尾,反之,一对表头和表尾 可唯一确定广义表 对非空广义表:称第一个元素为L的表头,其余元素组成的表称 为LS的表尾; B = (a,(b,c,d)) 表头:a 表尾 ((b,c,d)) 即 HEAD(B)=a, C = (e) D = (A,B,C,f ) 表头:e 表尾 ( ) TAIL(B)=((b,c,d)),
5.4 广义表
4)下面是一些广义表的例子; A = ( ) 空表,表长为0; B = (a,(b,c,d)) B的表长为2,两个元素分别为 a 和子表(b,c,d); C = (e) C中只有一个元素e,表长为1; D = (A,B,C,f ) D 的表长为4,它的前三个元素 A B C 广义表, 4 A,B,C , 第四个是单元素; E=( a ,E ) 递归表.
以二维数组为例:二维数组中的每个元素都受两个线性关 系的约束即行关系和列关系,在每个关系中,每个元素aij 都有且仅有一个直接前趋,都有且仅有一个直接后继. 在行关系中 aij直接前趋是 aij直接后继是 在列关系中 aij直接前趋是 aij直接后继是
a00 a01 a10 a11
a0 n-1 a1 n-1
a11 a21 ┇ a12 a22 ┇ ai2 ┇ … amj … amn … aij … ain … … a1j a2j … … a1n a2n β1 β2 ┇ βi ┇ βm

数据结构第五讲数组

数据结构第五讲数组

数据结构
12
矩阵的压缩存储
矩阵的压缩存储策略: 为多个值相同的元素只分配一个存储空间;或
者对零元素不分配空间。
2020/1/6
数据结构
13
特殊矩阵: 指有许多值相同的元素或有许多零元素、且
值相同的元素或零元素的分布有一定规律的矩阵。 例子:
对称矩阵、三角矩阵和三对角矩阵等都属于 特殊矩阵。
2020/1/6
= LOC(0,0, …,0)+((b1×b2× ┅×bn-1)×i0
+( b2×b3× ┅×bn-1)×i1+ … bn-1×in-2+ in-1) )× L
= LOC(0,0, … ,0)+
n-2
( ik
n-1
bj in-1) L
k=0 j=k+1
2020/1/6
数据结构
8
要点归纳
2020/1/6
数据结构
3
数据结构中数组与高级程序设计语言中的数组区别:
高级程序设计语言中的数组用一组连 续有存储单元来表示表示,是数组的顺序 存储结构。
数组也可以用其它的存储表示。
其实也很少见
2020/1/6
数据结构
4
讨论:数组与线性表的区别与联系:
(1)数组是线性表的一个推广,而线性表是数组的一种特殊 情况 。
} } return(1); }
算法的执行时间为O(n×t)当非零元素个数t的量级为
m×n时,其执行时间便成为O(m×n2)
2020/1/6
数据结构
24
(2) 按照a.data中三元组的次序进行转置。转置后的元素不连 续存放,直接放到b.data中最终的位置上。

数据结构C语言版第五章课件

数据结构C语言版第五章课件
第5章 数组和广义表
5.1 5.2 5.3 特殊矩阵的压缩存储 5.4 广义表
PPT学习交流
1
1. 数组的定义和运算
数组是n(n>1)个相同类型数据元素a0,a1,…,an-1构成 的有限序列,且该有限序列存储在一块地址连续的内
存单元中。
数组的定义类似于采用顺序存储结构的线性表,是
线性表在维数上的扩张,也就是线性表中的元素又
LOC(ai)=LOC(a0)+i*L (0≤i≤n-1)
二维数组,由于计算机的存储结构是线性的,如何用 线性的存储结构存放二维数组元素就有一个行/列次 序排放问题。
PPT学习交流
4
二维数组通常可以描述为两种形式 :
以行序为主序: PASCAL、C
可以看成 A = ( 0, 1, . . ., m-1 ) 其中 i 是一个行向量形式的线性表,0≤i≤m-1
应。 (4)数组是一种随机存储结构。可随机存取数组中的
任意数据元素。
数组的基本操作
(1)取值 Value(A,&e, index1,..., indexn)
(2)赋值Assign(&A, e, index1,…, indexn)
PPT学习交流
3
2.数组的存储结构
一维数组中, LOC(a0)确定, 每个数据元素占用L个 存储单元,则任一数据元素ai的存储地址LOC(ai)就可 由以下公式求出:
j j
a12
a13 2
= =
a11 a21 a22 a31
ann
k= 0 1 2 3
PPT学习交流
n(n+1) 2
-1
12
下三角矩阵的压缩存储 B[n(n+1)/2+1]
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6
A=
A=
数据结构
5.1 数组的定义
数组的基本操作
⑴ 存取:给定一组下标,读出对应的数组元素; ⑵ 修改:给定一组下标,存储或修改与其相对应的 数组元素。 存取和修改操作本质上只对应一种操作——寻址
数组应该采用何种方式存储?
数组没有插入和删除操作,所以,不用预留空间, 适合采用顺序存储。
7
数据结构
数组的特点
元素本身可以具有某种结构,属于同一数据类型; 数组是一个具有固定格式和数量的数据集合。
2
数据结构
5.1 数组的定义
• 数组的抽象数据类型
数据结构
5.1 数组的定义
数组示例
a11 a21 … am1 a12 a22 … am2 … … … … a1n a2n … amn
A=
例如,元素a22受两个线性关系的约束,在行上有
a00 a11 a22 a33 a44
a01 a12 a23 a34 0
映射到二维数组B中,映射关系
t=i s=j-i+1
23
数据结构
5.3 矩阵的压缩存储—特殊矩阵
对角矩阵的压缩存储
a00 a01 A=
0 0 0
a10 a11 a12 0 0 0 a21 a22 a23 0 a32 a33 a34 0 0 0 0 0 a43 a44
27
数据结构
5.3 矩阵的压缩存储—稀疏矩阵
稀疏矩阵的压缩存储——三元组顺序表 采用顺序存储结构存储三元组表
15 0 0 A= 0 91
0 11 0 0 0
0 3 0 0 0
22 0 6 0 0
0 -15 0 0 0 0 0 0 0 0
三元组顺序表是否 需要预留存储空间? 稀疏矩阵的修改操作
三元组顺序表的插入/删除操作
按行优先存储的寻址
l2 l1
aij
本行中aij前面的元素个数 每行元素个数
h2
整 行 数
aij前面的元素个数
h1
(a) 二维数组
=阴影部分的面积 =整行数×每行元素个数+本行中 aij前面的元素个数 =(i -l1)×(h2 -l2+1)+(j -l2)
10
数据结构
5.2 数组的表示与实现
按行优先存储的寻址
0 0 1 2 3 3 5 空 闲
0 15 4 91 1 11 1 3 0 22 2 6 0 -15 空 空 闲 闲
6(矩阵行数) 5(矩阵列数) 7(非零元个数)
31
数据结构
5.3 矩阵的压缩存储—稀疏矩阵
数据结构
数据结构
5.3 矩阵的压缩存储
特殊矩阵和稀疏矩阵
特殊矩阵:矩阵中很多值相同的元素并且它们的分布 有一定的规律。
稀疏矩阵:矩阵中有很多零元素或值相同的元素,其 分布没有规律。 压缩存储的基本思想是: ⑴ 为多个值相同的元素只分配一个存储空间;
⑵ 对零元素不分配存储空间。
15
数据结构
5.3 矩阵的压缩存储—特殊矩阵
15 0 0 0 15 0 11 3 3 22 A= 0 0 0 5 -15 0 0 0 91 0 0 1 11 2 3 3 6 0 91 15 0 空 空 0 11 闲 闲 3 0 0 0
0 1 2 3 4 5 6
Max -1
7(非零元个数)
0 0 0 6 0 0
0 91 0 0 0 0 0 0 0 0 0 0
每行元素个数
1 2 … i aij
… 第i-1行
i n-1
aij
aij在一维数组中的序号 =阴影部分的面积 = i×(i+1)/2+ j+1 ∵一维数组下标从0开始 ∴aij在一维数组中的下标 k= i×(i+1)/2+ j
aij在本行中的序号
(a) 下三角矩阵
(b) 存储说明
(c) 计算方法
17
数据结构
5.2 数组的表示与实现
数组的存储结构与寻址——二维数组
二维数组
二维结构 内 存
一维结构
常用的映射方法有两种: 按行优先:先行后列,先存储行号较小的元素, 行号相同者先存储列号较小的元素。 按列优先:先列后行,先存储列号较小的元素, 列号相同者先存储行号较小的元素。
9
数据结构
5.2 数组的表示与实现
(c) 压缩到一维数组中
24
数据结构
5.3 矩阵的压缩存储—稀疏矩阵
稀疏矩阵的压缩存储
15 0 0 0 9 0 11 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0
A=
如何只存储非零元素?
注意:稀疏矩阵中的非零元素的分布没有规律。
25
数据结构
5.3 矩阵的压缩存储—稀疏矩阵
数据结构
5.3 矩阵的压缩存储—稀疏矩阵
稀疏矩阵的压缩存储 三元组表:将稀疏矩阵的非零元素对应的三元组所 构成的集合,按行优先的顺序排列成一个线性表。
A=
15 0 0 0 9
0 11 0 0 0
0 0 0 0 0
0 0 6 0 0
0 0 0 0 0
0 0 0 0 0
三元组表=( (0,0,15), (1,1,11), (2,3,6), (4,0,9) ) 如何存储三元组表?
第l1行 第l1+1行

al1l2

al1h2 a(l1+1)l2
a(l1+1)h2
……
aij

ah1 h2
Loc(al1l2)
(i -l1)×(h2 -l2+1)+(j -l2)个元素
Loc(aij)
Loc(aij)=Loc(al1l2)+((i-l1)×(h2-l2+1)+(j-l2))×c
按列优先存储的寻址方法与此类似。
5.3 矩阵的压缩存储—特殊矩阵
对称矩阵的压缩存储
0 1 2 3 4 5
k … aij … a n-10 an-11 …
n(n+1)/2-1
a00
第0行
a10
a11
a20
a21
第2行
a22
an-1n-1
第1行
第n-1行
对于下三角中的元素aij(i≥j),在数组SA中的下标k 与i、j的关系为:k=i×(i+1)/2+j 。 上三角中的元素aij(i<j),因为aij=aji,则访问和 它对应的元素aji即可,即:k=j×(j+1)/2+i 。
18
数据结构
5.3 矩阵的压缩存储—特殊矩阵
2 特殊矩阵的压缩存储——三角矩阵 3 6 4 7 8 c c 2 c 8 1 4 6 2 9 c c c 0 5 c c c c 7
3 c c c c
(b)
4 8 1 2 9 4 c 1 5 c c 0 c c c
上三角矩阵
0 6 7 8 7
(a) 下三角矩阵
28
数据结构
5.3 矩阵的压缩存储—稀疏矩阵
稀疏矩阵的压缩存储——三元组顺序表 采用顺序存储结构存储三元组表
0 1 2 3 4 5 6
Max-1
15 0 0 A= 0 91
0 11 0 0 0
0 3 0 0 0
22 0 6 0 0
0 -15 0 0 0 0 0 0 0 0
row col item 0 0 15 0 3 22 0 5 -15 1 1 11 1 2 3 2 3 6 4 0 91 空 空 空 闲 闲 闲 7(非零元个数) 5(矩阵的行数) 6(矩阵的列数)
数据结构
5.3 矩阵的压缩存储—特殊矩阵
3 特殊矩阵的压缩存储——对角矩阵 对角矩阵:所有非零元素都集中在以主对角线为中心 的带状区域中,除了主对角线和它的上下方若干条对 角线的元素外,所有其他元素都为零。
a00 a01 0
A=
0 0
0 0
a10 a11 a12 0 0 0 a21 a22 0 0 a32 0
5.2 数组的表示与实现
数组的存储结构与寻址——一维数组
设一维数组的下标的范围为闭区间[l,h],每个 数组元素占用 c 个存储单元,则其任一元素 ai 的 存储地址可由下式确定:
Loc(ai)=Loc(al)+(i-l)×c
c al
Loc(al)
al+1
……
Hale Waihona Puke ai-1ai……ah
Loc(ai)
8
数据结构
11
数据结构
5.2 数组的表示与实现
数组的存储结构与寻址——多维数组
n(n>2)维 数组一般也采用 按行优先和按列 优先两种存储方 法。请自行推导 任一元素存储地 址的计算方法。 Loc(aijk ) = Loc(a000) +( i×m2×m3 + j×m3 + k )×c
12
数据结构
• 数组的4个基本操作
一个行前驱a21和一个行后继a23,在列上有一个列 前驱a12和和一个列后继a32。
4
数据结构
5.1 数组的定义
数组——线性表的推广
a11 a21 … am1 a12 a22 … am2 … … … … a1n a2n … amn
A=(A1,A2,……,An)
其中: Ai=(a1i,a2i,……,ami) (1≤i≤n)
如何压缩存储?
只存储上三角(或下三角)部分的元素(含 对角线)。
19
数据结构
5.3 矩阵的压缩存储—特殊矩阵
下三角矩阵的压缩存储 存储
0 1
下三角元素
对角线上方的常数——只存一个
2 3 4 5
k
n(n+1)/2
a00
第0行
a10
相关文档
最新文档