王道数据结构精选习题及解析

这篇具有很好参考价值的文章主要介绍了王道数据结构精选习题及解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

顺序表

王道数据结构课后题,数据结构

暴力法的时间复杂度为O(n²)

王道数据结构课后题,数据结构

王道数据结构课后题,数据结构

不要忽略有序性

王道数据结构课后题,数据结构

思路:因为是有序的顺序表,所以重复的元素一定是连在一起的。那我们就使用两个指针,一个指针指向当前不重复有序表的最后一个元素,另一个会从头到尾遍历整个有序表,称为工作指针。

我们让工作指针往后移,如果与当前有序表最后一个元素相同,则工作指针需要继续后移,直到出现一个不重复的元素。然后我们将该元素放在当前有序表的后一个位置即可。代码如下:

王道数据结构课后题,数据结构

王道数据结构课后题,数据结构

重点在于使用双指针

王道数据结构课后题,数据结构

经典归并

王道数据结构课后题,数据结构

王道数据结构课后题,数据结构

王道数据结构课后题,数据结构

链表

基础知识

王道数据结构课后题,数据结构

 文章来源地址https://www.toymoban.com/news/detail-689046.html

王道数据结构课后题,数据结构

前驱英文:prior

 

静态链表:

王道数据结构课后题,数据结构

王道数据结构课后题,数据结构

王道数据结构课后题,数据结构

 

王道数据结构课后题,数据结构

王道数据结构课后题,数据结构

王道数据结构课后题,数据结构

这题很难,为什么不会断链呢?

事实上是因假如当前节点无需删除,那就将L的下一个结点传进去,并且传的是引用!!!因为我传的是引用,所以当我在随后调用的递归子函数中,如果该节点是x我们就要删除,怎么删除呢?我们只需要直接将L往后移一个位置!!

因为此时是引用,在子函数中我看似是只把自己往后移动了一位,但是这个子链表也相当于缩短了一截。而另一方面,对于父函数来说,父函数传给子函数的是引用:

王道数据结构课后题,数据结构

子函数将自己后移,做的事情是把父亲的L->next也往后移动了一个位置!!!

删除结点时不要忘记要使用free将其free掉哦

顺带补充一下递归函数通过递归的方式实现正向输出的方法

王道数据结构课后题,数据结构

反向输出的代码如下:

王道数据结构课后题,数据结构

注意不要忘记,调用下一个结点时要考虑其是否为空才行

反转链表:

反转链表,比如需要将第一个结点指向第二个节点的方向逆转,让当前即cur结点指向前一个结点。

但是如果直接逆转了,就少了往后面结点走的路,需要一个next结点保留后续的结点。

所以需要多一个结点存储后续的next结点。

所以初始时:

王道数据结构课后题,数据结构

让cur指向第一个结点,让next指向第二个节点,然后让pre指向空处

首先将当前结点反转,让其指向pre。

做完上述操作后,然后此时我们不要着急让next结点往回指,如果往回指了则next结点往后的路又断掉了。而且我们要保持一轮循环只做一次事。

当结点修改完毕后,我们让所有的三个结点往后移动一个位置。

最终代码如下:

王道数据结构课后题,数据结构

有两个细节点需要注意!一个是要对初始结点进行判空!

王道数据结构课后题,数据结构

还有就是最后一步,循环完毕时,最后一个结点是没有指向前一个结点的,因此不能忘记这一步操作!!

王道数据结构课后题,数据结构

(暂时不会,先跳)

链表很多操作都不方便,但是插入操作比较方便,于是可以考虑用插入排序实现。

王道数据结构课后题,数据结构

链表有一个头结点,我们初始化时也为其保留一个结点,也就是图上的a1,然后我们依次遍历a2及其后面的结点,将其在合适的位置插入

王道数据结构课后题,数据结构

初始化工作:Listnode* p=head->next->next; 为a2赋值p

Listnode *r=p->next; 为a3赋值r

head->next->next=nullptr;即让a1指向nullptr

随后我们在已有的链表L往后遍历,找到第一个比a2大的数,然后在其前一个结点插入即可

找第一个比a2大的数通过while循环实现,while(结点的数都比a2小)则继续往后,

由于插入要在前一个结点插入,因此比较数据时是用当前结点的后面一个结点比较

这样就会在比a2大的结点的前一个地方停下来。

所以循环条件如下:

