广州大学松田学院6数据结构复习题-广义表-参考答案

合集下载

数据结构(数组和广义表)习题与答案

数据结构(数组和广义表)习题与答案

1、以行序优先顺序存储数组A[5][5];假定A[0][0]的地址为1000, 每个元素占4个字节,下标变量A[4][3]的地址是____。

A.1069B.1092C.1023D.1046正确答案:B2、数组a[1..6][1..5] (无0行0列)以列序优先顺序存储,第一个元素a[1][1]的地址为1000,每个元素占2个存储单元,则a[3][4]的地址是____。

A.1040B.1026C.1046D.1038正确答案:A3、设有一个5行4列的矩阵A,采用行序优先存储方式,A[0][0]为第一个元素,其存储地址为1000,A[2][2]的地址为1040,则A[3][0]的地址为_________。

A.1048B.1024C.1096D.1060正确答案:A4、设有一个10行10列的矩阵A,采用行序优先存储方式,存储全部数据需要400个字节的空间。

如果A[0][0]为第一个元素,其存储地址为1000,则A[3][6]的地址为_________。

A.1036B.1144C.1014D.10565、设有一个10行10列的矩阵A,采用行序优先存储方式。

如果A[0][0]为第一个元素,其存储地址为1000,A[2][3]的存储地址为1069,则存储一个元素需要的单元数是_________。

A.4B.1C.2D.3正确答案:D6、不能够对数据元素进行随机访问的物理结构是_________。

A.三元组顺序表B.对称矩阵的压缩存储C.三对角矩阵的压缩存储D.数组的顺序存储正确答案:A7、对特殊矩阵采用压缩存储的目的主要是_________。

A.表达变得简单B.去掉矩阵中的多余元素C.对矩阵元素的存储变得简单D.减少不必要的存储空间正确答案:D8、对n*n的对称矩阵进行压缩存储,需要保存的数据元素的个数是_________。

A.nB.n(n+1)/2C.n2D.n(n+1)9、设10*10的对称矩阵下三角保存SA[1..55]中,其中A[1][1]保存在SA[1]中,A[5][3] 保存在SA[k]中,这里k等于_________。

数据结构习题广义线性表-多维数组和广义表

数据结构习题广义线性表-多维数组和广义表

第4 章广义线性表——多维数组和广义表课后习题讲解1. 填空⑴ 数组通常只有两种运算:()和(),这决定了数组通常采用()结构来实现存储。

【解答】存取,修改,顺序存储【分析】数组是一个具有固定格式和数量的数据集合,在数组上一般不能做插入、删除元素的操作。

除了初始化和销毁之外,在数组中通常只有存取和修改两种操作。

⑵ 二维数组A中行下标从10到20,列下标从5到10,按行优先存储,每个元素占4个存储单元,A[10][5]的存储地址是1000,则元素A[15][10]的存储地址是()。

【解答】1140【分析】数组A中每行共有6个元素,元素A[15][10]的前面共存储了(15-10)×6+5个元素,每个元素占4个存储单元,所以,其存储地址是1000+140=1140。

⑶ 设有一个10阶的对称矩阵A采用压缩存储,A[0][0]为第一个元素,其存储地址为d,每个元素占1个存储单元,则元素A[8][5]的存储地址为()。

【解答】d+41【分析】元素A[8][5]的前面共存储了(1+2+…+8)+5=41个元素。

⑷ 稀疏矩阵一般压缩存储方法有两种,分别是()和()。

【解答】三元组顺序表,十字链表A 数组是一种线性结构B 数组是一种定长的线性结构C 除了插入与删除操作外,数组的基本操作还有存取、修改、检索和排序等D 数组的基本操作有存取、修改、检索和排序等,没有插入与删除操【解答】C【分析】数组属于广义线性表,数组被创建以后,其维数和每维中的元素个数是确定的,所以,数组通常没有插入和删除操作。

