数据结构 第五章 数组和广义表

目录

5.1 数组

一维数组

二维数组

三维数组

n维数组

特殊矩阵的压缩存储

1.  对称矩阵

2.  三角矩阵

3. 对角矩阵(带状矩阵)

 稀疏矩阵

5.2 广义表

广义表的基本运算


5.1 数组

本节所讨论的数组与高级语言中的数组区别:

 高级语言中的数组是顺序结构

 而本章的数组既可以是顺序的,也可以是链式结构,用户可根据需要选择。

数组的抽象数据类型

ADT Array{
    数据对象
    数据关系
    基本操作
    (1) InitArray (&A,n,bound1,…,boundn)  //构造数组A
    (2) DestroyArray (&A)                    // 销毁数组A
    (3) Value(A,&e,index1,…,indexn)  //取数组元素值
    (4) Assign (A,&e,index1,…,indexn) //给数组元素赋值


}

一维数组

一维数组

 

二维数组

行序优先表示

设数组开始存放位置 LOC( 0, 0 ) = a LOC ( j, k ) = aj * m + k

三维数组

a[m1][m2] [m3] 各维元素个数为  m1, m2, m3

 下标为 i1, i2, i3的数组元素的存储位置:   LOC ( i1, i2, i3 ) = a + i1* m2 * m3 + i2* m3 + i3

n维数组

各维元素个数为  m1, m2, m3, …, mn,下标为 i1, i2, i3, …, in 的数组元素的存储位置:

特殊矩阵的压缩存储

1. 什么是压缩存储?

若多个数据元素的值都相同,则只分配一个元素值的存储空间,且零元素不占存储空间。

2. 什么样的矩阵能够压缩?      

一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。

3. 什么叫稀疏矩阵?

矩阵中非零元素的个数较少(一般小于5%

1.  对称矩阵

[特点] n*n的矩阵a中,满足如下性质:

aij=aji  (1 <= i, j <= n)

[存储方法] 只存储下(或者上)三角(包括主对角线)的数据元素。共占用n(n+1)/2个元素空间。

对称矩阵

2.  三角矩阵

        [特点] 对角线以下(或者以上)的数据元素(不包括对角线)全部为常数c。

        [存储方法] 重复元素c共享一个元素存储空间,共占用n(n+1)/2+1个元素空间: sa[1.. n(n+1)/2+1]

三角矩阵

3. 对角矩阵(带状矩阵)

[特点] n´n的方阵中,非零元素集中在主对角线及其两侧共L(奇数)条对角线的带状区域内 — L对角矩阵。

[存储方法]

以对角线的顺序存储

只存储带状区内的元素

 稀疏矩阵

[特点] 大多数元素为零。

[常用存储方法]  记录每一非零元素(i,j,aij )

                            节省空间,但丧失随机存取功能

顺序存储:三元组表

链式存储:十字(正交)链表

5.2 广义表

一.广义表的定义

一个长度为n≥0  的广义表是一个数据结构:LS = ( a1, a2,  ……,  an-1, an)

其中,LS为广义表的名字,  ai为表中元素;ai可以是数据元素(原子),也可以是一个表(子表)n为表的长度,长度为0的表称为空表。若ai为不可再分割的具体信息,则称ai为原子元。若ai为一个子表,则称ai为表元素。这里,用小写字母表示原子元素,用大写字母表示表元素。

二、广义表的例子

广义表的基本运算

1)求表头GetHead(L):非空广义表的第一个元素,可以是一个单元素,也可以是一个子表

2)求表尾GetTail(L):非空广义表除去表头元素以外其它元素所构成的表。表尾一定是一个表

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值