王道数据结构课后题,数据结构  王道数据结构课后题,数据结构

当这个循环完毕时

接下来进行插入操作即可

插入操作即:

王道数据结构课后题,数据结构

插入操作完毕后继续遍历未找完的结点,即让p和r都往后走:

p=r

r=r->next

当找完了所有未排序的结点,即p为空时结束,故完整代码如下:

王道数据结构课后题,数据结构

王道数据结构课后题,数据结构

 

 

王道数据结构课后题,数据结构

注意一点:创建链表插入结点使用尾插法时,不要忘记在结尾插入节点后,要将结尾重新调整为尾部!

并且还要注意一点,虽然链表B是新建了一个结点没错,但是对于链表A我们不是新建,而是在原来的链表基础上直接进行修改!

对于这种题我们需要使用三个指针,一个是ra、rb指针,分别代表A链表和B链表的尾部,每次在尾部插入结点,插入后再将ra、rb往后移动。

还有一个指针是工作指针,负责每次往后移动一位代表当前指针。

王道数据结构课后题,数据结构

最后不要忘记要把a和b的指针置空哦

王道数据结构课后题,数据结构

王道数据结构课后题,数据结构

采用尾插法

王道数据结构课后题,数据结构

王道数据结构课后题,数据结构

本题所需注意细节点较多!是个重要的题!

头插法与尾插法不同在于,尾插法很简单,只需要让尾结点指向该节点即可

但是头插法较为麻烦,需要让该当前工作结点指向B表中已有的结点

王道数据结构课后题,数据结构

王道数据结构课后题,数据结构

普通尾插法直接后移即p=p->next可,但使用头插法需要会改变当前结点的后继结点,因此此时需要提前将p->next用q储存起来,然后工作节点p后移的操作改为p=q

王道数据结构课后题,数据结构

其实就是设定两个指针,分别指向两个链表,然后每次将两个结点中较小的值选出来,以递增的顺序找出节点即可。

然后使用头插法就可以使其变为逆序,即降序排列了。

由于我们没有新建一个链表,而是在原来的l1的基础上去改箭头,所以我们需要一个多的指针去存储l1当前工作指针的下一个指针。

即每次循环前可以设定代码:

r =p->next

