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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

算法与数据结构C语言习题参考答案15章.docx

1、算法与数据结构C语言习题参考答案15章1. 绪 论1将下列复杂度由小到大重新排序:A2n Bn! Cn5 D10 000 En*2 (n)【答】10 000 n*2(n) n5 2n n! 2将下列复杂度由小到大重新排序:An*2(n) Bn + n2 + n3 C24 Dn0.5【答】24 n0.5 n*2 (n) n + n2 + n33用大“O”表示法描述下列复杂度:A5n5/2 + n2/5 B6*2(n) + 9nC3n4+ n* 2(n) D5n2 + n3/2【答】A:O (n5/2) B:O (n) C:O (n4) D:O (n2)4按照增长率从低到高的顺序排列以下表达式:4

2、n2 , 3n, 3n , 20n , 2000 , 2n , n2/3。又n!应排在第几位?【答】按照增长率从低到高依次为:2000, 3n, 2n , n2/3 , 20n , 4n2 , 3n。n!的增长率比它们中的每一个都要大,应排在最后一位。5. 计算下列程序片断的时间代价: 1;(i)(“n”);1;【答】循环控制变量i从1增加到n,循环体执行n次,第一句i的初始化执行次数为1,第二句执行n次,循环体中第一句执行n次,第二句i从1循环到n,共执行n次。所以该程序段总的时间代价为:T(n) = 1 + n + 2n = 3 1 = O(n)6. 计算下列程序片断的时间代价: 1;(i

3、) 1;(j) 1;(kn = ) /* 溢出 */ (“!n”); 0; (p1 ) /* 不存在下标为p的元素 */(“ ! n”); 0; (n - 1; q1; ) /* 插入位置及之后的元素均后移一个位置 */ 1 = q;1 = x; /* 插入元素x */n = n + 1; /* 元素个数加1 */ 1;2试写一个删除算法(, x ),在所指顺序表中,删除一个值为x的元素,返回删除成功与否的标志。【答】数据结构采用2.1.2节中顺序表定义。 ( , p, x ) /* 在所指顺序表中删除值为x的元素 */ ;(0p) (; q1; ) /* 被删除元素之后的元素均前移一个位置

4、*/ q = 1; n = n - 1; /* 元素个数减1 */ 1 ; 0;3. 设有一线性表e = (e0, e1 , e2 , , 1 ),其逆线性表定义为e= ( 1 , , e2 , e1 0)。请设计一个算法,将用顺序表表示的线性表置逆,要求逆线性表仍占用原线性表的空间。【答】数据结构采用2.1.2节中顺序表的定义。思路考虑对数组 进行置逆,即把第一个元素和最后一个元素换位置,把第二个元素和倒数第二个元素换位置。 注意这种调换的工作只需对数组的前一半元素进行,所以设置整数变量用于存放数组长度的一半的值。大家可以考虑一下:为什么不能对整个数组进行如上的对元素“换位置”的工作?(提示

5、:这样会将本来已经置逆的线性表又置逆回来,即又变成了原来的表。)顺序表的置逆算法 ( ) x; , i; (n 0 n 1) ; /*空表或只有一个元素,直接返回*/ = n / 2; ( i = 0; i i;i = n - 1 - i;n - 1 - i = x;代价分析该算法中包含一个循环,其循环次数为2。因此,算法的时间代价为O(n)。4. 已知长度为n的线性表A采用顺序存储结构,请写一算法,找出该线性表中值最小的数据元素。【答】数据结构采用2.1.2节中顺序表定义。思路设置变量,遍历整个表,不断更新当前已经经历过的元素的最小值即可。为方便起见,事先假设表不为空。算法 ( ) /*求非

6、空顺序表中的最小数据元素*/ ; i; = 0; /*初始化*/ ( i = 1; i n; ) /*中保存的总是当前的最小数据*/ ( i) = i; ;代价分析该算法访问顺序表中每个元素各一次,时间代价为O(n)。 讨论读者可以试图对上面的算法进行修改,使返回的值不是最小元素的值而是它的下标。5. 已知线性表A的长度为n,并且采用顺序存储结构。写一算法,删除线性表中所有值为x的元素。【答】数据结构采用2.1.2节中顺序表的定义。思路为了减少移动次数,可以采用快速检索的思想,用两个变量i, j记录顺序表中被处理的两端元素的下标,开始时i = 0,j = n-1,边检索第i个元素边增加i,直到

7、找到一个元素值等于x,再边检索第j个元素边减少j,直到找到一个元素值不等于x,把下标为j的元素移到下标为i的位置后重复上述过程,直到i j。另用一变量记录删除了多少个元素。算法 ( p, x)/*删除顺序表中所有值为x的元素,新顺序表可能不保持原有顺序*/ i = 0, j = n - 1, = 0; /*i定位于顺序表开始处,j定位于顺序表最后*/ ( i i x) /*找到了一个要删除的元素*/ (j x) (i j) /*从后往前找不会被删除的元素,当i, j相等时退出循环,记录从后往前找的过程中遇到了多少个要删的元素*/j- -; ( i = = j) n = n - - 1;i =

8、j;j- -;n = n - ; (i x) p-n- -;代价分析该算法访问顺序表中每个元素各一次,时间代价为O (n)。 讨论这个算法使用了一点技巧使得在中间删除元素时,避免了最后一串元素的移动。但是,它破坏了原来线性表中元素之间的顺序关系。如果需要保持原来的顺序应该怎样做?这里提供一种可行的思路:从前向后遍历表,如果元素不是x,则继续向后;如果元素是x,则寻找其后第一个不是x的元素,将这两个元素互换。具体算法请读者自己实现。6.写一算法,在带头结点的单链表中,p所指结点前面插入值为的新结点,并返回插入成功与否的标志。【答】数据结构采用2.1.3节中单链表定义。思想:由于在单链表中,只有指

9、向后继结点的指针,所以只有首先找到p所指结点的前驱结点,然后才能完成插入。而找p所指结点的前驱结点,只能从单链表的第一个结点开始,使用与 类似的方式进行搜索。算法: ( x) /* 在带头结点的单链表中,p所指结点前面插入值为x的新结点 */ p1; () 0; p1; (p11-)p11-; /*寻找p所指结点的前驱结点*/ (p1) 0; ()( )*申请新结点*/ () (“ !n”) 0; ; 1-; p1-; 1; 7.写一算法,在带头结点的单链表中,删除p所指的结点,并返回删除成功与否的标志。【答】数据结构采用2.1.3节中单链表定义。思想:由于在单链表中,只有指向后继结点的指针,

10、所以只有首先找到p所指结点的前驱结点,然后才能完成删除。而找p所指结点的前驱结点,只能从单链表的第一个结点开始,使用与 类似的方式进行搜索。 ( p)/* 在带头结点的单链表中,删除p所指的结点 */ p1;() ; p1;(p11-)p11-; /*寻找p所指结点的前驱结点*/(p1) 0; p1-; (p); /* 删除结点p */ 1;8. 已知是指向无头结点的单链表的指针变量,写出删除该链表下标为i的(第1个)结点的算法。【答】数据结构采用2.1.3节中单链表定义。思路依次遍历表中的每一个结点并计数,到第1个结点时实行删除。由于链表是无头结点的,所以在删除第一个结点时要特别注意。算法

11、( * , i) /*删除单链表中下标为i的结点。删除成功返回,否则返回。*/ j; p, q; (*) i ;(q); ;p = (*);j = 0; ( j ; ( ) ; /*此元素不存在*/q = ; = ;(q); ;代价分析该算法访问单链表中前面i个结点,时间代价为O(i),最大不超过O(n)。 讨论如果函数参数不是 *类型而是类型,在删除0的结点时,程序不能正确实现,其原因请读者思考(考虑C语言的参数传递方式)。如果单链表带表头结点,重写本题的算法。比较这两个算法,是否能体会到表头结点的作用。9. 已知是指向无头结点的单链表的指针变量,写出删除该链表中从下标为i的(第1个)结点开始的连续k个结点的算法。【答】数据结构采用2.1.3节单链表定义。思路这道题与上题相似,只需要增加计数即可。要注意的是应该判断给出的i和k是否合理,是不是会超出链表长度。算法 ( * , i, k) /*删除单链表中从下标i开始的k个结点。删除成功返回,否则返回。*/ j; p, q; (*) i 0 k = 0) ; ( i = = 0) /*如果需要删除从第一个结点开始的k个结点*/ ( j = 0; j ;(q); ;p = (*);j = 0; ( j ; ( ) ; /*第i个结点不存在*/ ( j = 0; j ; ) q = ; = ;(q); ;代价

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

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