• DS博客作业02--线性表


    0.PTA得分截图

    1.本周学习总结(0-4分)

    1.1 总结线性表内容

    • 顺序表
      结构体定义:顺序表数据以及长度。

    顺序表插入:就和数组相同,先遍历数据,找到要插入的位置,然后进行数据的后移操作,接着插入数据。时间复杂度O(N)。
    代码函数:

    顺序表删除:遍历数据,找到位置,进行数据的位移删除。
    重复数据删除:
    区间删除:

    • 链表
      结构体定义:数据,链。

      头插法:将数据后插入的放前面。

      尾插法:插入数据放后面。

      插入:P->next=q->next;p->next=q;
      删除:p->next=p->next->next;delete p;

    • 有序表
      表中数据升序或降序排列
      有序单链表插入:遍历链表比较,找到位置,插入或删除。
      插入:
      删除:
      合并:将两个有序表合并,且合并后的数据仍有序。

    • 循环链表:链表头尾相连,从一个结点出发,可以到任意节点。

    • 双链表:节点之间双向连接。

    1.2.谈谈你对线性表的认识及学习体会。

    线性表用来存储数据的一种结构,一般是用于放置一类数据,顺序表便于查找数据,但是所占的空间大,不确定,且数据的操作较为麻烦。
    而链表所占空间较小,且便于数据的操作。循环链表和双链表学过没用过,不是很清楚。
    想要对链表运用自如,真的需要拿代码量去填,对码量的要求大,熟练之后,对链表的运用会很灵活。
    打代码时,老是会出现位置访问出现问题,或者是空间问题,对指针的空间申请容易忘记,单个单个申请的和总的申请空间分不清。

    2.PTA实验作业(0-2分)

    2.1.题目1:题目名称

    2.1.1代码截图(注意,截图,截图,截图。不要粘贴博客上。)

    2.1.2本题PTA提交列表说明。



    忘记为什么了,只知道做到要死要死的,链表结点老是接错掉,代码运行出来的和自己想象的不一样。

    2.2.题目1:题目名称

    2.2.1代码截图(注意,截图,截图,截图。不要粘贴博客上。)

    2.2.2本题PTA提交列表说明。


    答案错误好像是链表分割后丢失了几个数据,后来改掉补上了。

    2.3.题目1:题目名称

    2.3.1代码截图(注意,截图,截图,截图。不要粘贴博客上。)

    2.2.2本题PTA提交列表说明。


    分两次做,第一次有思路,代码写不出来,容易删除题目不要求的数据。
    隔天捋了捋思路,代码删除重写了一下,过了。

    3.阅读代码(0--4分)

    我觉得老师课上讲的一个链表合并的代码思路不错,链表运用很熟悉。

    3.1 题目及解题代码


    3.1.1 该题的设计思路


    分治法吧,用递归一半一半分,知道剩下两个链表,然后用合并两链表的方法合并。应该是这样,没理解错的话。
    class solution 啥的 看不太懂。
    时间复杂度:O(Nlogk),合并两链表为O(N),N为两链表总长度,然后总链表数为K,一共log2K次。
    空间复杂度:没有创建新链表,就只要O(1)。

    3.1.2 该题的伪代码

    函数(链表,开头,结尾)
    { 取中间,再次进行函数(链表,开头,中间)
    函数(链表,中间+1,结尾)
    while(判断是否只剩两条链表)
    {比较两链表,进行合并}
    }

    3.1.3 运行结果

    这题好像只需要写出函数,题目也没有给主函数,.。。。运行不了。

    3.1.4分析该题目解题优势及难点。

    这题就和合并两链表相似吧,就是这题是多条链表,所以要以两两合并,慢慢的全部合并。难的就是函数递归的运用要很懂,有点难。
    我看到其他的解题思路是全部链表的节点一一比较,这种方法太麻烦,时间复杂度太大。
    我觉得应该也可以先合并两条链表,合并完后在和第三条链表合并,这样依次下去时间复杂度差不多也就O(KN)左右。
    函数递归第方法比较不会用,从这题学到了一点点。

    3.2 题目及解题代码


    3.2.1 该题的设计思路

    运用递归算法,第一个函数先用递归找到每k+1个结点,知道剩余节点小于k。
    然后再用函数递归翻转每k个结点,并且和后继结点连接。

    递归算法,不太会求时间复杂度。空间复杂度:O(1)

    3.1.3 运行结果

    这题好像只需要写出函数,题目也没有给主函数,.。。。运行不了。

    3.1.4分析该题目解题优势及难点。

    递归算法,很快。将翻转依次分开完成,并且连接。算法简洁,时间空间复杂度都不高。
    就是要很懂函数递归,有点费脑子。

  • 相关阅读:
    分别给Python类和实例增加属性和方法
    什么是tcp, udp 以及它们的区别
    输入www.baidu.com后的过程详解
    tcp 三次握手,四次挥手
    python sort 排序的使用
    mysql数据脏读、幻读、不可重复读
    python 之集合的删除
    CompletableFuture保证线程同步
    多线程动态传参问题
    git冲突的解决与版本回退遇到的问题
  • 原文地址:https://www.cnblogs.com/you-18250630840/p/12405001.html
Copyright © 2020-2023  润新知