没有合适的资源?快使用搜索试试~ 我知道了~
首页数据结构(C语言版)严蔚敏课后习题答案
数据结构(C语言版)严蔚敏课后习题答案
需积分: 50 12 下载量 115 浏览量
更新于2023-06-03
评论 1
收藏 1.49MB DOC 举报
6.试分析下面各程序段的时间复杂度。 (1)x=90; y=100; while(y>0) if(x>100) {x=x-10;y--;} else x++; 答案:O(1) 解释:程序的执行次数为常数阶。
资源详情
资源评论
资源推荐
第 2 章 线性表
.算法设计题
(1)将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两
个链表的存储空间不另外占用其它的存储空间。表中不允许有重复的数据。
用 的头结点作为 的头结点
!"
#$%
"#%
"相等时取 的元素,删除 的元素
&"&%
%
'(插入剩余段
"释放 的头结点%
(2)将两个非递减的有序链表合并为一个非递增的有序链表。要求结果链表仍使用原
来两个链表的存储空间不另外占用其它的存储空间。表中允许有重复的数据。
)
初始化
用 的头结点作为 的头结点
*+
!",,
#-&%
"#-&%
"#$&%
"&%
&&插入
%
"释放 的头结点%
(3)已知两个链表 . 和 / 分别表示两个集合,其元素递增排列。请设计算法求出 .
与 / 的交集,并存放于 . 链表中。
""0设工作指针 和 ;
用 的头结点作为 的头结点
while
if0交集并入结果表中。
)")%
elseif$)")%
else)")%
while)")%0释放结点空间
while)")%0释放结点空间
)""0置链表尾标记。
"0注: 本算法中也可对 / 表不作释放空间的处理
(4)已知两个链表 . 和 / 分别表示两个集合,其元素递增排列。请设计算法求出两
个集合 . 和 /的差集(即仅由在 . 中出现而不在 / 中出现的元素所构成的集合),并以同
样的形式存储,同时返回该集合的元素个数。
void12(.,/,3)
0. 和 / 均是带头结点的递增有序的单链表,分别存储了一个集合,本算法求两集合的差
集,存储于单链表 . 中,3 是结果集合中元素个数,调用时为 4
.; ∥ 和 & 分别是链表 . 和 / 的工作指针。
&/; .; ∥ 为 . 中 所指结点的前驱结点的指针。
while(-)""&-)"")
if($&);;355;%0. 链表中当前结点
指针后移。
elseif(&)&&; ∥/ 链表中当前结点指针后移。
else; ∥处理 .,/ 中元素值相同的结点,应删除。
); ; ");%0删除结点
(5)设计算法将一个带头结点的单链表 . 分解为两个具有相同结构的链表 /、6,其
中 / 表的结点为 . 表中值小于零的结点,而 6 表的结点为 . 表中值大于零的结点(链表 .
的元素类型为整型,要求 /、6 表利用 . 表的结点)。
(6)设计一个算法,通过一趟遍历在单链表中确定值最大的结点。
7"89:
#*+)*+
8假定第一个结点中数据具有最大值
!"-*+如果下一个结点存在
#88
%
)8
(7)设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表
的存储空间。
逆置带头结点的单链表
*+
!"
&& 指向3 的后继
3 插入在头结点之后
&
%
%
(8)设计一个算法,删除递增有序链表中值大于 8 且小于 8 的所有元素
(8 和 8 是给定的两个参数,其值可以和表中的元素相同,也可以不同 )。
"88
首元结点
!"$8
%查找第一个值8 的结点
#
!"$8
查找第一个值 ≥8的结点
&修改指针
!"&-
&"&&%释放结点空间
%#
%
(9)已知 指向双向循环链表中的一个结点,其结点结构为 、、 三
个域,写出算法 !交换 所指向的结点和它的前缀结点的顺序。
知道双向循环链表中的一个结点,与前驱交换涉及到四个结点( 结点,前驱结点,
前驱的前驱结点,后继结点)六条链。
void7!()
0 是双向循环链表中的一个结点,本算法将 所指结点与其前驱结点交换。
&"";
&"""; ∥ 的前驱的前驱之后继为
""&""; ∥ 的前驱指向其前驱的前驱。
&""; ∥ 的前驱的后继为 的后继。
&""; ∥ 与其前驱交换
"""&; ∥ 的后继的前驱指向原 的前驱
"&; ∥ 的后继指向其原来的前驱
%0算法 ! 结束。
(10)已知长度为 的线性表 . 采用顺序存储结构,请写一时间复杂度为 O、空间
复杂度为 O;的算法,该算法删除线性表中所有值为 8 的数据元素。
<题目分析=在顺序存储的线性表上删除元素,通常要涉及到一系列元素的移动(删第
个元素,第 5; 至第 个元素要依次前移)。本题要求删除线性表中所有值为 8 的数
据元素,并未要求元素间的相对位置不变。因此可以考虑设头尾两个指针(;,>),
从两端向中间移动,凡遇到值 8 的数据元素时,直接将右端元素左移至值为 8 的数
据元素位置。
void1"(7"89:.<=,int )
0. 是有 个元素的一维数组,本算法删除 . 中所有值为 8 的元素。
;;>;∥设置数组低、高端指针(下标)。
while($>)
while($>.<=-8)55; ∥若值不为 8,左移指针。
if($>)while($>.<>=8)>;∥若右端元素值为 8,指针左移
if($>).<55=.<>=;
%
[算法讨论] 因元素只扫描一趟,算法时间复杂度为 O(n)。删除元素未使用其它辅助
空间,最后线性表中的元素个数是 j。
第 3 章 栈和队列
(2)回文是指正读反读均相同的字符序列,如“abba?和“abdba?均是回文,但“good?不
是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)
根据提示,算法可设计为:
以下为顺序栈的存储结构定义
@ABBC;44假定预分配的栈空间最多为 ;44 个元素
:#!19:假定栈元素的数据类型为字符
:#)
19:<BBC=
%B&BD
EF) !3
判断 字符向量是否为回文,若是,返回 ;,否则返回 4
B&B
"
!8
EB
""求向量长度
#4$"55将一半字符入栈
G)!<=
!"-78:B
每弹出一个字符与相应字符比较
8G
#8-B<=D)4不等则返回 4
"55
剩余45页未读,继续阅读
C1zyh
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0