⑷ 对特殊矩阵采用压缩存储的目的主要是为了()A 表达变得简单B 对矩阵元素的存取变得简单C 去掉矩阵中的多余元素D 减少不必要的存储空间【解答】D【分析】在特殊矩阵中,有很多值相同的元素并且他们的分布有规律,没有必要为值相同的元素重复存储。

⑸ 下面()不属于特殊矩阵。

A 对角矩阵B 三角矩阵C 稀疏矩阵D 对称矩阵【解答】C⑹ 若广义表A满足Head(A)=Tail(A),则A为()A ( )B (( ))C (( ),( )) D(( ),( ),( ))【解答】BA 广义表是一种多层次的结构B 广义表是一种非线性结构C 广义表是一种共享结构D 广义表是一种递归【解答】B【分析】从各层元素各自具有的线性关系讲,广义表属于线性结构。

2010广东省数据结构理论考试试题及答案

2010广东省数据结构理论考试试题及答案

1、已知广义表L=((x,y,z),a,(u,t,w)),从L 表中取出原子项t 的操作是( D )。

A) Head(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)))))=( D )。

A) (G) B) (D) C) C D) D3、与无向图相关的术语有( C )。

A)强连通图 B)入度C)路径 D)弧4、设单链表中指针p指着结点A,若要删除A之后的结点(若存在),则需要修改指针的操作为( A )。

A)p->next=p->next->next B)p=p->nextC)p=p->nexe->next D)p->next=p5、在一个链队列中,假定front和rear分别为队首和队尾指针,则插入一个结点的操作为( B )。

A)front=front->next; B) rear=rear->next;C) rear=front->next; D) front=rear->next ;6、设给定问题的规模为变量n,解决该问题的算法所需时间为Tn=O(f(n)),Tn表示式中记号O表示( A )。

A)一个数量级别B)一个平均值C)一个最大值 D)一个均方值7、串的逻辑结构与( D )的逻辑结构不同。

A)线性表 B)栈C)队列 D)树8、采用链结构存储线性表时,其地址( B )。

A)必须是连续的 B)连续不连续都可以C)部分地址必须是连续 D)必须是不连续的9、下列各种数据结构中属于线性结构的有( A )。

A)栈 B) 二叉树C) 广义表 D) 图10、数据结构研究的内容是( D )。

广州大学松田学院2数据结构复习题-线性表-参考答案

广州大学松田学院2数据结构复习题-线性表-参考答案

2数据结构复习题(线性表)一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(×)(1)线性表的链式存储结构优于顺序存储。

(×)(2)链表的每个结点都恰好包含一个指针域。

(√)(3)在线性表的链式存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。

(×)(4)顺序存储方式的优点是存储密度大,插入、删除效率高。

(×)(5)线性链表的删除算法简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。

(×)(6)顺序表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。

(√)(7)线性表链式存储的特点是可以用一组任意的存储单元存储表中的数据元素。

(√)(8)线性表采用顺序存储,必须占用一片连续的存储单元。

(×)(9)顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。

(ㄨ)(10)插入和删除操作是数据结构中最基本的两种操作,所以这两种操作在数组中也经常使用。

二.填空题(1)顺序表中逻辑上相邻的元素在物理位置上必须相连。

(2)线性表中结点的集合是有限的,结点间的关系是一对一关系。

(3)顺序表相对于链表的优点是:节省存储和随机存取。

(4)链表相对于顺序表的优点是:插入、删除方便。

(5)采用顺序存储结构的线性表叫顺序表。

(6)(7)链表相对于顺序表的优点是插入、删除方便;缺点是存储密度(8)在双链表中要删除已知结点*P(9)在单链表中要在已知结点*P之前插入一个新结点,需找到*P的直接前趋结点的地址,其查找的时间复杂度为 O(n) 。

(10)单链表中需知道头指针才能遍历整个链表。

(11)性表中第一个结点没有直接前趋,称为开始结点。

(12)在一个长度为n的顺序表中删除第i个元素,要移动n-i 个元素。

(13)在一个长度为n的顺序表中,如果要在第i个元素前插入一个元素,要后移n- i +1 个元素。

