代码改变世界

DS博客作业02--线性表

2019-03-31 01:13  HappyBoy~  阅读(362)  评论(0编辑  收藏  举报

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

1.1思维导图

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

①线性表的学习相当于对于对上学期结构体数组和链表的一个复习和更深一步探究,在结构体数组为主的顺序表和以指针为主的链表都可以写出程序的时候,在学习了C的基础上,数据结构要求的则是更加合适高效的算法。
②顺序表的思路比较清晰,相比之下,链表就比较麻烦了,指针一不小心没用好就容易出错,对于什么时候保存结点,什么时候直接使用结点有些模糊。在敲pta的时候,开始的时候就是直接模仿书上的代码。画出链表的结构会比较直观,慢慢掌握插入、删除这些基本算法。在学习线性表的同时,对于C++的基本编程也越来越熟悉。

2.PTA实验作业(6分)

2.1.题目1:6-3 jmu-ds- 顺序表删除重复元素

2.1.1设计思路

void CreateSqList(List &L,int a[],int n)
动态申请内存。
定义整型变量i(下标),j=0(顺序表长度),k(判断是否出现重复数字)
将L->data[i]作为哈希数组的下标,统计出现的次数
将j的值作为顺序表长度赋给L->length
void DispSqList(List L)
判断链表非空时输出链表,
如果链表为空,输出return。

2.1.2代码截图

2.1.3本题PTA提交列表说明。

Q1:一开始的答案错误,是因为输出链表中出现了问题。
A1:找同学帮忙最终问题解决了,但是心里有“why"。

2.2题目2:6-5 jmu-ds-头插法建链表

2.2.1设计思路

定义int n(数据元素个数)
void CreateListF(LinkList &L,int n)//头插法建链表,L表示带头结点链表,
void DispList(LinkList L) //输出链表
用if语句判断要输出NULL,还是把数组中的元素插到链表里。

2.2.2代码截图

2.2.3本题PTA提交列表说明。

Q1:不知道怎么实现头插法。
A1:参考同学代码,最终写出来了。
Q2:很多C++的语法不会使用。
A2:问题问大佬,什么问题都不成问题。

2.3题目3:6-10 jmu-ds-有序链表的插入删除

2.3.1设计思路

prt=L:记住前驱节点。
定义LinkList型的变量p、ptr,为p申请空间
for循环实现元素的移动
分别用插入函数和删除函数,分别实现将数据插入该结点的前面和找到所输入的数据,并将该结点释放删除。

2.3.2代码截图

2.3.3本题PTA提交列表说明。

Q1:一开始有很多次编译错。
A1:按照书上的代码一一对,结果还是不行,就去找大佬。

3、阅读代码(-2--2分)

找一份优秀代码,理解代码功能,并讲出你所选代码优点及可以学习地方。主要找以下3种类型代码:
读源码,如从python或C++中找用线性表封装的库源码,分析代码功能及可以学习地方。
考研题种关于线性表内容。可以找参加过考研的学长学姐拿。
ACM、PTA天梯赛、leecode面试刷题网站,找线性表相关题目阅读分析。
请按照下面内容填写代码阅读内容。请未必认真完成,如果发现应付,没有介绍代码思路、体会等扣分。

3.1 题目

给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

3.2 解题思路

就让两个快慢指针一直走一直走,最后走到一起为止。

3.3 代码截图

3.4 学习体会

学到一种题目是可以用很多种方法去解决,这种解法很妙,very very good!