数据结构课后习题和解析第五章.docx

上传人:b****5 文档编号:6829631 上传时间:2023-01-10 格式:DOCX 页数:7 大小:60.18KB
下载 相关 举报
数据结构课后习题和解析第五章.docx_第1页
第1页 / 共7页
数据结构课后习题和解析第五章.docx_第2页
第2页 / 共7页
数据结构课后习题和解析第五章.docx_第3页
第3页 / 共7页
数据结构课后习题和解析第五章.docx_第4页
第4页 / 共7页
数据结构课后习题和解析第五章.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

数据结构课后习题和解析第五章.docx

《数据结构课后习题和解析第五章.docx》由会员分享,可在线阅读,更多相关《数据结构课后习题和解析第五章.docx(7页珍藏版)》请在冰豆网上搜索。

数据结构课后习题和解析第五章.docx

数据结构课后习题和解析第五章

第五章习题

5.1假设有6行8列的二维数组A,每个元素占用6个字节,存储器按字节编址。

已知A的基地址为1000,计算:

数组A共占用多少字节;

数组A的最后一个元素的地址;

按行存储时元素A36的地址;

按列存储时元素A36的地址;

5.2设有三对角矩阵An×n,将其三条对角线上的元素逐行地存于数组B(1:

3n-2)中,使得B[k]=aij,求:

(1)      用i,j表示k的下标变换公式;

(2)      用k表示i,j的下标变换公式。

5.3假设稀疏矩阵A和B均以三元组表作为存储结构。

试写出矩阵相加的算法,另设三元组表C存放结果矩阵。

5.4在稀疏矩阵的快速转置算法5.2中,将计算position[col]的方法稍加改动,使算法只占用一个辅助向量空间。

5.5写一个在十字链表中删除非零元素aij的算法。

5.6画出下面广义表的两种存储结构图示:

  ((((a),b)),(((),d),(e,f)))

5.7求下列广义表运算的结果:

(1)      HEAD[((a,b),(c,d))];

(2)      TAIL[((a,b),(c,d))];

(3)      TAIL[HEAD[((a,b),(c,d))]];

(4)      HEAD[TAIL[HEAD[((a,b),(c,d))]]];

(5)      TAIL[HEAD[TAIL[((a,b),(c,d))]]];

 

 

实习题

若矩阵Am×n中的某个元素aij是第i行中的最小值,同时又是第j列中的最大值,则称此元素为该矩阵中的一个马鞍点。

假设以二维数组存储矩阵,试编写算法求出矩阵中的所有马鞍点。

 

第五章答案

5.2设有三对角矩阵An×n,将其三条对角线上的元素逐行的存于数组B[1..3n-2]中,使得B[k]=aij,求:

(1)用i,j表示k的下标变换公式;

(2)用k表示i、j的下标变换公式。

【解答】

(1)k=2(i-1)+j

(2)i=[k/3]+1,j=[k/3]+k%3 ([]取整,%取余)

5.4在稀疏矩阵的快速转置算法5.2中,将计算position[col]的方法稍加改动,使算法只占用一个辅助向量空间。

【解答】算法

