第4章 习题讲解.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4-1 4-1 算法 reverse ( head ) /*将指针 head 所指向的链表倒置*/ RV1[指针初始化] //P1,head,P2 分别指向三个连续的节点 P1 ? NULL. P2 ? next(head). RV2[反转链表] WHILE( P2 ≠ NULL ) DO ( next(head)=P1. //反转节点指针 P1=head. head=P2. P2=next(P2). //移动3个指针 )▌ 4-3 编写一个函数SelectItem( Stack s , int n ) ,要求利用堆栈来查找n在栈中第一次出现的位置,并将该位置元素移至栈顶,同时其他元素次序不变。(注意:用int匹配堆栈的模板) 解题思路: 对 s 进行弹栈操作,然后匹配弹出元素。 找到(或无法找到)后能够恢复原来的元素次序 要能够恢复原来的元素次序关键在于记录弹出的顺序 后弹出的元素能够先被压回原来的栈 s 因此需要使用一个辅助堆栈 算法思想示例: n = 51 4-3 算法 SelectItem(s , n . t , s2) /* 在堆栈 s 中查找值为 n 的元素的位置,返回值 t是值为 n 的元素在 s 中第一次出现的位置,如果找不到返回-1, s2 为将该元素移到栈顶后的栈 */ SI1[堆栈为空 ?] IF top = ?1 THEN ( PRINT “an empty stack! ”. RETURN. ) top1 ? -1. 4-3 SI2[在 s 中查找 n ] //top 为 s 的栈顶指针,top1是temp的栈顶指针 WHILE ( top≠-1 AND s.[top] ≠ n ) DO ( //将s中的元素弹出,压入堆栈temp中 top1 ? top1+1. temp[top1] ?s.[top]. top ? top-1. ) 4-3 SI3[如果找到,弹栈并记录位置] IF( top ≠ -1 )THEN( t ? top. top ? top-1.) SI4[恢复原有元素顺序] WHILE ( top1≠-1 ) DO( top ? top+1. s.[top]? temp[top1]. top1 ? top1-1.) IF ( t ≠ -1 )THEN ( top ? top+1. s.[top]? n.) ▌ 关于栈的操作 CREATS ( S ):建立一个堆栈 S; 判断堆栈S是否空:ISEMTS(S) S ? x : 元素 x 进栈; x ? S : 元素 x 出栈; Peek(S.t):查看栈S的栈顶元素,赋值给t,但不弹栈。 4-3 算法 SelectItem(s , n . t , s) /* 在堆栈 s 中查找值为 n 的元素位置,返回值 t是值为 n 的元素在 s 中第一次出现的位置,如果找不到返回-1, s为将该元素移到栈顶后的栈 */ SI1[堆栈为空 ?] IF ISEMTS(s) THEN ( PRINT “an empty stack! ”. RETURN. ) SI2[初始化] CREATS(ss). count ? 0. 4-3 SI3[在 s 中查找 n ] Peek(s.temp) . WHILE (NOT ISEMTS(s) AND temp ≠ n ) DO ( //将s中的元素弹出,压入堆栈ss中 x ? s. ss ? x. Peek(s.temp) . ) 4-3 SI4[如果未找到,t值赋为-1] IF( ISEMTS(s) )THEN t ? -1. ELSE (t ?0. temp ? s ). SI5[恢复原有元素顺序] WHILE (NOT ISEMTS(ss) ) DO ( x ? ss. s ? x. count ? count+1. ) IF( t ≠ -1 )THEN (s ? temp. t ?t+count). // t记录与n匹配元素距离栈顶的位置 ▌ 4-11 要求设计一个算法InsertOrder(CnodeT * header, CnodeT* elem),将结点elem插入到一个循环链表中,并将链表中的结点按照data的递增次序重新排列。 解题思路: 从头结点开始,在链表中查找数据域值最大的结点,将其从原来的位置上删除之,并将其插入哨位结点之后。

文档评论(0)

叶倾城 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档