第五章数组和广习题

合集下载

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

数据结构第五章 数组与广义表
an-1,n-1
压缩存储方法:只需要存储下三角 (含对角线)上的元素。可节省一 半空间。
可以使用一维数组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中列号
一、三元组顺序表
对于稀疏矩阵,非零元可以用三元组表示, 整个稀疏矩阵可以表示为所有非零元的三元组所 构成的线性表。例如:

数据结构1800试题-第5章 数组和广义表 - 答案

数据结构1800试题-第5章 数组和广义表 - 答案

第五章数组和广义表答案部分答案解释如下。

1. 错误。

对于完全二叉树,用一维数组作存储结构是效率高的(存储密度大)。

4. 错误。

数组是具有相同性质的数据元素的集合,数据元素不仅有值,还有下标。

因此,可以说数祖是元素值和下标构成的偶对的有穷集合。

5. 错误。

数组在维数和界偶确定后,其元素个数已经确定,不能进行插入和删除运算。

6. 错误。

稀疏矩阵转置后,除行列下标及行列数互换外,还必须确定该元素转置后在新三元组中的位置。

8. 错误。

广义表的取表尾运算,是非空广义表除去表头元素,剩余元素组成的表,不可能是原子。

9. 错误。

广义表的表头就是广义表的第一个元素。

只有非空广义表才能取表头。

10. 错误。

广义表中元素可以是原子,也可以是表(包括空表和非空表)。

11. 错误。

广义表的表尾,指去掉表头元素后,剩余元素所组成的表。

三、填空题1. 顺序存储结构2.(1)9572(2)12283.(1)9174(2)87884. 11005. 1164 公式:LOC(a ijk)=LOC(a000)+[v2*v3*(i-c1)+v3*(j-c2)+(k-c3)]*l (l为每个元素所占单元数)6. 2327. 13408. 11969. 第1行第3列10. (1)270 (2)27 (3)2204 11. i(i-1)/2+j (1<=i,j<=n)12. (1)n(n+1)/2 (2)i(i+1)/2 (或j(j+1)/2) (3)i(i-1)/2+j (4)j(j-1)/2+i (1<=i,j<=n)13. 1038 三对角矩阵按行存储:k=2(i-1)+j (1<=i,j<=n)14. 33 (k=i(i-1)/2+j) (1<=i,j<=n)15. 非零元很少(t<<m*n)且分布没有规律 16. 节省存储空间。

17. 上三角矩阵中,主对角线上第r(1≤r≤n) 行有n-r+1个元素,a ij所在行的元素数是j-i+1。

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

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

阵中下三角部分的元素存入一维数组B[ ]中,A[0][0]存入B[0]中,则
A[8][5]在B[ ]中( )位置。
A.32
B.33
C.41
D.65
12.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存
储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85
的地址为( B )。
义表
C. 广义表难以用顺序存储结构
D. 广义表可以是一个多层次
的结构
【解答】A
二、填空题
1.设有一个n阶的下三角矩阵A,如果按照行的顺序将下三角矩阵中的 元素(包括对角线上元素)存放在n(n+1)个连续的存储单元中,则A[i] [j]与A[0][0]之间有_______个数据元素。i(i+1)/2+j-1 2.从一维数组a[n]中顺序查找出一个最大值元素的时间复杂度为 ________,输出一个二维数组b[m][n]中所有元素值的时间复杂度为 ________。O(n)、O(m*n) 3.在稀疏距阵所对应的三元组线形表中,每个三元组元素按 ____________为主序,__________为辅序的次序排列。行号,列号 4.在广义表的存储结构中,单元素结点与表元素结点有一个域对应不
B. 1180
C. 1205
D. 1210
15.若6行5列的数组以列序为主序顺序存储,基地址为1000,每个元素
占2个存储单元,则第3行第4列的元素(假定无第0行第0列)的地址是
(A)。
A. 1040 B. 1042
C. 1026
D.备选答案A,B,C都不
对Leabharlann 16.稀疏矩阵一般的压缩存储方法有两种,即( C )。
9.在稀疏矩阵的带行指针向量的链接存储中,每个行单链表中的结点

《第5章 数组和广义表》习题解答