(一)

  FastTransposeTSMatrix(TSMartrix A, TSMatrix *B)

  {/*把矩阵A转置到B所指向的矩阵中去,矩阵用三元组表表示*/

intcol,t,p,q;

intposition[MAXSIZE];

B->len=A.len; B->n=A.m; B->m=A.n;

if(B->len>0)

{

 position[1]=1;

 for(t=1;t<=A.len;t++)

    position[A.data[t].col+1]++;  /*position[col]存放第col-1列非零元素的个数,即利用pos[col]来记录第col-1列中非零元素的个数*/

/*求col列中第一个非零元素在B.data[]的位置,存放在position[col]中*/

for(col=2;col<=A.n;col++)   

    position[col]=position[col]+position[col-1];

for(p=1;p

{

  col=A.data[p].col;

  q=position[col];

  B->data[q].row=A.data[p].col;

  B->data[q].col=A.data[p].row;

  B->data[q].e=A.data[p].e;

  Position[col]++;

}

}

}

 

算法

(二)

FastTransposeTSMatrix(TSMartrix A, TSMatrix *B)

  {

intcol,t,p,q;

intposition[MAXSIZE];

B->len=A.len; B->n=A.m; B->m=A.n;

if(B->len>0)

{

 for(col=1;col<=A.n;col++)

    position[col]=0;

 for(t=1;t<=A.len;t++)

  position[A.data[t].col]++;       /*计算每一列的非零元素的个数*/

/*从最后一列起求每一列中第一个非零元素在B.data[]中的位置,存放在position[col]中*/

for(col=A.n,t=A.len;col>0;col--) 

{ t=t-position[col];

  position[col]=t+1;

}

for(p=1;p

{

 col=A.data[p].col;

  q=position[col];

  B->data[q].row=A.data[p].col;

  B->data[q].col=A.data[p].row;

  B->data[q].e=A.data[p].e;

  Position[col]++;

}

}

}

 

5.6画出下面广义表的两种存储结构图示:

  ((((a),b)),(((),d),(e,f)))

【解答】

第一种存储结构

第二种存储结构

 

 

5.7求下列广义表运算的结果:

(1)     HEAD[((a,b),(c,d))];               (a,b)

(2)     TAIL[((a,b),(c,d))];                ((c,d)) 

(3)     TAIL[HEAD[((a,b),(c,d))]];           (b)

(4)     HEAD[TAIL[HEAD[((a,b),(c,d))]]];     b

(5)     TAIL[HEAD[TAIL[((a,b),(c,d))]]];      (d)

 

提示:

第五章  数组和广义表

 习 题

1.            假设有6行8列的二维数组A,每个元素占用6个字节,存储器按字节编址。

已知A的基地址为1000,计算:

(1)  数组A共占用多少字节;(288)

(2)  数组A的最后一个元素的地址;(1282)

(3)  按行存储时,元素A36的地址;(1126)

(4)  按列存储时,元素A36的地址;(1192)

[注意]:

本章自定义数组的下标从1开始。

2.设有三对角矩阵(aij)n×n,将其三条对角线上的元素逐行地存于数组B(1:

3n-2)中,使得B[k]=aij,求:

(1)     用i,j表示k的下标变换公式;

(2)     用k表示i,j的下标变换公式。

i=k/3+1, j=k%3+i-1=k%3+k/3

或:

i=k/3+1, j=k-2×(k/3)

2.            假设稀疏矩阵A和B均以三元组表作为存储结构。

试写出矩阵相加的算法,另设三元组表C存放结果矩阵。

[提示]:

参考P.28例、P.47例。

 

4.在稀疏矩阵的快速转置算法5.2中,将计算position[col]的方法稍加改动,使算法

只占用一个辅助向量空间。

[提示]:

(1)          position[k]中为第k列非零元素个数,k=1,2,…,n

(2)          position[0]=1;(第1列中第一个非零元素的正确位置)

(3)          position[k]=position[k–1]+position[k], k=1,2,…,n

(4)          position[k]=position[k–1], k=n, n–1,…,1  

5.写一个在十字链表中删除非零元素aij的算法。

[提示]:

“删除”两次,释放一次。

6.画出下面广义表的两种存储结构图示:

  ((((a),b)),(((),d),(e,f)))

 第一种存储结构(自底向上看)

 

 

 7.求下列广义表运算的结果:

(1)         HEAD[((a,b),(c,d))];

(2)         TAIL[((a,b),(c,d))];

(3)         TAIL[HEAD[((a,b),(c,d))]];

(4)         HEAD[TAIL[HEAD[((a,b),(c,d))]]];   b

(5)         TAIL[HEAD[TAIL[((a,b),(c,d))]]];    (d)

   

参考题

8.试设计一个算法,将数组A(0:

n-1)中的元素循环右移k位,并要求只用一个元素大小的附加存储,元素移动或交换次数为O(n)。

9.假设按低下标优先(以最左的下标为主序)存储整数数组A(1:

8,1:

2,1:

4,1:

7)时,第一个元素的字节地址是100,每个整数占4个字节,问元素A(4,2,3,5)的存储地址是什么?

10.高下标优先(以最右的下标为主序)存储整数数组A(1:

8,1:

2,1:

4,1:

7)时,顺序列出数组A的所有元素。

11.试编写一个以三元组形式输出用十字链表表示的稀疏矩阵中非零元素及其下标的算法。

 

实习题

1.            若矩阵Am×n中的某个元素aij是第i行中的最小值,同时又是第j列中的最大值,则称此元素为该矩阵中的一个马鞍点。

假设以二维数组存储矩阵,试编写算法求出矩阵中的所有马鞍点。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1