(14)在无头结点的单链表中,第一个结点的地址存放在头指针中,而其它结点的存储地址存放在前趋结点的指针域中。

数据结构复习数组和广义表

数据结构复习数组和广义表
将一个a100100的三对角矩阵以行主序存入一维数组b298中元素a6564在b数组中的位置k等3稀疏矩阵的存储方式三元组法矩阵a中有非零元个数s远远小于矩阵元素的总数则称a为稀疏矩阵
数据结构复习 (数组和广义表)
第5章 数组和广义表
一、数组 1、数组的顺序存储方式和地址计算方法 数组的存储方式有:
(1)对称矩阵和上(或下)三角矩阵的压缩存储。 例:下三角矩阵的存储,按行主序方式。 k=i(i+1)/2+j 当i>=j时 k= 0 当i<j时 a[i][j] 在一维数组s[k] 中(i>=j)或为0(i<j)。 (2)对角矩阵 例:以三对角矩阵为例,按行主序方式存储, 仅存储非零部分。 将一个a[100][100]的三对角矩阵以行主序存入一 维数组B[298]中,元素a[65][64]在B数组中的位置k等 于 。
3、稀疏矩阵的存储方式 ——三元组法 矩阵A中有非零元个数s远远小于矩阵元素的 i j v 总数,则称A为稀疏矩阵。
1 2 3 1 6 3 12 9 -3 14 24
M=
0 12 9 0 0 0 0 0 0 000 -3 0 0 0 0 14 0 0 24 1、广义表的定义
广义表 ls=(d1,d2,……,dn)。其中每个元素可以是原子, 也可以是子表。 称d1为表头,d2,……,dn为表尾。 n: 表示广义表的长度,括号层数表示广义表的深度。
2、广义表与线性表的区别
线性表(a1,a2,……,an)中每个元素都具有相同的类型, 有两种存储结构:顺序表和链表。 广义表(d1,d2,……,dn)中每个元素可以是原子,也可以 是子表。可以将广义表看作是线性表的推广。由于原子和子 表的类型不同,所以只能用链式存储结构。

数据结构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。

数据结构 数组与广义表练习

数据结构 数组与广义表练习

1.多维数组之所以有行优先顺序和列优先顺序两种存储方式是因为( )A .数组的元素处在行和列两个关系中B .数组的元素必须从左到右顺序排列C .数组的元素之间存在次序关系D .数组是多维结构,内存是一维结构 2.从广义表LS =((p, q), r, s )中分解出原子q 的运算是( ) A .tail (head (LS))B .head (tail (head (LS)))C .head (tail (LS))D .tail (tail (head (LS)))3.二维数组A [12][18]采用列优先的存储方法,若每个元素各占3个存储单元,且第1个元素的地址为150,则元素A [9][7]的地址为( )A. 429B. 432C. 435D. 4384.二维数组A [10][20]采用按行为主序的存储方式,每个元素占4个存储单元,若A [0][0]的存储地址为300,则A [10][10]的地址为( )A.700B.1120C.1180D.11405.假设以行优先顺序存储三维数组R[6][9][6],其中元素R[0][0][0]的地址为2100,且每个元素占4个存储单元,则存储地址为2836的元素是( )A .R[3][3][3]B .R[3][3][4]C .R[4][3][5]D .R[4][3][4]6.二维数组A[8][9]按行优先顺序存储,若数组元素A[2][3]的存储地址为1087,A[4][7]的存储地址为1153,则数组元素A[6][7]的存储地址为( )A .1207B .1209C .1211D .12137.对广义表L=((a,b),(c,d),(e,f))执行操作tail(tail(L))的结果是( )A. (e,f)B. ((e,f))C. (f)D. ( )8.设有二维数组A [n ][n ]表示如下:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡ 653421, 则A [i ][i ](0≤i ≤n-1)的值为( )A .i*(i-1)/2B.i*(i+1)/2C.(i+2)*(i+1)/2D.i 2/2 9.对广义表L=((a,b),((c,d),(e,f)))执行head(tail(head(tail(L))))操作的结果是( )A .dB .eC .(e)D .(e,f )10.假设按行优先顺序将一个20阶的三对角矩阵A 压缩存储在一维数组Q 中,其中Q[0]存放矩阵的第1个元素a 1,1,那么矩阵元素a 3,4在Q 中的存储位置k=_______。