《第5章 数组和广义表》习题解答
returnA.base[off];
}
4.根据下标(script)修改数组元素的操作
操作int Assign(Array& A,int* script,EType e)的作用是,根据下标向量script修改数组A中相应元素的值为e。如果下标合理返回1表示修改成功,否则返回0表示操作失败。
int Assign(Array& A,int* script,EType e)
void Arrayoutput(Array A)
{int s[3],i,len=1;
switch(A.dim)
{
case 1://按一维数组格式输出
for(s[0]=0;s[0]<A.bounds[0];s[0]++) cout<<Value(A,s)<<" ";
cout<<endl;
break;
该存储结构以最右面的下标为主序,左下标优先变化,即下标变化顺序是从左到右。
以二维数组:
为例,其内存结构如图5.2(a)所示。
对于三维数组: (有2页、2行、3列),按右下标为主序的内存结构如图5.2(b)所示。
2.左下标为主序存储的n维数组中的元素a(j0,j1,...,jn-1)的地址计算公式
对于一个已经被定义的二维数组Ab0×b1=(a[i][j])b0×b1,只要给出该数组存放的起始地址LOC(a[0][0])、数组元素的行下标i和列下标j,以及每个元素所占用的存储单元(字节)数L,便可以求得元素a[i][j]在内存中的首地址LOC(a[i][j])。
int Value(Array A,int* script,EType &e)

《数据结构》习题集:第5章_数组与广义表

《数据结构》习题集:第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 )。

数据结构 第5章 数组练习题

数据结构   第5章      数组练习题

数据结构第5章数组练习题数据结构-第5章--数组练习题第五章阵列一、选择题3.有一个数组a[I,J],数组中每个元素的长度是3字节,I的值是1到8,J的值是1到10。

数组从内存ba的第一个地址开始顺序存储。

当它主要按列存储时,元素a[5,8]的第一个地址是(a)。

a.ba+141b.ba+180c.ba+222d.ba+2254.假设以行序为主序存储二维数组a=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则loc[5,5]=(a)。

a.808b.818c.1010d.10205.数组a[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素a[5,5]的地址是()。

1195a、 1175b。

1180摄氏度。

1205d。

一千二百一十7.将一个a[1..100,1..100]的三对角矩阵,按行优先存入一维数组b[1e298]中,a中元素a6665(即该元素下标i=66,j=65),在b数组中的位置k为()。

供选择的答案:a、 198b年。

195c年。

1972+64*3=19410. 如果行序是n阶对称矩阵A的主序,则其下三角形的元素(包括主对角线上的所有元素)存储在一维数组B[1(n(n+1))/2]中,然后在bj*(j-1)/2+ic中确定AIJ(IA.I*(I-1)/2+JB。

i*(i+1)/2+jd。

j*(j+1)/2+i11。

设a是n*n的对称矩阵,将a的对角线和对角线上方的元素按列的顺序存储在一维数组B[1..n(n+1)/2]中,并存储上述任何元素的位置AIJ(1)≤ 一、J≤ n、而我≤ J)在B中是(c)。

a、 i(i-l)/2+jb。

j(j-l)/2+ic。

j(j-l)/2+i-1d。

i(i-l)/2+j-112。

A[n,n]是一个对称矩阵。

如果下三角形(包括对角线)按行顺序存储在尺寸组t[n(n+1)/2]中,则与任何上三角形元素a[i][J]对应的t[k]的下标k为(AB)。

第5章数组和广义表

第5章数组和广义表

第五章习题参考答案一、简答题1.【参考答案】:数组是一组具有相同数据类型的数据集合。

数据元素按次序存储于一段地址连续的内存空间中。

可以通过下标找到存放该元素的存储地址,访问该数据元素的值。

数组中的每一个元素和下标惟一对应。

访问数组中任意指定的数据元素形式是,数组名[下标]。

举例略。

2.【参考答案】:数组是一组具有相同数据类型的数据集合。

数据元素按次序存储于一段地址连续的内存空间中。

即数组是数据元素的线性组合,类似于顺序存储结构的线性表。

3.【参考答案】:在n阶方阵A中,若元素满足下述性质:aij=aji (0≤i,j≤n-1)则称A为n阶对称矩阵。

三角矩阵是指n阶矩阵中上三角(不包括对角线)或下三角(不包括对角线)中的元素均为常数c或为0的n阶方阵。

以主对角线划分,三角矩阵有上三角和下三角两种。

在n阶矩阵A中,所有的非零元素都集中在以对角线为中心的带状区域中,则称A为n阶对角矩阵。

实质上,除了主对角线和主对角线相邻两侧的若干条对角线上的元素之外,其余元素均为零或为常数c。

稀疏矩阵压缩存储方法有两类:顺序存储结构和链式存储结构。

共同点:为了节省存储单元,可只存储非零元素,压缩零元素的存储空间;非零元素的分布一般是没有规律的;在存储非零元素的同时,还必须存储非零元素所在的行号、列号,才能惟一确定非零元素是矩阵中的哪一个元素。

稀疏矩阵中的所有非零元素构成了三元组线性表。

4.【参考答案】:一个阶数较大的m×n矩阵中,设有s个非零元素,如果s<<m×n时,则称该矩阵为稀疏矩阵。

准确的讲,在矩阵A中,有s个非零元素。

令e=s/(m×n),称e 为矩阵的稀疏因子。

通常认为e≤0.05时,称矩阵A为稀疏矩阵。

特点:非零元素分布没有规律,而且很少,远小于矩阵中的元素总个数。

采用压缩存储,节省存储空间,只存储非零元素,并且每个非零元素都需要一个三元组(i,j,aij)惟一表示。

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

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

第五章数组和广义表:习题习题一、选择题1.假设以行序为主序存储二维数组A[1..100,1..100],设每个数据元素占两个存储单元,基地址为10,则LOC(A[5,5])=( )。

A. 808B. 818C. 1010D. 10202.同一数组中的元素( )。

A. 长度可以不同 B.不限 C.类型相同 D. 长度不限3.二维数组A的元素都是6个字符组成的串,行下标i的范围从0到8,列下标j的范圈从1到10。

从供选择的答案中选出应填入下列关于数组存储叙述中( )内的正确答案。

(1)存放A至少需要( )个字节。

(2)A的第8列和第5行共占( )个字节。

(3)若A按行存放,元素A[8]【5]的起始地址与A按列存放时的元素( )的起始地址一致。

供选择的答案:(1)A. 90 B. 180 C. 240 D. 270(2) A. 108 B. 114 C. 54 D. 60(3)[8][5] B. A[3][10] [5][8] [O][9]4.数组与一般线性表的区别主要是( )。

A.存储方面B.元素类型方面C.逻辑结构方面D.不能进行插入和删除运算5.设二维数组A[1..m,1..n]按行存储在数组B[1..m×n]中,则二维数组元素A[i,j]在一维数组B中的下标为( )。

A. (i-l)×n+jB. (i-l)×n+j-lC.i×(j-l) D. j×m+i-l6.所谓稀疏矩阵指的是( )。

A.零元素个数较多的矩阵B.零元素个数占矩阵元素中总个数一半的矩阵C.零元素个数远远多于非零元素个数且分布没有规律的矩阵D.包含有零元素的矩阵7.对稀疏矩阵进行压缩存储的目的是( )。

A.便于进行矩阵运算B.便于输入和输出C.节省存储空间D. 降低运算的时间复杂度8.稀疏矩阵一般的压缩存储方法有两种,即( )。

A.二维数组和三维数组B.三元组和散列C.三元组和十字链表D.散列和十字链表9.有一个100×90的稀疏矩阵,非0元素有10个,设每个整型数占两字节,则用三元组表示该矩阵时,所需的字节数是( )。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第五章数组和广义表
一,选择
1. 已知广义表L=((x,y,z),a,(u,t,w)),从L表中取出原子项t的运算是()。

A. head(tail(tail(L)))
B. tail(head(head(tail(L))))
C. head(tail(head(tail(L))))
D. head(tail(head(tail(tail(L)))))
2. 广义表A=(a,b,(c,d),(e,(f,g))),则下面式子的值为()。

Head(Tail(Head(Tail(Tail(A)))))
A. (g)
B. (d)
C. c
D. d
3.稀疏矩阵一般的压缩存储方法有两种,即()
A.二维数组和三维数组 B.三元组和散列
C.三元组和十字链表 D.散列和十字链表
4. 二维数组A的每个元素是由6个字符组成的串,其行下标i=0,1,…,8,列下标j=1,2,…,10。

若A按行先存储,元素A[8,5]的起始地址与当A按列先存储时的元素()的起始地址相同。

设每个字符占一个字节。

A. A[8,5]
B. A[3,10]
C. A[5,8]
D. A[0,9]
5. 对稀疏矩阵进行压缩存储目的是()。

A.便于进行矩阵运算 B.便于输入和输出
C.节省存储空间 D.降低运算的时间复杂度
6. 设A是n*n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序存放在一维数组B[1..n(n+1)/2]中,对上述任一元素a ij(1≤i,j≤n,且i≤j)在B中的位置为( )。

A. i(i-l)/2+j
B. j(j-l)/2+i
C. j(j-l)/2+i-1
D. i(i-l)/2+j-1
7. A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+1)/2]中,则对任一上三角元素a[i][j]对应T[k]的下标k是()。

