ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:310.43KB ,
资源ID:6462511      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6462511.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(课后习题.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

课后习题.docx

1、课后习题第三章 课后习题 332 对角矩阵的压缩存储 所谓对角矩阵是指矩阵中的所有非零元素都集中在以主对角线为中心的带状区域中,即除了主对角线上和直接在主对角线上、下方对称的若干条对角线上的元素之外,其余元素均为零。下面给出的矩阵B就是一个对角矩阵(确切地说是一个三对角矩阵,这里,我们仅以三对角矩阵为例子)。三对角矩阵一共有3n2个非零元素。我们可以按照某个原则(或者以行序为主序的分配方式,或者以列序为主序的分配方式,或者按照对角线的顺序进行分配)将对角矩阵B的所有非零元素压缩存储到一个一维数组LTB3n2中。这里,不妨仍然以行序为主序的分配方式对B进行压缩存储,当B中任一非零元素Bij与LT

2、Bk之间存在着如下一一对应关系k=2*i+j-3时,则有Bij=LTBk。称LTB3n2为对角矩阵B的压缩存储,如下图所示。 上面讨论的几种特殊矩阵中,非零元素的分布都具有明显的规律,因而都可以被压缩 存储到一个一维数组中,并且能够确定这些矩阵的每一个元素(或非零元素)在一维数组 中的位置。但是,对于那些非零元素在矩阵中的分布没有规律的特殊矩阵(如稀疏矩阵), 则需要寻求其他的方法来解决压缩存储问题。35 稀疏矩阵的十字链表表示 上一节讨论了用三元组表的形式来存储一个稀疏矩阵的方法。但是,在实际应用中,当稀疏矩阵中非零元素的位置或者个数经常发生变化时,使用三元组表就不太方便了。本节将介绍稀疏矩

3、阵的另一种表示方法,即十字链表表示。如何用链表形式来表示一个稀疏矩阵呢?方法之一就是将所有非零元素以行序为主序方式(当然也可以以列序为主序方式)采用循环链表链接起来。链结点的构造由四个域组成:其中i,j分别表示某一个非零元素所在的行号与列号;value表示该非零元素的值; link域用来指向下一个非零元素所在的链结点,它是一个指针。另外,再设置一个链表头结点,其构造如下: 其中,m,n分别表示稀疏矩阵的行数与列数;t为稀疏矩阵非零元素的总个数;link域用来指向第一个非零元素对应的链结点。例如,对于如下一个稀疏矩阵:若采用行序为主序方式(每行又按列的先后顺序)依次将所有非零元素链接起来,则得到

4、如图34所示的一个带有头结点的循环链表。 这种表示方法最明显的一个缺点就是,当要访问某行某列的一个非零元素时,必须从链表的最前面那个链结点开始进行搜索,其效率之低可想而知。 一个能提高访问效率的方法就是采用十字链表表示。这种方法为稀疏矩阵的每一行设置一个单独的行循环链表,同样也为每一列设置一个单独的列循环链表。这样,稀疏矩阵中的每一个非零元素同时包含在两个链表中,即包含在它所在的行链表与所在的列链表中,也就是这两个链表的交汇处。对于一个mXn的稀疏矩阵,分别建立m个行的循环链表与n个列的循环链表,每个非零元素用一个链结点来存储。链结点的结构可以设计为 其中,rOW,c01,value分别表示某

5、非零元素所在的行号、列号和相应的元素值;down与right分别称为向下指针与向右指针,它们分别用来链接同一列中的与同一行中的某非零元素结点。也就是说,稀疏矩阵中同一行的所有非零元素是通过right指针链接成一个行链表,同一列中的所有非零元素是通过down指针链接成一个列链表。而对每一个非零元素而言,它既是某个行链表中的一个链结点,同时又是某个列链表中的一个链结点,这个非零元素好比处在一个十字路口,故称这种链表表示为十字链表表示法。 作为链表,应该用某种方式能访问表中的第一个结点,为此,对于m个行链表,分别设置m个行链表表头结点。表头结点的构造与链表中其他链结点一样,只是令row与凹1域的值均

6、为0,right域指向相应行链表的第一个链结点。同理,对于n个列链表,分别设置n个列链表表头结点。头结点结构也同其他链结点一样,只是令rOW与c01的值均为0,down域指向相应列链表的第一个链结点。另外,通过value域把所有这些表头链结点也链接成一个循环链表。 十字链表中的链结点类型可以描述如下: typedefstructnode int row,col; union ElemType val; struct nodeptr; 1value; struct node 1 right,down; 1 CNode,xCrossLink; 定义十字链表结点类型x从m个行链表的表头结点与n个列链

7、表的表头结点的设置情况看到,行链表的头结点只用了right域作为指针,而列链表的头结点只用了down域与 value域,其他域没有使用。因此,可以设想原来的(m+n)个头结点实际上可以合并成 MAX(m,n)。为此,再设置一个结点作为头结点链表的头结点,不妨称之为总头结点,其结构如下所示:mnLinkt 其中,m,n分别为稀疏矩阵的行数与列数;t为非零元素的总个数;1ink指向头结点链表的第一个头结点。 总头结点的类型可以如下描述: typedefstruct int m,n,t,nil; CrossLink x link; HNode,*HLink; x定义十字链表总头结点类型x 综上所述,

8、若给出一个稀疏矩阵B如下,则它的十字链表表示如图35所示。 下面给出创建一个具有m行n列、有t个非零元素的稀疏矩阵的十字链表的算法。 稀疏矩阵用三元组表的形式作为输入。首先输入稀疏矩阵的行数、列数以及非零元素总个数(m,n,t),然后依次读入个三元组。算法中用到了一个辅助数组hdnode MAX(m,n)。其中,hdnodei用来分别存放第i列(也是第i行)链表的头结点的指针 (1iMAX(m,n)。 #defineMaxNl00 HLinkMREAD() HLinkHEAD,p,last,hdnodeMaxN; iht m,n t,k,i,Current_row, int rrow,ccol

9、,val; scanf(dd,&n,&n,&t); x读入矩阵的行、列和非零元素的个数 if(tn)?m:n; for(i=0;irow=0; p-col=0; p-value.ptr=P; p-rlght=p; p-down=p; *建立k个头结点;初始时第i个头结点的地址存放于hdnodei-1中x Current_row=1; last=hdnode0; for(i=1;icurrent_row) lastright=hdnodeCurrent_row1; current_row=rrow; last=hdnoderrow1; p=(CrossLink)malloc(sizeof(CNo

10、de); x申请一个新的链结点空间x prow=rrow; p-col=ccol; pvalue.val=val; last-right=p; x生成一个新的链结点x last=p; hdnodeccol1)-valueptr-down=p; 将新结点链接到相应行链表中, kfnodeccol1)-valueptr=p; x将新结点链接到相应列链表中, ; if(t!=0) last-right:hdnodecurrentrow1; x封闭最后行x for(i=0;ivalueptr-down=hdnodei;x封闭所有列链表x HEAD=(HLink)malloc(sizeof(HNode)

11、; ,申请一个总的头结点x HEAD-m=m; HEAD-n=n; HEAD-t=t; for(i=0;ivalue.ptr=nanodei+1; if(k=0) HEAD-value.ptr=HEAD; else hdnodek-1-value.ptr=HEAD; HEAD-value.ptr=hdnode0;return HEAD; 习 题31 判断题(在你认为正确的题后的括号中打,否则打X)。 (1)数组是一种线性表结构。 ( ) (2)数组最基本的操作是插入和删除。 ( ) (3)对数组的操作是基于数组下标进行的。 ( ) (4)具有特殊用途的矩阵称为特殊矩阵。 ( ) (5)只需存储

12、n阶对称矩阵的下三角部分的元素。 ( ) (6)在n阶三对角矩阵中,矩阵的每一列都有3个非零元素。 ( ) (7)稀疏矩阵的特点就是矩阵中的元素较少。 ( ) (8)采用三元组表方法存储稀疏矩阵的优点之一是可以随机地访问矩阵中的每一个非零元 素。 ( ) (9)用一维数组存储特殊矩阵的目的是为了节省存储空间。 ( ) (10)从理论上说,任何一个矩阵都可以采用三元组表方法进行存储。 ( ) 32 填空题。 (1)一般情况下,数组最基本的操作是。 (2)一个m行n列的矩阵可以看成是长度为的线性表,表中的每一个元素是长度为 m的线性表。 (3)一个m行n列的矩阵可以看成是长度为的线性表,表中的每一

13、个元素是长度为n的线性表。 (4)已知二维数组A(4)6采用行序为主序方式存储,每个元素占用4个存储单元,该数组一 共占用了个存储单元。 (5)已知二维数组A4爪6采用行序为主序方式存储,每个元素占用3个存储单元,并且 A10爪0的存储地址为1200,元素A12)14的存储地址是。 (6)已知二维数组A14爪6采用列序为主序方式存储,每个元素占用4个存储单元, 并且A34的存储地址为1234,元素A00的存储地址是。 (7)对特殊矩阵采用压缩存储方法的目的是。 (8)一个20阶五对角矩阵一共有个元素,其中有个非零元素。 (9)将n阶三对角矩阵A中所有非零元素按照行序为主序方式依次存放于数组B中

14、,非零元素Aij在B中的位置是。 33单项选择题。 (1)所谓稀疏矩阵是指的矩阵。 A零元素较多且分布无规律 B非零元素较少 C元素较少 D不适合采用二维数组表示 (2)下面的说法中,不正确的是。 A只需存放对称矩阵中包括主对角线元素在内的下(或上)三角部分的元素即可 B只需存放对角矩阵中的非零元素即可 C稀疏矩阵中值为零的元素较多,因此可以采用三元组表方法存储 D稀疏矩阵中大量值为零的元素分布有规律,因此可以采用三元组表方法存储 (3)与三元组表方法相比,稀疏矩阵采用十字链表表示的优点在于。 A便于实现增加或减少矩阵中非零元素的操作 B便于实现增加或减少矩阵元素的操作 C节省存储空间 D.可

15、以更快地查找到某个矩阵元素 (4)对稀疏矩阵采用压缩存储,其缺点之一是。 A无法判断矩阵的行数和列数 B无法根据行列号计算矩阵元素的存储地址 C无法根据行列号查找某个矩阵元素 D使得矩阵元素之间的逻辑关系更加复杂 (5)将一个20阶的五对角矩阵中所有非零元素压缩存储到一个一维数组中,该一维数组至少应该有个数组元素。 A90 B92 C94 D96 (6)将10阶三对角矩阵中的所有非零元素按照行序为主序方式依次存放于一维数组中,矩阵的第7行第8列的元素在该一维数组中。 A是第22个数组元素 B是第21个数组元素 C是第20个数组元素 D不存在 (7)将10阶三对角矩阵中的所有非零元素按照行序为主

16、序方式依次存放于一维数组中,一维数组中的第18个数组元素是矩阵的那个元素。 A第6行第3列 B第6行第7列 C。第7行第7列、 D第7行第6列 (8)若将n阶对称矩阵A按照行序为主序方式将包括主对角线元素在内的下三角形的所有元素依次存放在一个一维数组B中,则该对称矩阵在B中占用了一个数组元素。 An2 Bn*(n-1) Cn*(n+1)/2 Dn*(n-1)2 (9)若将n阶三对角矩阵A按照行序为主序方式将所有非零元素依次存放在一个一维数组B中,则该三对角矩阵在B中占用了个数组元素。 An2 B3n-2 C3n D3n+2 (10)若将对称矩阵A按照行序为主序方式将包括主对角线元素在内的下三角

17、形的所有元素依次存放在一个一维数组B中,那么,A中某元素Aij(ij)在B中的位置是。 A(i*(i1)/2+j-1 B(i*(i1)/2j1 C(j*(j1)2十i1 D(j*(j-1)/2i1 (11)对三对角矩阵A采用压缩存储的方法将所有非零元素存放于一个一维数组BC3n2中,某非零元素Aij在B中位置是。A2*i+j-2 B2*i+j+2 C2*i+j-3 D2*i+j-134已知一元多项式f(x)=4X(6)5X(4)十7X(2)-1,请写出f(x)的一维数组表示的两种方法。 35按照压缩存储的思想,对于一个具有t个非零元素的mXn阶稀疏矩阵,若采用三元组表存储方法,t到达什么程度时

18、这样做才有意义? 36 已知稀疏矩阵A65如下所示,请分别写出它的三元组表表示与十字链表表示。38 已知稀疏矩阵A为m行n列,请写出将该稀疏矩阵转换为三元组表表示的算法。39 设A为一个n阶上三角矩阵,若将此三角矩阵的所有非零元素按照列序为主序分配方式存放在数组Bn*(n+1)/2中,a11存放于B0中,请写出此三角矩阵的非零元素Aij(ij)的寻址公式。 310 请写算法,该算法将一个n阶矩阵A主对角线以下的所有元素(不包括主对角线上的元素)按照列序为主序方式依次存放于一个一维数组B中。311 请写算法,该算法将一个n阶矩阵A主对角线以下的所有元素(包括主对角线上的元素)按照行序为主序方式依

19、次存放于一个一维数组B中。 312 已知n阶对称矩阵A的下三角部分元素按照行序为主序方式依次存放于一个一维数组Bm中,请写出输出该对称矩阵的算法。 313 已知某二维数组Ann按照行序为主序方式依次为每个数组元素获取值,请写一算法,求该数组两条对角线上的元素之乘积。314 已知二维数组Amn,请写一算法,求出该数组最外围一圈的元素之和。已知二维数组Ann,请写一时间复杂度为O(1)的算法,将该数组按照顺时针方向旋转若稀疏矩阵采用三元组表表示,请写出求两个具有相同行、列数的稀疏矩阵相加的算法。 317 若在m*n阶的矩阵A中有一元素Aij满足条件:Aij既是第i行元素的最小值,同时又是第j列元素

20、的最大值,此时称Aij为A的鞍点。试写出求矩阵鞍点的算法。若矩阵中不存在鞍点,应给出相应信息。318 编写一个将十字链表表示的矩阵A转置的算法,转置的结果仍采用十字链表表示。319 若稀疏矩阵采用十字链表表示,请设计两个稀疏矩阵进行相乘运算的算法,即已知A矩阵与B矩阵,求矩阵C=A*B,并且要求C也采用十字链表表示。320 试设计一个算法,将数组An中的元素循环右移k位,要求只用一个元素大小的附加空间。 321 试设计一个时间复杂度为O(n)的算法,该算法将数组An中的元素循环右移k位,要求采用尽可能少的附加空间。322 n阶三对角矩阵A按行序为主序分配方式把所有非零元素存放于数组B3n2中,

21、Aij存放于B0中,请设计一个算法以确定数组B中元素的值(1i,jn)。 323 已知存放整型数据的一维数组An,请写一时间复杂度为O(n)的算法,该算法将数组调整为左右两部分,使得左边所有元素均为奇数,右边所有元素均为偶数。 324 已知具有n个数组元素的一维数组A,请写一算法,将该数组中所有值为0的元素都依次移到数组的前端Ai(0in-1)。历年试题1执行下列程序段后,串X的值为() S=abcdefgh; T=xyzw; substr (X,S,2,strlen(T); substr (Y,S, stelen(T),2); strcat (X,Y);Acdefgh BcdxyzwCcde

22、fxy Dcdefef2多维数组之所以有行优先顺序和列优先顺序两种存储方式是因为()A数组的元素处在行和列两个关系中 B数组的元素必须从左到右顺序排列C数组的元素之间存在次序关系 D数组是多维结构,内存是一维结构3从广义表LS((p, q), r, s)中分解出原子q的运算是()Atail (head (LS) Bhead (tail (head (LS)Chead (tail (LS) Dtail (tail (head (LS)4数组通常具有两种基本运算,即()A创建和删除 B索引和修改C读和写 D排序和查找5设有一5阶上三角矩阵A1.5,1.5,现将其上三角中的元素按列优先顺序存放在一堆

23、数组B1.15中。已知B1的地址为100,每个元素占用2个存储单元,则A3,4的地址为()A116 B118 C120 D1226.为查找某一特定单词在文本中出现的位置,可应用的串运算是( ) A.插入 B.删除 C.串联接 D.子串定位7.已知函数Sub(s,i,j)的功能是返回串s中从第i个字符起长度为j的子串,函数Scopy(s,t)的功能为复制串t到s。若字符串S=SCIENCESTUDY,则调用函数Scopy(P,Sub(S,1,7)后得到( ) A.P=SCIENCE B.P=STUDY C.S=SCIENCE D.S=STUDY8.三维数组A456按行优先存储方法存储在内存中,若

24、每个元素占2个存储单元,且数组中第一个元素的存储地址为120,则元素A45的存储地址为( ) A.356 B.358 C.360 D.3629.串S=I am a worker的长度是_。10.假设一个10阶的下三角矩阵A按列优顺序压缩存储在一维数组C中,则C数组的大小应为_。11、二维数组 X 的行下标范围是05,列下标范围是18,每个数组元素占六个字节,则该数组的体积为_A_个字节,若已知 X 的最后一个元素的起始字节地址为382,则 X 的首地址(即第一个元素的起始字节地址)为 _B_,记为 Xd。若按行存储,则 X1,5 的起始地址是 _C_, 结束字节地址是_ _D_。若按列存储,则

25、 X4,8的起始字节地址为_E_。供选择的答案:A: 210 240 288 294B: 0 6 94 100C: Xd+24 Xd+72 Xd+78 Xd+144D: Xd+29 Xd+77 Xd+83 Xd+147E: Xd+186 Xd+234 Xd+270 Xd+27612、有一个二维数组A,行下标的范围是16,列下标的范围是07,每个数组元素用相邻的6个字节存储,存储器按字节编址。那么,这个数组的体积是A个字节。假设存储数组元素A1, 0的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是B。若按行存储,则A2, 4的第一个字节的地址是C。若按列存储,则A5, 7的

26、第一个字节的地址是D。就一般情况而言,当E时,按行存储的A5, 7的第一个字节的地址是D。就一般情况而言,当E时,按行存储的AI, J地址与按列存储的AJ, I地址相等。供选择的答案:AD: 12 66 72 96 114 120 156234 276 282 283 288E:行与列的上界相同 行与列的下界相同 行与列的上界相同且行与列的下界相同 行的元素个数与列的元素的个数相同13、设W为一个二维数组,其每个数据元素Wij占用6个字节,行下标i从0到8,列下标j从2到5,则二维数组W的数据元素共占用A个字节。W中第6 行的元素和第4列的元素共占用B个字节。若按行顺序存放二维数组W,其起始地

27、址的字节号为100,则二维数组W的最后一个数据元素的起始地址的字节号为C,数据元素W34的起始地址号为D,而数据元素W22的起始地址与当W按列顺序存放时数据元素E的起始地址相同。供选择的答案 A: 480 192 216 144 B: 78 72 66 84 C: 310 311 315 314 D: 179 178 184 185E: W05 W28 W52 W8214、已知一个6行5列的稀疏矩阵中非零元的值分别为:-90,41,-76,28,-54,65和-8,它们在矩阵中的列号依次为:1,4,5,1,2,4和5。当以带行表的三元组表作存储结构时,其行表RowTab中的值依次为0,0,2,

28、2,3和5。请写出该稀疏矩阵(注:矩阵元素的行列下标均从1开始)。15、已知串的存储结构为动态存储分配的顺序串。阅读下列算法,并回答问题: (1)写出执行函数调用 strc (s, r)的返回结果,其中s=aba, r=abababa;(2)简述函数strc的功能。int strc (HString * sub, HString * str)int i=0, j, k, count =0;while (i length sub - length +1)j=i; k=0;while (k length & str - chj = =sub - chk )j+; k+;if (k = = sub - length)count +; i=j-sub - length +1;else i+;return count;16、阅读以下程序说明和C程序,将应填入程序中(n) 处的字句,写在答卷的对应栏内。程序说明已知某数的前二项为和,其后继项根据当前最后二项的乘积按下列规则生成 若乘积为一位数,则该乘积即为数列的后继项; 若乘积为二位数,则该乘积的十位数和个位数依次作为数

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

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