(习题)数据结构第五章 数组与广义表
数据结构第五章 数组与广义表

压缩存储方法:只需要存储下三角 (含对角线)上的元素。可节省一 半空间。
可以使用一维数组Sa[n(n+1)/2]作为n阶对称矩阵A的存 储结构,且约定以行序为主序存储各个元素,则在Sa[k]和矩
阵元素aij之间存在一一对应关系: (下标变换公式)
i(i+1)/2 + j 当i≥j k = j(j+1)/2 + i 当i<j
q = cpot[col];
T.data[q].i = M.data[p].j; T.data[q].j = M.data[p].i; T.data[q].e = M.data[p].e; ++cpot[col]; }
分析算法FastTransposeSMatrix的时间 复杂度:
for (col=1; col<=M.nu; ++col) … … for (t=1; t<=M.tu; ++t) … … for (col=2; col<=M.nu; ++col) … … for (p=1; p<=M.tu; ++p) … …
//对当前行中每一个非零元
处
brow=M.data[p].j;
理
if (brow < N.nu ) t = N.rpos[brow+1];
M
else { t = N.tu+1 }
的
for (q=N.rpos[brow]; q< t; ++q) { ccol = N.data[q].j; // 乘积元素在Q中列号
一、三元组顺序表
对于稀疏矩阵,非零元可以用三元组表示, 整个稀疏矩阵可以表示为所有非零元的三元组所 构成的线性表。例如:
中国农业大学_821数据结构_《数据结构》习题(5)

三、算法题
1. 编写一个函数,将A[0..n-1]中所有奇数移到偶数之前。要求不另增加存储空间,且
时间复杂度为O(n)。 2. 编写一个函数,设置mn(m=2,n=3)矩阵的元素后,统计这个矩阵中具有下列特 征的元素个数并输出它们的坐标和数值:它们既是所在行中的最小值又是所在列中的最小 值,或者它们既是所在行中的最大值又是所在列中的最大值。 3. 编写一个函数,在nn(n≥3)的稀疏矩阵A中,只有下标满足1<i<n和n-i≤j≤n-i+2 的元素A[i][j]不等于0 ,若这些非 0 元素按行优先的顺序存储在一维数组 B 中,试通过 B 求 A[i][j]之值。也就是说,在存在B的情况下,已知i、j求A[i][j]。 4. 编写一个函数,假设稀疏矩阵A和B(分别为)mn和nk采用三元组表示,试计算 C=A*B,要求C也是采用稀疏矩阵的三元组表示。 5. 编写一个函数,计算一个广义表原子结点个数。例如一个广义表为 (a, (b, c), ((e))), 其原子结点的个数为4。 6. 编写一个函数,计算一个广义表的所有原子结点数据域(数据域为整数型)之和。 例如一个广义表为 ((3, 4), 5, (( 6, 3 ))),其所有结点数据域之和为21。 7. 编写一个函数,将两个广义表合并成一个广义表,合并是指元素的合并。例如两个 广义表 ((a, b), (c)) 与 (a, (e, f)) 合并后的结果是 ((a, b), (c), a, (e, f))。 8. 编写一个函数,删除广义表中所有值为x的元素。例如删除广义表 ((a, b), a, (d, a)) 中所有a的结果空题
1. 已知二维数组A[m][n]采用行序为主方式存储,每个元素占k个存储单元,并且第一 个元素的起始地址始LOC(A[0][0]),则A[i][j]的地址是 。
第五章 数组和广义表

第五章数组和广义表一.选择题1.在二维数组A 中引用A[i,j]的时间_________。
A.与i、j的大小有关B.与i、j的大小无关C.与i的大小有关,与j的大小无关D.与i的大小无关,与j的大小有关2.在稀疏矩阵的带行指针向量的链接存储中,每一行单链表中的结点都具有相同的________。
A.行号 B.列号 C.元素值 D.地址3.二维数组A 按行顺序存储,其中每个元素占1个存储单元。
若 A[1][1]的存储地址为420, A[3][3]的存储地址为446,则A[5][5]的存储地址为_______。
A.470 B.471 C.472 D. 4734.在稀疏矩阵的十字链接存储中,每个列单链表中的结点都具有相同的_____。
A.行号 B.列号 C.元素值 D.地址5.下面的说法中,不正确的是________。
A.对称矩阵中只须存放包括主对角线元素在内的下(或上)三角部分的元素即可B.对角矩阵中只须存放的非零元素即可C.稀疏矩阵中值为零的元素较多,因此可以采用三元组表方法存储D.稀疏矩阵中大量值为零的元素分布有规律,因此可以采用三元组表方法存储6.对一些特殊矩阵采用压缩存储的目的主要是为了________。
A.表达变得简单 B.对矩阵元素的存取变得简单C.去掉矩阵中的多余元素 D.减少不必要的存储空间的开销7.若将n 阶对称矩阵 A 按照行序为主序方式将包括主对角线元素在内的下三角形的所有元素依次存放在一个一维数组 B 中,则该对称矩阵在 B 中占用了________个数组元素。
A.n2 B.n*(n-1) C.n*(n+1)/2 D.n*(n-1)8. 稀疏矩阵的三元组顺序表表示的一个三元组中不包括________。
A. 行号B.列号C.元素值D.元素总数9.稀疏矩阵一般的压缩存储方法有两种,即________。
A.二维数组和三维数组 B.三元组和散列C. 三元组和十字链表 D.散列和十字链表10.有一个 10 阶对称矩阵 A,采用压缩存储方式(以行序为主存储,且A[0 Ⅱ0]=1),则A[8][5]的地址是________。
数据结构-c语言描述(第二版)答案耿国华编著

第1章绪论2.(1)×(2)×(3)√3.(1)A(2)C(3)C5.计算下列程序中x=x+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;【解答】x=x+1的语句频度为:T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/66.编写算法,求一元多项式p n(x)=a0+a1x+a2x2+…….+a n x n的值p n(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。
注意:本题中的输入为a i(i=0,1,…n)、x和n,输出为P n(x0)。
算法的输入和输出采用下列方法(1)通过参数表中的参数显式传递(2)通过全局变量隐式传递。
讨论两种方法的优缺点,并在算法中以你认为较好的一种实现输入输出。
【解答】(1)通过参数表中的参数显式传递优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。
缺点:形参须与实参对应,且返回值数量有限。
(2)通过全局变量隐式传递优点:减少实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗缺点:函数通用性降低,移植性差算法如下:通过全局变量隐式传递参数PolyValue(){int i,n;float x,a[],p;printf(“\nn=”);scanf(“%f”,&n);printf(“\nx=”);scanf(“%f”,&x);for(i=0;i<n;i++)scanf(“%f”,&a[i]);/*执行次数:n次*/p=a[0];for(i=1;i<=n;i++){p=p+a[i]*x;/*执行次数:n次*/x=x*x;}printf(“%f”,p);}算法的时间复杂度:T(n)=O(n)通过参数表中的参数显式传递float PolyValue(float a[],float x,int n){float p,s;int i;p=x;s=a[0];for(i=1;i<=n;i++){s=s+a[i]*p;/*执行次数:n次*/p=p*x;}return(p);}算法的时间复杂度:T(n)=O(n)第2章线性表习题1.填空:(1)在顺序表中插入或删除一个元素,需要平均移动一半元素,具体移动的元素个数与插入或删除的位置有关。
第四、五章串、数组和广义表练习题答案

第四、五章串、数组和广义表练习题答案一.填空题1. 不包括任何字符(长度为0)的串称为空串;由一个或多个空格(仅由空格符)组成的串称为空白串。
2. 设S=“A;/document/”,那么strlen(s)= 20 , “/”的字符定位的位置为3。
3. 子串的定位运算称为串的模式匹配;被匹配的主串称为目标串,子串称为模式。
4. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,那么第 6 次匹配成功。
5. 假设n为主串长,m为子串长,那么串的古典(朴素)匹配算法最坏的情形下需要比较字符的总次数为(n-m+1)*m。
6. 假设有二维数组A6×8,每一个元素用相邻的6个字节存储,存储器按字节编址。
已知A的起始存储位置(基地址)为1000,那么数组A的体积(存储量)为 288 B ;末尾元素A57的第一个字节地址为 1282 ;假设按行存储时,元素A14的第一个字节地址为(8+4)×6+1000=1072 ;假设按列存储时,元素A47的第一个字节地址为 (6×7+4)×6+1000)=1276 。
(注:数组是从0行0列仍是从1行1列计算起呢?由末单元为A57可知,是从0行0列开始!)7. 〖00年运算机系考研题〗设数组a[1…60, 1…70]的基地址为2048,每一个元素占2个存储单元,假设以列序为主序顺序存储,那么元素a[32,58]的存储地址为8950 。
答:不考虑0行0列,利用列优先公式:LOC(a ij)=LOC(a c1,c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L得:LOC(a32,58)=2048+[(58-1)*(60-1+1)+32-1]]*2=89508. 三元素组表中的每一个结点对应于稀疏矩阵的一个非零元素,它包括有三个数据项,别离表示该元素的行下标、列下标和元素值。
9.求以下广义表操作的结果:(1)GetHead【((a,b),(c,d))】=== (a, b) ; u=;(*b).nu=;(*b).tu=;if{ q=1;for(col=1; __ col<=, ________;col++)for(p=1;p<=;p++)if[p].j ==col){(*b).data[q].i=[p].j;(*b).data[q].j=[p].i;(*b).data[q].v=[p].v;__q++_________;}}23.基于三元组的稀疏矩阵转置的处置方式有两种,以下计算依照矩阵A的三元组的顺序进行转置,请在___________处用适当的句子用以填充。
《数据结构》习题集:第5章

