一、PTA实验作业
1.题目1:最长连续递增子序列
2. 设计思路(伪代码或流程图)
void FindLongest(List &L)//找最长的连续递增子序列
{
int i,j,m;
定义longest为最长序列,数组length[100000]存放各序列长度
遍历线性表
各递增序列长度初定为1
for i=0 to L->length-1
for j=i+1 to L->length
if 元素的值为递增
首元素位置为i的递增序列长度递增
else 退出循环;
end;
end;
for i=0 to L->length
找出最长连续递增子序列及其首元素的位置 i
end;
if 线性表为空表 return;
if 最长连续递增子序列=1
输出第一个元素
return ;
输出最长连续递增子序列
}
3.代码截图
4.PTA提交列表说明。
-
第一次提交编译错误 , 编译器改成c++后解决。
-
第二次提交段错误 。
-
第三次提交答案错误。
-
第四次提交答案正确 。
1.题目2:链表倒数第m个数
2. 设计思路(伪代码或流程图)
int Find(LinkList L, int m ){ //找链表倒数第m个数
定义 i=0,j,k=0;K表示链表长度
LinkList h,p;
h=p=L->next;
遍历链表,计算链表长度k
倒数m转为正数j
位置无效时 return -1;
遍历h
找到第j个元素 跳出循环
返回 h->data;
}
3.代码截图
4.PTA提交列表说明。
-
第一次提交部分正确。
-
第二次提交部分正确 。
-
第三、四次提交答案错误,在判断m位置无效的地方修改了两次,发现没有解决答案错误的问题。
-
第五次提交答案正确 ,找了好久发现
h=p=L
错误,本题是带有表头节点的单链表,应该是h=p=L->next
。
1.题目3:两个有序链表序列的合并
2. 设计思路(伪代码或流程图)
void Union(LinkList *ha,LinkList *hb,LinkList *&hc){ //求两有序集合ha、hb的并集hc。
LinkList *pa=ha->next,*pb=hb->next,*r,*s;
hc=new LinkList;
r=hc;
遍历ha、hb
if (pa->data<pb->data) { //ha<hb
申请空间
保留pa里面的数据
连接到链表中
pa向后移
}
else if(pa->data>pb->data){ //ha>hb
申请空间
保留pb里面的数据
连接到链表中
pb向后移
}
else{ //ha=hb
申请空间
保留pa、pb里面的数据
连接到链表中
pa、pb向后移
}
end
while(pa){ //pb扫描完
申请空间将pa中剩余的节点连接到链表后面
}
while(pb){ //pa扫描完
申请空间将pb中剩余的节点连接到链表后面
}
r->next=NULL;
}
3.代码截图
4.PTA提交列表说明。
-
第一次提交编译错误 , 编译器改成c++后解决。
-
第二次提交多种错误。
-
第三次提交部分正确。
-
第N次提交部分正确 ,大规模输入出现段错误,于是输入不用数组改用链表。
-
第N+1次提交答案正确 。
二、截图本周题目集的PTA最后排名(3分)
本次2个题目集总分:295分
1.顺序表PTA排名
2.链表PTA排名
3.我的总分:221(2分)
三、本周学习总结(2分)
1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?(1分)
- 学习时间安排:先看完教学视频,再过一遍课本,讲课后做题时再边做题边看书,巩固代码。
- 编程时间安排:一般是晚上的时间和没课的时间来写代码,找一大块的时间写代码比较有效率,晚上的思路比较清晰做起来比较顺!?
- 不懂问题是哪种方式交流:遇到困难主要是私下找舍友或同学交流。
2.谈谈你对线性表的认识?(1分)
2.1.顺序表:
- 特点:使用一组地址连续的存储单元依次存储表中的数据元素,常见的就是使用数组去实现。顺序表中的任意数据元素都可随机访问,是一种支持随机访问,长度自动动态调整的线性表结构。
- 优点:访问表中的元素很快,时间复杂度为O(1)
- 缺点:插入,删除元素需要移动大量的元素,时间复杂度为O(n) 。
因此如果我们在编程中需要这样一种线性表数据结构:构造后对元素的访问操作很频繁,而很少进行增,删等元素位置的调整操作,那么就可以考虑使用顺序表
2.2.单链表
- 特点: 用一组地址任意的存储单元存储数据元素。存储单元地址可连续,也可不连续。为了形成逻辑线性结构,每一个结点 除了保存需要存储的数据外,还需要保存逻辑上相邻的下一个结点的地址。链表不支持随机访问。有n个结点的线性表,访问某个结点的平均时间复杂度为O(n/2),最坏为O(n) 。而数组支持随机访问,他的访问时间复杂度为O(1)
- 优点:插入和删除操作无需移动元素,只需修改结点的指针域。这点恰巧是顺序表的缺点。
- 缺点:访问元素时,不支持随机访问。访问第n个数据元素,必须先得到第n-1个元素的地址,因此访问任何一个结点必须从头结点开始向后迭代寻找,直到找到这个目标结点为止。
3.代码Git提交记录截图
四、阅读代码(选做,加1分)
找1篇优秀代码贴图展示,并说明该代码功能是什么,优点是什么?
代码可以是自己同学代码,也可以是其他地方找的代码。