数据结构第4章作业参考答案

数据结构第4章作业参考答案

第4章(数组和广义表)作业参考答案一、单项选择题1.将一个A[1..100,1..100]的三对角矩阵,按行优先压缩存储到一维数组B[1‥298]中,A 中元素A[66][65]在B数组中的位置K为(C )。

A. 198B. 197C. 195D. 1962.广义表(a,(b,c),d,e)的表头为( A )。

A. aB. a,(b,c)C. (a,(b,c))D. (a)3.在三对角矩阵中,非零元素的行标i和列标j的关系是( A )。

A. |i-j|≤1B. i>jC. i==jD. i<j4.广义表L=(a,(b,c)),进行Tail(L)操作后的结果为( D )。

A. cB. b,cC.(b,c)D.((b,c))5.设二维数组A[1..m,1..n](即m行n列)按行存储在数组B[1..m*n]中,则二维数组元素A[i,j]在一维数组B中的下标为( D )。

A. j*m+i-1B. (i-1)*n+j-1C. i*(j-1)D. (i-1)*n+j6.广义表(( ),( ),( ))的深度为( C )。

A. 0B. 1C. 2D. 37.假设以行序为主序存储二维数组A[0..99,0..99],设每个数据元素占2个存储单元,基地址为10,则LOC(A[4][4])=( C )。

A. 1020B. 1010C. 818D. 8088.已知广义表A=((a,b),(c,d)),则head(A)等于( A )。

A. (a,b)B. ((a,b))C. a,bD. a9.已知一个稀疏矩阵的三元组表如下:(1,2,3),(1,6,1),(3,1,5),(3,2,-1),(4,5,4),(5,1,-3)则其转置矩阵的三元组表中第3个三元组为( C )。

A. (2,3,-1)B. (3,1,5)C. (2,1,3)D. (3,2,-1)10.广义表((b,c),d,e)的表尾为( C )。

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

6数据结构复习题(广义表)一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(√)(1)n维的多维数组可以视为n-1维数组元素组成的线性结构。

(√)(2)稀疏矩阵中非零元素的个数远小于矩阵元素的总数。

(ㄨ)(3)上三角矩阵主对角线以上(不包括主对角线中的元素),均为常数C。

(√)(4)数组元素可以由若干个数据项组成。

(√)(5)数组的三元组表存储是对稀疏矩阵的压缩存储。

(ㄨ)(6)任何矩阵都可以进行压缩存储。

(ㄨ)(7)广义表是线性表的推广,所以广义表也是线性表。

(ㄨ)(8)广义表LS=(a0,a1,……a n-1),则a n-1是其表尾。

(√)(9)广义表((a,b),a,b)的表头和表尾是相等的。

(√)(10)一个广义表的表尾总是一个广义表。

二.填空题(1)多维数组的顺序存储方式有按行优先顺序存储和按列优先顺序存储两种。

(2)在多维数组中,数据元素的存放地址可以直接通过地址计算公式算出,所以多维数组是一种随机存取结构。

(3)在n维数组中的每一个元素最多可以有 n 个直接前驱。

(4)输出二维数组A[n][m]中所有元素值的时间复杂度为O(n*m) 。

(5)数组元素a[0..2][0..3]的实际地址上2000,元素长度是4,则LOC[1,2]= 2024 。

LOC[1,2]=2000+(1*4+2)*4(6)稀疏矩阵的三元组有 3 列。

(7)稀疏矩阵的三元组中第1列存储的是数组中非零元素所在的行数。

(8)n阶对称矩阵,如果只存储下三角元素,只需要 n(n-1)/2 个存储单元。

(9)稀疏矩阵A如下图所示,其非零元素存于三元组表中,三元组(4,1,5)按列优先顺序存储在三元组表的第 4 项。