第5章数组与广义表一、选择题1.在以下讲述中,正确的是(B )。
A、线性表的线性存储结构优于链表存储结构B、二维数组是其数据元素为线性表的线性表C、栈的操作方式是先进先出D、队列的操作方式是先进后出2.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算,这种观点(A )。
A、正确B、错误3.二维数组SA 中,每个元素的长度为3 个字节,行下标I 从0 到7,列下标J 从0 到9,从首地址SA 开始连续存放在存储器内,该数组按列存放时,元素A[4][7]的起始地址为(B)。
A、SA+141B、SA+180C、SA+222D、SA+2254.数组SA 中,每个元素的长度为3 个字节,行下标I 从0 到7,列下标J 从0 到9,从首地址SA 开始连续存放在存储器内,存放该数组至少需要的字节数是( C )。
A、80B、100C、240D、2705.常对数组进行的两种基本操作是(B )。
A、建立与删除B、索引和修改C、查找和修改D、查找和索引6.将一个A[15][15]的下三角矩阵(第一个元素为A[0][0]),按行优先存入一维数组B[120]中,A 中元素A[6][5]在B 数组中的位置K 为( B )。
A、19B、26C、21D、157.若广义表A 满足Head(A)=Tail(A),则A 为(B )。
A、()B、(())C、((),())D、((),(),())8.广义表((a),a)的表头是( C ),表尾是(C )。
A、aB、bC、(a)D、((a))9.广义表((a,b),c,d)的表头是( C ),表尾是(D )。
A、aB、bC、(a,b)D、(c,d)10.广义表((a))的表头是( B ),表尾是(C )。
A、aB、(a)C、()D、((a))11.广义表(a,b,c,d)的表头是(A ),表尾是(D )。
A、aB、(a)C、(a,b)D、(b,c,d)12.广义表((a,b,c,d))的表头是(C ),表尾是(B )。
数据结构习题及答案 (7)

