最新多维数组和广义表PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.存储方式
(1)以行为主(row major order)
以行为主的存储方式也称为按行优先顺序方式,实现时按行号 从小到大的顺序,先存储第0行的全部元素,再存放第1行的元素、 第2行的元素……
一个2×3二维数组的逻辑结构如图6-2所示,以行为主的内存 映象如图6-3(a)所示,其分配顺序为:a00,a01,a02,a10 ,a11, a12。
进 入 夏 天 ,少 不了一 个热字 当头, 电扇空 调陆续 登场, 每逢此 时,总 会想起 那 一 把 蒲 扇 。蒲扇 ,是记 忆中的 农村, 夏季经 常用的 一件物 品。 记 忆 中 的故 乡 , 每 逢 进 入夏天 ,集市 上最常 见的便 是蒲扇 、凉席 ,不论 男女老 少,个 个手持 一 把 , 忽 闪 忽闪个 不停, 嘴里叨 叨着“ 怎么这 么热” ,于是 三五成 群,聚 在大树 下 , 或 站 着 ,或随 即坐在 石头上 ,手持 那把扇 子,边 唠嗑边 乘凉。 孩子们 却在周 围 跑 跑 跳 跳 ,热得 满头大 汗,不 时听到 “强子 ,别跑 了,快 来我给 你扇扇 ”。孩 子 们 才 不 听 这一套 ,跑个 没完, 直到累 气喘吁 吁,这 才一跑 一踮地 围过了 ,这时 母 亲总是 ,好似 生气的 样子, 边扇边 训,“ 你看热 的,跑 什么? ”此时 这把蒲 扇, 是 那 么 凉 快 ,那么 的温馨 幸福, 有母亲 的味道 ! 蒲 扇 是 中 国传 统工艺 品,在 我 国 已 有 三 千年多 年的历 史。取 材于棕 榈树, 制作简 单,方 便携带 ,且蒲 扇的表 面 光 滑 , 因 而,古 人常会 在上面 作画。 古有棕 扇、葵 扇、蒲 扇、蕉 扇诸名 ,实即 今 日 的 蒲 扇 ,江浙 称之为 芭蕉扇 。六七 十年代 ,人们 最常用 的就是 这种, 似圆非 圆 , 轻 巧 又 便宜的 蒲扇。 蒲 扇 流 传 至今, 我的记 忆中, 它跨越 了半个 世纪, 也 走 过 了 我 们的半 个人生 的轨迹 ,携带 着特有 的念想 ,一年 年,一 天天, 流向长
具有某种结构的数据,但属于同一数据类型。比如,一维数 组可以看作一个线性表,二维数组可以看作“数据元素是一 维数组”的一维数组,三维数组可以看作“数据元素是二维 数组”的一维数组。一般把三维以上的数组称为多维数组, n维的多维数组可以视为n1维数组元素组成的线性结构。其 中每一个一维数组又由m个单元组成。
பைடு நூலகம்
以行为主序的分配规律是:最右边的下标先变化,即最右下标 从小到大,循环一遍后,右边第二个下标再变……,从右向左, 最后是左下标。
(2)以列为主序(column major order)
以列为主的存储方式也称为按列优先顺序方式,实现时按列号 从小到大的顺序,先存储第0列的全部元素,再存储第1列的元素、 第2 列的元素……
(1)取值操作:给定一组下标,读取其对应的数据元素。 (2)赋值操作:给定一组下标,存储或修改与其相对应的 数据元素。
6.1.2 存储结构
通常,数组在内存被映象为向量,即用向量作为数组的一种存 储结构,这是因为在计算机内存储结构是一维的。数组的行列固 定后,通过一个映象函数,就可以根据数组元素的下标得到它的 存储地址。对于一维数组只要按下标顺序分配即可;对多维数组 分配时,要把它的元素映象存储在一维存储器中。
长 的 时 间 隧 道,袅
多维数组和广义表
➢要求
第6章目录
➢ 6-1 多维数组 ➢ 6-2 特殊矩阵的压缩存储 ➢ 6-3 稀疏矩阵 ➢ 6-4 广义表 ➢小 结 ➢ 验证性实验6:稀疏矩阵和广义表子系统 ➢ 自主性实验6:稀疏矩阵十字链表的存储 ➢ 单元练习6
6-1 多维数组
6.1.1 逻辑结构 数组作为一种数据结构,其特点是结构中的元素可以是
LOC(aijk)=LOC(a000)+( (i×n×p+ j×p +k) ×d (0下标起始的语言)
【例6-1】设二维数组A5×6,每个元素占4个字节(Byte),存储 器按字节编址。已知A的起始地址为2000。计算
(1)数组的大小
n×m×d=5×6×4=120 Byte
(2)数组结点a45的存储地址 LOC(aij)=LOC(a00)+(i*n+j)*d // n为总列数 LOC(a45)=2000+(4×6+5)×4=2116
图6-2所示的逻辑结构,以列为主的内存映象如图6-3(b)所示, 其分配顺序为:a00,a10,a01,a11,a02,a12 。
以列为主分配的规律恰好与以行为主次序相反:最左边的下标 先变化,即最左下标从小到大,循环一遍后,左边第二个下标再 变……,从左向右,最后是右下标。
2.存储地址
“以行为主”次序分配存储单元为例看其地址的计算
(1)二维数组中aij的地址 在C语言中数组中每一维的下界定义为0,数组的基址为
LOC(a00),每个数组元素占据d个字节,那么aij 的物理地址 可用一个线性寻址函数计算:
LOC(aij) = LOC(a00) + ( i×n + j ) × d (0下标起始的语言)
(2)三维数组中aijk的地址 同理对于三维数组元素aijk的物理地址为:
图6-1是一个n行m列的数组。
在二维数组中的每一个元素最多可以有两个直接前驱 和两个直接后继(边界除外),在n维数组中的每一个元素 最多可以有n个直接前驱和n个直接后继。所以多维数组是 一种非线性结构。
数组是一个具有固定格式和数量的数据有序集,每一 个数据元素有唯一的一组下标来标识,通常在很多高级语言 中数组一旦被定义,每一维的大小及上下界都不能改变。因 此,在数组上一般不做插入或删除数据元素的操作。在数组 中经常做的两种操作如下。
(3)按行为主存储,计算a32的存储地址 LOC(aij)=LOC(a00)+(i*n+j)*d // n为总列数 LOC(a32)=2000+(3×6+2)×4=2080
(4)按列为主存储,计算a32的存储地址 LOC(aij)=LOC(a00)+(j*m+i)*d // m为总行数 LOC(a32)=2000+(2×5+3)×4=2052
(1)以行为主(row major order)
以行为主的存储方式也称为按行优先顺序方式,实现时按行号 从小到大的顺序,先存储第0行的全部元素,再存放第1行的元素、 第2行的元素……
一个2×3二维数组的逻辑结构如图6-2所示,以行为主的内存 映象如图6-3(a)所示,其分配顺序为:a00,a01,a02,a10 ,a11, a12。
进 入 夏 天 ,少 不了一 个热字 当头, 电扇空 调陆续 登场, 每逢此 时,总 会想起 那 一 把 蒲 扇 。蒲扇 ,是记 忆中的 农村, 夏季经 常用的 一件物 品。 记 忆 中 的故 乡 , 每 逢 进 入夏天 ,集市 上最常 见的便 是蒲扇 、凉席 ,不论 男女老 少,个 个手持 一 把 , 忽 闪 忽闪个 不停, 嘴里叨 叨着“ 怎么这 么热” ,于是 三五成 群,聚 在大树 下 , 或 站 着 ,或随 即坐在 石头上 ,手持 那把扇 子,边 唠嗑边 乘凉。 孩子们 却在周 围 跑 跑 跳 跳 ,热得 满头大 汗,不 时听到 “强子 ,别跑 了,快 来我给 你扇扇 ”。孩 子 们 才 不 听 这一套 ,跑个 没完, 直到累 气喘吁 吁,这 才一跑 一踮地 围过了 ,这时 母 亲总是 ,好似 生气的 样子, 边扇边 训,“ 你看热 的,跑 什么? ”此时 这把蒲 扇, 是 那 么 凉 快 ,那么 的温馨 幸福, 有母亲 的味道 ! 蒲 扇 是 中 国传 统工艺 品,在 我 国 已 有 三 千年多 年的历 史。取 材于棕 榈树, 制作简 单,方 便携带 ,且蒲 扇的表 面 光 滑 , 因 而,古 人常会 在上面 作画。 古有棕 扇、葵 扇、蒲 扇、蕉 扇诸名 ,实即 今 日 的 蒲 扇 ,江浙 称之为 芭蕉扇 。六七 十年代 ,人们 最常用 的就是 这种, 似圆非 圆 , 轻 巧 又 便宜的 蒲扇。 蒲 扇 流 传 至今, 我的记 忆中, 它跨越 了半个 世纪, 也 走 过 了 我 们的半 个人生 的轨迹 ,携带 着特有 的念想 ,一年 年,一 天天, 流向长
具有某种结构的数据,但属于同一数据类型。比如,一维数 组可以看作一个线性表,二维数组可以看作“数据元素是一 维数组”的一维数组,三维数组可以看作“数据元素是二维 数组”的一维数组。一般把三维以上的数组称为多维数组, n维的多维数组可以视为n1维数组元素组成的线性结构。其 中每一个一维数组又由m个单元组成。
பைடு நூலகம்
以行为主序的分配规律是:最右边的下标先变化,即最右下标 从小到大,循环一遍后,右边第二个下标再变……,从右向左, 最后是左下标。
(2)以列为主序(column major order)
以列为主的存储方式也称为按列优先顺序方式,实现时按列号 从小到大的顺序,先存储第0列的全部元素,再存储第1列的元素、 第2 列的元素……
(1)取值操作:给定一组下标,读取其对应的数据元素。 (2)赋值操作:给定一组下标,存储或修改与其相对应的 数据元素。
6.1.2 存储结构
通常,数组在内存被映象为向量,即用向量作为数组的一种存 储结构,这是因为在计算机内存储结构是一维的。数组的行列固 定后,通过一个映象函数,就可以根据数组元素的下标得到它的 存储地址。对于一维数组只要按下标顺序分配即可;对多维数组 分配时,要把它的元素映象存储在一维存储器中。
长 的 时 间 隧 道,袅
多维数组和广义表
➢要求
第6章目录
➢ 6-1 多维数组 ➢ 6-2 特殊矩阵的压缩存储 ➢ 6-3 稀疏矩阵 ➢ 6-4 广义表 ➢小 结 ➢ 验证性实验6:稀疏矩阵和广义表子系统 ➢ 自主性实验6:稀疏矩阵十字链表的存储 ➢ 单元练习6
6-1 多维数组
6.1.1 逻辑结构 数组作为一种数据结构,其特点是结构中的元素可以是
LOC(aijk)=LOC(a000)+( (i×n×p+ j×p +k) ×d (0下标起始的语言)
【例6-1】设二维数组A5×6,每个元素占4个字节(Byte),存储 器按字节编址。已知A的起始地址为2000。计算
(1)数组的大小
n×m×d=5×6×4=120 Byte
(2)数组结点a45的存储地址 LOC(aij)=LOC(a00)+(i*n+j)*d // n为总列数 LOC(a45)=2000+(4×6+5)×4=2116
图6-2所示的逻辑结构,以列为主的内存映象如图6-3(b)所示, 其分配顺序为:a00,a10,a01,a11,a02,a12 。
以列为主分配的规律恰好与以行为主次序相反:最左边的下标 先变化,即最左下标从小到大,循环一遍后,左边第二个下标再 变……,从左向右,最后是右下标。
2.存储地址
“以行为主”次序分配存储单元为例看其地址的计算
(1)二维数组中aij的地址 在C语言中数组中每一维的下界定义为0,数组的基址为
LOC(a00),每个数组元素占据d个字节,那么aij 的物理地址 可用一个线性寻址函数计算:
LOC(aij) = LOC(a00) + ( i×n + j ) × d (0下标起始的语言)
(2)三维数组中aijk的地址 同理对于三维数组元素aijk的物理地址为:
图6-1是一个n行m列的数组。
在二维数组中的每一个元素最多可以有两个直接前驱 和两个直接后继(边界除外),在n维数组中的每一个元素 最多可以有n个直接前驱和n个直接后继。所以多维数组是 一种非线性结构。
数组是一个具有固定格式和数量的数据有序集,每一 个数据元素有唯一的一组下标来标识,通常在很多高级语言 中数组一旦被定义,每一维的大小及上下界都不能改变。因 此,在数组上一般不做插入或删除数据元素的操作。在数组 中经常做的两种操作如下。
(3)按行为主存储,计算a32的存储地址 LOC(aij)=LOC(a00)+(i*n+j)*d // n为总列数 LOC(a32)=2000+(3×6+2)×4=2080
(4)按列为主存储,计算a32的存储地址 LOC(aij)=LOC(a00)+(j*m+i)*d // m为总行数 LOC(a32)=2000+(2×5+3)×4=2052