当前位置:
文档之家› 数据结构5数组和广义表PPT课件
数据结构5数组和广义表PPT课件
a00 a10 a11 a20 …… an-1 0 … an-1,n-1
K=0 1 2 3
… … … n(n+1)/2-1
在这个下三角矩阵中,第i行恰有i+1个元素,元素
总数为:n(n+1)/2
因此,我们可以将这些元素存放在一个向量 sa[0..n(n+1)/2-1]中。为了便于访问对称矩阵A中的元
A: i 1 1 3 3 4 5 6 6
jv 2 12 39 1 -3 6 14 3 24 2 18 1 15 4 -7
例:矩阵的转置
0 12 9 0 0 0 0 0 0 0 000 0
M= -3 0 0 0 0 14 0
0 0 24 0 0 0 0 0 18 0 0 0 0 0 15 0 0 –7 0 0 0 6*7
a00 a01 a10 a11 a12 a21 a22 a23 …. ….. …. an-2 n-3 an-2 n-2 an-2 n-1 an-1 n-2 an-1 n-1
需存储的元素个数为3n-2。
a00 a01 a10 a11 a12 a21 … … a n-1 n-2 a n-1 n-1
K=0 1 2 3 4 5 … … 3n-4 3n-3
ቤተ መጻሕፍቲ ባይዱ
一、三元组顺序表
#define maxsize 100 typedef int datatype;
typedef struct{ int i,j; //第i行第j列 datatype v; // v:非0值
}triple; typedef struct{
triple data[maxsize]; int m,n,t; //m行、n列、t个非0元 }tripletable;
9 a[2][1]
10 a[2][2]
11 a[2][3]
a[0] a[1] a[2]
例1:二维数组Amn按“行优先顺序”存储在内存 中, 且每个元素占用d个存储单元。 求元素aij的存储地址。 LOC(aij)=LOC(a11)+[(i-1)*n+j-1]*d
例2:三维数组Amnp按“行优先顺序”存储在内存 中, 且每个元素占用d个存储单元。 求元素aijk的存储地址。 LOC(aijk)=LOC(a111)+[(i-1)*n*p+( j-1)*p +(k-1)]*d
可以将数组A看成长度为n的线性表C
C = (c1, c2 , … c n)
其中,每个元素cj是长度为m的线性表, 既数组A中的 第j列。
cj= a1j, a2j , … amj
5.1 数组的定义
Amn=
a11 a12 … a1n a21 a22 … a2n … … ……
am1 am2 … amn
数组只有两个操作:
a[2] a2[210]71[60] a2[10291][81] a2[20212][02] a2[20232][23]
每个元素a[i]由包含4个元素 的一维数组组成
0 a[0][0] 1 a[0][1] 2 a[0][2]
3 a[0][3] 4 a[1][0] 5 a[1][1] 6 a[1][2] 7 a[1][3] 8 a[2][0]
5.3.2 稀疏矩阵
设矩阵A中有s个非零元素,若s远远小于 矩阵元素的总数(即s<<m×n),则 称A为稀疏矩阵。
0 12 9 0 0 0 0 0 0 0 000 0 -3 0 0 0 0 14 0 M= 0 0 24 0 0 0 0 0 18 0 0 0 0 0 15 0 0 –7 0 0 0 m*n
0 0 -3 0 0 15
12 0 0 0 18 0
N=
9 0 0 24 0 0 0 0 0 0 0 -7
000 0 00
0 0 14 0 0 0
0 0 0 0 0 0 7*6
例:矩阵的转置
方法一:
(1)将三元组表A中每一个元素的行、列互换三元组表B中 (2)对三元组表B,依行进行排序。
5 数组和广义表
5.1 数组的定义 5.2 数组的顺序表示和实现 5.3 矩阵的压缩存储
5.3.1 特殊矩阵 5.3.2 稀疏矩阵 5.4 广义表的定义 5.5 广义表的存储结构
5.1 数组的定义
Amn=
a11 a12 … a1n a21 a22 … a2n … … ……
am1 am2 … amn
(1)存取元素 (2)修改元素值
C描述: datatype a[m][n]
5.2 数组的顺序表示和实现
数组有两种顺序存储方式:
⑴行优先顺序 ——将数组元素按行排列。 a11,a12,…,a1n,a21,a22,…a2n,……,am1,am2,…,amn 在C语言中,数组就是按行优先顺序存储的。
⑵列优先顺序 ——将数组元素按列向量排列。 a11,a21,…,am1,a12,a22,…am2,……,a1n,a2n,…,amn
❖二维数组理解
二维数组a是由3个元素组成
例 int a[3][4];
行名
a[0] a2[00]0[00] a2[000][21] a2[000][42] a2[000]0[36]
1
3
5
7
a[1] a[210]0[08] a2[10]1[01] a2[10]1[22] a2[01]1[43] 9 11 13 15
素,我们必须在aij和sak之间找一个对应关系。
k= i(i+1)/2+j 当i>=j j( j+1)/2+i 当i<j
二、对角矩阵
对角矩阵中,所有的非零元素集中在以主对角线为 了相k中邻= 心两的侧的带状若区干域条对中角,即线除上的了元主对素角之外线,和其主对余元角素线 皆为零。下图给出了一个三对角矩阵,
5.3 矩阵的压缩存储
5.3.1特殊矩阵
一、对称矩阵 在一个n阶方阵A中,若元素满足下述性质: aij=aji 0≦i,j≦n-1
则称A为对称矩阵。
15137 50800 18926 30251 70613
a00 a10 a 11 a20 a21 a22 ………………..
an-1 0 a n-1 1 a n-1 2 …a n-1 n-1
可以将数组A看成长度为m的线性表B
B = (b1, b2 , … bm )
其中,每个元素bi是长度为n的线性表, 既数组A中的 第i行。
bi= ai1 , ai2 , … ain
5.1 数组的定义
Amn=
a11 a12 … a1n a21 a22 … a2n … … ……
am1 am2 … amn