第五章数组和广义表一、选择题1. 常对数组进行的两种基本操作是()(A)建立与删除(B)索引和修改(C)查找和修改(D)查找与索引参考答案:C2.二维数组M的元素是4个字符(每个字符占一个存储单元)组成的串,行下标i的范围从0到4,列下标j的范围从0到5,M按行存储时元素M[3][5]的起始地址与M按列存储时元素( ) 的起始地址相同。
(A)M[2][4](B)M[3][4](C)M[3][5](D)M[4][4]参考答案:B3.数组A[8][10]中,每个元素A的长度为3个字节,从首地址SA开始连续存放在存储器内,存放该数组至少需要的单元数是()。
(A)80(B)100(C)240(D)270参考答案:C4.数组A[8][10]中,每个元素A的长度为3个字节,从首地址SA开始连续存放在存储器内,该数组按行存放时,元素A[7][4]的起始地址为()。
(A)SA+141(B)SA+144(C)SA+222(D)SA+225参考答案:C5.数组A[8][10]中,每个元素A的长度为3个字节,从首地址SA开始连续存放在存储器内,该数组按列存放时,元素A[4][7]的起始地址为()。
(A)SA+141(B)SA+180(C)SA+222(D)SA+225参考答案:B6.稀疏矩阵一般的压缩存储方法有两种,即()。
(A)二维数组和三维数组(B)三元组和散列(C)三元组和十字链表(D)散列和十字链表参考答案:C7.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算,这种观点()。
(A)正确(B)错误参考答案:B8.设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分按行序存放在一维数组B[1,n(n-1)/2]中,对下三角部分中任一元素ai,j(i<=j),在一组数组B的下标位置k的值是()。
(A)i(i-1)/2+j-1(B)i(i-1)/2+j(C)i(i+1)/2+j-1 (D)i(i+1)/2+j参考答案:B二、填空题1.己知二维数组A[m][n]采用行序为主方式存储,每个元素占k个存储单元,并且第一个元素的存储地址是LOC(A[0][0]),则A[0][0]的地址是_____________________。
数据结构-第五章 数组与广义表-文档资料