A=稀疏矩阵A(10)稀疏疏矩阵的压缩存储方法通常有三元组表和十字链表两种。

(11)任何一个非空广义表的表尾必定是广义表(或子表)。

(12)tail(head((a,b),(c,d))= b 。

(13)设广义表((a,b,c)),则将c分离出来的运算是 head(tail(tail(head(L)))) 。

(14)广义表((a,b),c,d),表尾是(c,d)。

(15) n阶下三角矩阵,因为对角线的上方是同一个常数,需要 n(n-1)/2+1 个存储单元。

(16)稀疏矩阵中有n个非零元素,则三元组有n 行。

(17)广义表LS=(a,(b),((c,(d))))的长度是 3 。

(18)广义表LS=(a,(b),((c,(d))))的深度是 4 。

(19)广义表L=((),L),则L的深度是∞。

(20)广义表LS=(a,(b),((c,(d))))的表尾是 ((b),((c,(d)))) 。

三.选择题(1)在一个m维数组中,( D )恰好有m个直接前驱和m个直接界后继。

A.开始结点B.总终端结点C.边界结点D.内部结点(2)对下述矩阵进行压缩存储后,失去随机存取功能是( D )。

A.对称矩阵 B.三角矩阵C.三对角矩阵 D.稀疏矩阵(3)在按行优先顺序存储的三元组表中,下述陈述错误的是( D )。

A.同一行的非零元,是按列号递增次序存储的B.同一列的非零元,是按行号递增次序存储的C.三元组表中三元组行号递增的D.三元组表中三元组列号递增的(4)对稀疏矩阵进行压缩存储是为了( B )。

A.降低运算时间 B.节约存储空间C.便于矩阵运算 D.便于输入和输出(5)若数组A[0..m][0..n]按列优先顺序存储,则aij的地址为( A )。

A.LOC(a00)+[j*m+i] B.LOC(a00)+[j*n+i]C.LOC(a00)+[(j-1)*n+i-1] D.LOC(a00)+[(j-1)*m+i-1](6)下列矩阵是一个( B )A.对称矩阵 B.三角矩阵C.稀疏矩阵 D.带状矩阵(7)在稀疏矩阵的三元组表示法中,每个三元组表示( D )。

A.矩阵中非零元素的值B.矩阵中数据元素的行号和列号C.矩阵中数据元素的行号、列号和值D.矩阵中非零数据元素的行号、列号和值(8)已知二维数组A[6][10],每个数组元素占4个存储单元,若按行优先顺序存放数组元素a[3][5]的存储地址是1000,则a[0][0]的存储地址是( B )。

A.872 B.860 C.868 D.8641000=B+(3*10+5)*4 B=1000-(3*10+5)*4=1000-140=860(9)广义表是线性表的推广,它们之间的区别在于( A )。

A.能否使用子表 B.能否使用原子项C.是否能为空 D.表的长度(10)下列广义表属于线性表的是( B )。

A.E=(a,E) B.E=(a,b,c)C.E=(a,(b,c)) D.E=(a,L);L=()(11)广义表((a,b),c,d)的表尾是( D )。

A.a B.d C.(a,b) D.(c,d)(12)广义表A=((x,(a,b)),(x,(a,b),y)),则运算head(head(tail(A)))为( A )。

A.x B.(a,b) C.(x,(a,b)) D.A(13)tail(head((a,b),c,(c,d)))的结果是( B )。

A.b B.(b) C.(a,b) D.(d)(14)若广义表满足head(L)=tail(L),则L的形式是( B )A.空表 B.若L=(a1,…,a n),则a1=(a2,…a n) C.若L=(a1,…,a n),则a1=a2=…=a n) D.((a1),(a1))(15)数组是一个( B )线性表结构。

A.非 B.推广了的C.加了限制的 D.不加限制的(16)数组A[0:1,0:1,0:1]共有( D )元素。

A.4 B.5 C.6 D.8(17)广义表((a,b),c,d)的表头是( C )。