(首先需要让l1头置空,然后把工作指针p1放在l1头节点的后面那个有用的结点即值为的结点。

如图所示:

王道数据结构课后题,数据结构

接下来我们比较两个工作指针p1和p2的值,假如p1的值小,那么我们就要把1插入到l1的头部的第一个位置。

所以:我们将p1的next指向l1的后续结点,再让l1的next指向p1:如图所示

P1->next=l1->next

L1->next=p1

王道数据结构课后题,数据结构

然后这样p1就结束了他的工作,此时p1结点已经和上述链表断链,所以使用p=r赋值来获取新的工作结点。

并让r也后移一位

代码:p1=r  ,r=r->next

王道数据结构课后题,数据结构

(如果是用l2的数据怎么办?其实此时r既可以暂存第一个工作指针的后续指针,也可以暂存第二个工作指针的后续指针,或者可以各有一个指针来缓存)

然后由于链表不等长,所以当某个链表为空后,继续将该链表的剩余结点依次插入即可。

王道数据结构课后题,数据结构

通过这一行if(pa)pb=pa

的代码可以将pa设定为剩下的那一条链表

然后接下来依次插入即可

王道数据结构课后题,数据结构

王道数据结构课后题,数据结构

由于需要循环完一遍才知道哪个数据最小

而查找也需要从前往后查找一次,如果按照我原本的思想先找最小的,然后再从头遍历去查找该节点所在位置就很麻烦。

所以可以中途把最小值所在的结点也记录下来,这样就无需再查找一次。

此外为了删除该节点,需要我们不止要记录该最小值结点,还要记录最小值结点的前置结点,即minPre。

而为了记录最小值结点的前置结点,我们还需要一个结点,专门作为当前工作结点的前一个结点,工作结点后移一步的过程中,要保持该前置结点是工作结点的前一个结点。

王道数据结构课后题,数据结构

 

到了这里,关于王道数据结构精选习题及解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构(Data Structure)(C/C++)PTA习题+课后习题

    课本:《数据结构——从概念到c++实现(第三版)》 1-1 数据元素是数据的最小单位。 F         课本:数据元素是数据的基本单位;构成数据元素的最小单位称为数据项,数 据元素是讨论数据结构时涉及的最小数据单 位,数据结构是指相互之间存在一定关系的数据元素

    2024年02月04日
    浏览(42)
  • 【数据结构与算法】树和二叉树课后习题

    知一棵树边的集合为 I , M , I , N , E , I , B , E , B , D , A , B , G , J , G , K , C , G , C , F , H , L , C , H , A , C {I,M,I,N,E,I,B,E,B,D,A,B,G,J, G,K,C,G,C,F,H,L,C,H,A,C} I , M , I , N , E , I , B , E , B , D , A , B , G , J , G , K , C , G , C , F , H , L , C , H , A , C 请画出这棵树并回答下列问题: 哪个是根结点? 哪些是叶

    2024年02月12日
    浏览(38)
  • 数据结构——用C语言描述(第2版)耿国华 课后习题答案

      如有错误,敬请谅解! 此文章仅为本人学习笔记,仅供参考,如有冒犯,请联系作者删除!! 目录 第一章习题答案 第二章习题答案 第三章习题答案 第五章习题答案 第六章习题答案 第七章习题答案 第八章查找 第九章排序 2 、 ××√ 3 、( 1 )包含改变量定义的最小范围

    2024年02月08日
    浏览(48)
  • 数据结构与算法--图(概念+练习题+解析)

    有向图 在有向图中有以下几点结论: 1.所有顶点的度数之和等于边数的二倍。 2.所有顶点的入度之和等于出度之和。 3.n个顶点的有向完全图有n(n-1)条边。 4.n个顶点的强连通图至少有n条边。 无向图 在无向图中有以下几点结论: 1.所有顶点的度数之和等于边数的二倍。 2.n个顶

    2024年02月04日
    浏览(44)
  • 数据结构之链表练习与习题详细解析

    个人主页:点我进入主页 专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶 C语言刷题       数据结构初阶 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1.前言 2.习题解析 2.1习题一 2.2习题二 2.3习题三 2.4习题四 2.

    2024年02月05日
    浏览(44)
  • 数据结构英文习题解析-第二章 链表List

    前言:最近快到FDS考试了,po重刷了一下学校的题目,自己整理了一些解析orz 因为po在自己找解析和学习的过程中非常痛苦,所以在此共享一下我的题目和自己写的解题思路,欢迎各位指出错误~全章节预计会陆续更新,可在专栏查看~ HW2 1. For a sequentially stored linear list of leng

    2024年04月11日
    浏览(53)
  • 数据结构英文习题解析-第一章 算法复杂度分析Algorithm Analysis

    前言:最近快到FDS考试了,po重刷了一下学校的题目,自己整理了一些解析orz 因为po在自己找解析和学习的过程中非常痛苦,所以在此共享一下我的题目和自己写的解题思路,欢迎各位指出错误~全章节预计会陆续更新,可在专栏查看~ HW1 1. The major task of algorithm analysis is to an

    2024年03月12日
    浏览(71)
  • 数据结构英文习题解析-第五章 二叉搜索树Binary Search Tree

    前言:最近快到FDS考试了,po重刷了一下学校的题目,自己整理了一些解析orz 因为po在自己找解析和学习的过程中非常痛苦,所以在此共享一下我的题目和自己写的解题思路,欢迎各位指出错误~全章节预计会陆续更新,可在专栏查看~ HW5 1.In a binary search tree, the keys on the same

    2024年04月09日
    浏览(48)
  • 数据结构(王道)——数据结构之 树

           树的概念补充: 结点之间的关系描述    结点、树的属性描述: 有序树、无序树: 1、第i层至多有m^(i-1)个结点 2、高度为h的m叉树至多有(m^h-1)/(m-1)个结点   3、高度为h的m叉树至少有h个结点 高度为h,度为m的树至少有h+m-1个结点   4、具有n个结点的m叉树的最小高度

    2024年02月17日
    浏览(54)
  • 【数据结构】【王道】【数据结构实现】文章目录

    持续更新中。。。 数据结构 链接 顺序表实现及基本操作(可直接运行) 文章链接 无头结点单链表的实现及基本操作(可直接运行) 文章链接 带头结点单链表的实现及基本操作(可直接运行) 文章链接 双链表的实现及基本操作(可直接运行) 文章链接 循环链表的实现及

    2023年04月08日
    浏览(92)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包