上 三 角 矩 阵 下 三 角 矩 阵
a00 a10 a 20 an10
0 1 2
a01 a11 a21 an11
3 4
a02 a12 a22 an12
5
6 7
a0 n1 a1n1 a2 n1 an1n1
行 列 值 (row) (col) (value) 0 4 91 1 1 11 2 5 28 3 0 22 3 2 -6 5 1 17 5 3 39 6 0 16
用三元组表表示的稀疏矩阵及其转置
行 列 值 (row) (col) (value) 0 3 22 0 6 15 1 1 11 1 5 17 2 3 -6 3 5 39 4 0 91 5 2 28 行 列 值 (row) (col) (value) 0 4 91 1 1 11 2 5 28 3 0 22 3 2 -6 5 1 17 5 3 39 6 0 16
4 5 6 7 8 9 10
B a00 a01 a10 a11 a12 a21 a22 a23 … an-1n-2 an-1n-1
三对角矩阵中除主对角线及在主对角线上 下最临 近的两条对角线上的元素外,所有其它元素均为 0。总共有3n-2个非零元素。 将三对角矩阵A中三条对角线上的元素按行存放在 一维数组 B 中,且a00存放于B[0]。 在三条对角线上的元素aij 满足 0 i n-1, i-1 j i+1 在一维数组 B 中 A[i][j] 在第 i 行,它前面有 3*i-1 个非零元素, 在本行中第 j 列前面有 j-i+1 个,所 以元素 A[i][j] 在 B 中位置为 k = 2*i + j。
三对角矩阵的压缩存储
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章数组与广义表
5.1 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。
已知A 的起始存储位置(基地址)为1000,计算:
(1)数组A的体积(即存储量);
(2)数组A的最后一个元素a57的第一个字节的地址;
(3)按行存储时,元素a14的第一个字节的地址;
(4)按列存储时,元素a47的第一个字节的地址。
5.2 若矩阵A m×n中的某个元素a i×j是第I行中的最小值,同时又是第j列中的最大值,则称此元素为该矩阵中的一个马鞍点。
假设以二维数组存储矩阵A m×n,试编写求出矩阵中所有马鞍点的算法,并分析你的算法在最坏情况下的时间复杂度。
5.3 现有如下的稀疏矩阵A如图所示,要求画出以下各种表示法。
(1)三元组表示法;
(2)伪地址表示法;
(3)带行指针向量的单链表示法;
(4)十字链表法。
5.4 求下列广义表操作的结果:
⑴GetHead【(p,h,w)】
⑵GetTAil【(b,k,p,h)】
⑶GetHead【((a,b),(c,d))】
⑷GetTail【((a,b),(c,d))】
⑸GetHead【GetTail【((a,b),(c,d))】】
⑹GetTail【GetHead【((a,b),(c,d))】】
⑺GetHead【GetTail【GetHead【((a,b),(c,d))】】】
⑻GetTail【GetHead 【GetTail 【((a,b),(c,d))】】】
注意:【】是函数的符号。
5.5 利用广义表的GetHead和GetTail操作写出如上题的函数表达式,把原子banana分别从下列广义表中分离出来。
⑴L1=(apple,pear,banana,orange);
⑵L2=((apple,pear),(banana,orange));
5.6 下述广义表的长度和深度各是多少?
⑴L1=((a),((b),c),(((d))));
⑵L2=(a,(a,b),d,e,((i,j),k));。