A. i(i-1)/2+j B. j(j-1)/2+i C. i(j-i)/2+1 D. j(i-1)/2+1
8. 设广义表L=((a,b,c)),则L的长度和深度分别为()。

A. 1和1
B. 1和3
C. 1和2
D. 2和3
9. 数组A[0..4,-1..-3,5..7]中含有元素的个数()。

A. 55 B.45 C. 36 D.16
10. 下面说法不正确的是( )。

A. 广义表的表头总是一个广义表
B. 广义表的表尾总是一个广义表
C. 广义表难以用顺序存储结构
D. 广义表可以是一个多层次的结构
一,选择
二,判断
1.一个稀疏矩阵A m*n采用三元组形式表示,若把三元组中有关行下标与列下标的值互换,并把m和n的值互换,则就完成了A m*n的转置运算。

()
2. 从逻辑结构上看,n维数组的每个元素均属于n个向量。

()
3. 稀疏矩阵压缩存储后,必会失去随机存取功能。

()
4. 对长度为无穷大的广义表,由于存储空间的限制,不能在计算机中实现。

()
5. 数组可看成线性结构的一种推广,因此与线性表一样可对它进行插入,删除操作。

()
6. 所谓取广义表的表尾就是返回广义表中最后一个元素。

()
7. 二维以上的数组其实是一种特殊的广义表。

