当前位置:文档之家› 数据结构(第二版) 第五章 答案

数据结构(第二版) 第五章 答案

4.
i
j
e
0
0
1
0
4
2
2
0
4
2
1
5
4
3
6
5.(((a,b,()),(),a,(b)),())
6.
程序设计题
1.
11.intgenlistDepth( BSLinkList list ){ /* list存放广义链表的首地址,该算法返回广义链表的深度*/
2BSLinkList stack1[ M ], p; /* stack1用来记录子表的起始位置*/
22depth = stack2[ top-- ];
23p = p->link;
24}( p != NULL && top != -1 );
25}
26returnmaxdep+1;
27}
2.
#include<stdio.h>
#include<string.h>
main()
{
int a[100][100],m;
第5章
一.选择题
1.B 2.A 3.C 4.B 5.D 6.D 7.C 8.D
9.C 10.B 11.C 12.D 13.A 14.C 15.D
16.D 17.C 18.D 19.B 20.C 21.A 22.B
23.B 24.C 25.D
二.填空题
1.i(i+1)/2+j
2. 174 139
3.
4.对称上三角(下三角)矩阵
int n,i,j,k,max,flat=0,l;
scanf("%d,%d",&n,&l);
for(i=0;i<n;i++)
for(j=0;j<l;j++)
scanf("%d",&a[i][j]);
for(i=0;i<n;i++)
{
m=a[i][0];
for(j=0;j<l;j++)
if(a[i][j]>m)
3/* stack2用来记录子表当前的深度,depth用来表示当前所求子表的深度,maxdep用来记录当前已求出的那些子表的最大深度, stack1和stack2共用一个栈顶指针*/
4intstack2[ M ], depth = 0, maxdep = 0, top = -1;
5p = list->pointer; /*将p指针指向广义链表的第一个元素所在的链接点*/
s=s-A[0][0]-A[0][n-1]-A[m-1][0]-A[m-1][n-1]; /*减去4个角的重复元素值*/
printf("s=%d\n",s);
}
(2)
void proc2(matrix A) {
int s=0,i,j;
i=0;
while(i<m)
{
j=0;
while(j<n)
{
s=s+A[i][j];
for(i=0;i<m;i++) /*建立数组*/
for(j=0;j<n;j++)
scanf("%d",&A[i][j]);
proc1(A); /*调用proc1()*/
proc2(A); /*调用proc2()*/
proc3(A); /*调用proc3()*/
{
m=a[i][j];
max=j;
}
for(k=0;k<n;k++)
if(a[k][max]<m)
{ printf("No\n");
flat++;
break;
}
if(flat==0)
printf("%c\n",m);
}
}
3.
(1)
#include<stdio.h>
void proc1(matrix A) {
j=j+2; /*跳过一列*/
}
i=i+2; /*跳过一行*/
}
printf("s=%d\n",s);
}
(3)
void proc3(matrix A)
{
int i,s;
if(m!=n) printf("m!=n");
else
{
s=0;
for(i=0;i<m;i++)
s=s+A[i][i]; /*求第一列对角线之和*/
2.元素分布特殊的矩阵,列如三角矩阵,对称矩阵,带状矩阵,稀疏矩阵等,叫做特殊矩阵。特殊矩阵压缩存储的基本思想是压缩存储,即值相同的元素只分配一个存储空间,零元素不分配存储空间。
3.设m*n矩阵中有t个非零元素且t<<m*n,这样的矩阵叫做稀疏矩阵。系数矩阵存储时可只存储非零元素,由于非零元素的分布一般是没有规律的,因此在存储非零元素的同时,还必须存储非零元素所在的行号、列号,才能迅速确定一个非零元素是矩阵中的哪一个元素。
6if( p != NULL ){
7do{
8while( p != NULL ){
9stack1[ ++top ] = p; /*记录当前子表的起始位置*/
10stack2[ top ] = depth; /*记录当前所求子表的深度*/
11if( p->flag == 1 ){ /*当前链接点元素是子表*/
12depth++; /*当前层次数加1 */
13p = p->pointer; /*移动到下一层*/
14}
15else
16p = NULL;
17}
18if( maxdep < depth ){
19maxdep = depth; /*记录当前已求得的最大层次数*/
20}
21p = stack1[ top ]; /*退回到上一层,移动到下一个元素,查看是否有子表*/
int s=0,i,j;
for(i=0;i<m;i++) /*第一列*/
s=s+A[i][1];
for(i=0;i<m;i++) /*最后一列*/
s=s+A[i][n];
for(j=0;j<n;j++) /*第一行*/
s=s+A[1][j];
for(j=0;j<m;j++) /*最后一行*/
s=s+A[m][j];
5. d
6.表头表尾
7.(2,3,5)
8.行列
9. 3 3
10. O(n)
11. O(n2)
12.行列
13.()((),(())) 3 3
14. (a) ((b),((c)))
三.判断题
1.√
2.√
3.√
4.√
5.×
6.×
7.√
8.√
9.√
10.√
四、简答题
1.二维数组存储时,要把它的元素映像存储在一维存储器中,存储时若按先行后列的顺序存储,叫做二维数组的行序优先存储。若按先列后行的顺序存储,叫做二维数组的列序优先存储。
for(i=0;i<n;i++)
s=s+A[n-i-1][i]; /*累加第二条对角线之和*/
printf("s=%d\n",s);
}
}
void main()
{
int m,n,i,j;
matrix A;
printf("m,n:");
mp;n);
printf("元素值:\n");
相关主题