常州工学院数据结构作业 第4-6章 串和数组

1.已知二维数组A[m][n]采用行序为主方式存储,每个元素占k个存储单元,并且第一个元素的存储地址是LOC(A[0][0]),求A[i][j]的地址。

LOC [(A[0][0]) + (n*i+j)k]

2.二维数组A[10][20]采用列序为主方式存储,每个元素占一个存储单元并且A[0][0]的存储地址是200,求A[6][12]的地址。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 A[0]

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 A[1]

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 A[2]

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 A[3]

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 A[4]

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 A[5]

0 1 2 3 4 5 6 7 8 9 10 11 12 ←←旁边这个就是A[6][12]

第一个零的地址是200,在它的基础上A[0][0]第一括号里每加1,地址就加20,第2个括号里加几,地址就加几,然后就得到A[6][12]的地址为332。

200 + (6*20+12)*1 = 332

3.二维数组A[10..20][5..10]采用行序为主方式存储,每个元素占4个存储单元,并且A[10][5]的存储地址是1000,求A[18][9]的地址。

  1. 不管按行还是按列,都是顺序存储。

按行存储,每行10-5+1共6个元素。A[10, 9]距离A[10, 5]之间相差4个元素;A[18, 9]与A[10, 9]相差8行,共8×6=48个元素;所以A[18, 9]与A[10, 5]相差4+48=52个元素,共52×4=208个存储单元;A[18, 9]的地址应该是1208。

2、算法:基地址 +(行标之差×每行元素个数+列标之差)× 元素所占存储单元

1000 +(8*6+4)* 4 = 1208

4.常对数组进行的两种基本操作有哪些?

查找和修改

5.稀疏矩阵一般的压缩存储方法有哪两种?

//在一个矩阵中,若非零元素的个数远远小于零元素的个数,且非零元素的分布没有规律,则称之为稀疏矩阵。

最常用的稀疏矩阵存储格式主要有:三元组(也叫COO(Coordinate Format))和十字链表。

对于稀疏矩阵,存储非零元素时必须同时存储其位置,所以用三元组来唯一确定矩阵A中的元素。矩阵三元组表的顺序存储结构称为三元组顺序存储,链式存储结构是十字链表。

三元组(i,j,a(i,j))很简单,就是使用3个数组,分别存储全部非零元的行下标(row index)、列下标(column index)和值(value)

typedef struct

{

    int row;        //行坐标

    int col;        //列坐标

    int value;    //该点的值

} item;

这种方式简单,但是记录信息多(每个三元组自己可以定位),因此空间不是最优。

 十字链表(Orthogonal List)是有向图的一种链式存储结构。该结构可以看成是将有向图的邻接表和逆邻接表结合起来得到的。用十字链表来存储可以达到高效的存取效果。同时,代码的可读性也会得到提升。

6.一个n*n的对称矩阵,如果以行或列为主序放入内存,则其容量是多少?

n*(n+1)/2

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值