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分析该题目解题优势及难点。
递归算法,很快。将翻转依次分开完成,并且连接。算法简洁,时间空间复杂度都不高。
就是要很懂函数递归,有点费脑子。