()
8. 广义表的取表尾运算,其结果通常是个表,但有时也可是个单元素值。

()
9. 若一个广义表的表头为空表,则此广义表亦为空表。

()
10. 广义表中的元素或者是一个不可分割的原子,或者是一个非空的广义表。

()
四应用题
1. 画出下列广义表的两种存储结构图((),A,(B,(C,D)),(E,F))。

2. 设某表H如下:
其中A,B,C为子表名,a1,a2,b1,c1,c2,x为其元素。

试用广义表形式表示H,并写出运算HEAD(H)和TAIL(H) 函数从H中取出单元素a2的运算;(1)H(A(a1,a2),B(b1),C(c1,c2),x)
HEAD(TAIL(HEAD(H)))=a2
五,算法设计
1.设任意n个整数存放于数组A(1:n)中,试编写程序,将所有正数排在所有负数前面2. 设二维数组a[1..m, 1..n] 含有m*n 个整数。

判断a中所有元素是否互不相同?输出相关信息(yes/no)。

1.本题属于排序问题,只是排出正负,不排出大小。

可在数组首尾设两个指针i和j,i自小至大搜索到负数停止,j自大至小搜索到正数停止。

然后i和j所指数据交换,继续以上过程,直到 i=j为止。

void Arrange(int A[],int n)
//n个整数存于数组A中,本算法将数组中所有正数排在所有负数的前面 {int i=0,j=n-1,x; //用类C编写,数组下标从0开始
while(i<j)
{while(i<j && A[i]>0) i++;
while(i<j && A[j]<0) j--;
if(i<j) {x=A[i]; A[i++]=A[j]; A[j--]=x; }//交换A[i] 与A[j]
}
}//算法Arrange结束.
[算法讨论]对数组中元素各比较一次,比较次数为n。

最佳情况(已排好,正数在前,负数在后)不发生交换,最差情况(负数均在正数前面)发生n/2次交换。

用类c编写,数组界偶是0..n-1。

空间复杂度为O(1).
2.判断二维数组中元素是否互不相同,只有逐个比较,找到一对相等的元素,就可结论为不是互不相同。

如何达到每个元素同其它元素比较一次且只一次?在当前行,每个元素要同本行后面的元素比较一次(下面第一个循环控制变量p的for循环),然后同第i+1行及以后各行元素比较一次,这就是循环控制变量k和p的二层for循环。

int JudgEqual(ing a[m][n],int m,n)
//判断二维数组中所有元素是否互不相同,如是,返回1;否则,返回0。

{for(i=0;i<m;i++)
for(j=0;j<n-1;j++)
{ for(p=j+1;p<n;p++) //和同行其它元素比较
if(a[i][j]==a[i][p]) {printf(“no”); return(0); }
//只要有一个相同的,就结论不是互不相同
for(k=i+1;k<m;k++) //和第i+1行及以后元素比较
for(p=0;p<n;p++)
if(a[i][j]==a[k][p]) {printf(“no”); return(0); } }// for(j=0;j<n-1;j++)
printf(yes”); return(1); //元素互不相同
}//算法JudgEqual结束。

相关文档
最新文档