A.a B.d C.(a,b) D.(c,d)(18)广义表A=(a),则表尾为( C )。

A.a B.(()) C.空表D.(a)(19)以下( C )是稀疏矩阵的压缩存储方法。

A.一维数组 B.二维数组C.三元组表 D.广义表(20)设广义表D=(a,b,c,D), 其深度为( D )。

A.2 B.3 C.4 D.∞四.算法阅读题1.已知A[]是一个下三角矩阵,下述算法的功能是什么?int f1(int A[],int n){ // 设B[0..(n+1)n/2-1]存放下三角元素int i,k,s=0;k=0;s=A[0];for (i=0;i<n-1;i++){ k=k+i+2;s=s+A[k];}return s;}算法功能:求矩阵主对角线上元素之和。

分析:注意k的变化依次为:0,2,5,9,14,正好是a ii在A中的存储位置。

在循环中k 每次增加i+2。

第i行主对角线上的元素a ii,其在A中的位置为:i(i+1)/2+i; (1)第i+1行主对角线上的元素a i+1 i+1,其在A中的位置为:(i+1)(i+2)/2+(i+1), (2)(2)-(1)得i-2。

2.在按行优先顺序存储的三元组表中,求某列非零元素之和的算法如下,填空以完成算法。

#define SMAX 100 // 定义一个足够大的三元组表typedef struct{int i,j,v; // 非零元素的行、列、值}SPNode; // 三元组类型typedef struct // 定义稀疏矩阵{ int m,n,t; // 矩阵的行、列及非零元素的个数 SPNode data[SMAX]; // 三元组表}SPMatrix; // 三元组表的存储类型if f2(SPNode *a,col){ // 求第col列非零元素之和int k,sum=0;if ( ① a->t<=0 )printf(“a<=0”);if ( ② col<0 || col >=a->n )printf(“列错!”);for (③ k=0 ; k<a->t ; ④ k++ )if (a->tada[k].j==n)sum= ⑤ sum + a->data[k].v ;return sum;}五.编程题1.试编写求一个三元组表的稀疏矩阵对角线元素之和的算法。

#include "stdio.h"#define ERROR –99999typedef struct{ int row;int col;int data;}Triple;int MDSum(Triple *a){ int i;int sum=0;if (a[0].row!=a[0].col)return ERROR;for (i=1;i<=a[0].data;i++){ if (a[i].row==a[i].col)sum+=a[i].data;}return sum;}2.试编写求广义表中原子元素个数的算法。

解:设j 为原子个数,则求广义表中原子元素个数的算法可递归定义如下:LS 为空表尾原子元素个数+1LS 非空且表头为原子元素表头子表原子元素个数+表尾原子元素个数+1LS 非空且表头子表int atomnum(Gnode *head) {if (head==NULL) return 0; if (head->tag==0)return(atomnum(head->next)+1); elsereturn(atomnum(head->next)+atomnum(head->val.sublist)); }3.试编写求广义表最大中原子元素个数的算法。

int maxele(Gnode *head) {int m=0,a; while(head) {if (head->tag==1){ a=maxele(head->val.sublist); if (a>m) m=a; } elseif (head->val.data>m) m=head->val.data; head=head->next; }return m; }j=【例7】在按行存储的三元组表中,求某列(col)的非零元素之和的算法如下,请填空以完成算法。

#define SMAX 100 // 定义一个足够大的三元组表struct SPNode // 定义三元组{int i,j,v; // 三元组非零元素的行、列和值};struct sparmatrix // 定义稀疏矩阵{int row,col,terms; // 稀疏矩阵行、列和非零元素的个数S PNode data[SMAX]; // 三元组表}TTT;int f2 (TTT *a, col) // 求第col列非零元素之和{ int i,sum=0;if ( ①)Error(“非零元素的个数是不大于0”);if ( ②)Error(“列号不合法”);for( ③; ④; k++ )if (a->data[k].j==col)sum+= ⑤;}return sum;}分析:本算法首先检查非零元素的个数是否大于0,以及给定的列号是否合法。

相关文档
最新文档