一、PTA实验作业
1、题目1:最长连续递增子序列
2、设计思路:#求最长递增子列
定义变量i遍历顺序表
定义变量place来记录子序列起始位置
定义变量len来记录长度,置为1
定义变量maxlen记录最长的长度
定义变量maxplace来记录最长的长度的起始位置
while i=0 to L->Last
if L->Data[i]>=L->Data[i+1]
1、palce移到下一个元素
2、len置为1
3、i加1
else
1、len加1
2、i加1
end if
if maxlen<len
1、len赋给maxlen
2、place赋给maxplace
end if
end while
for i=0 to maxlen-1
最长子序列依次赋值给L
end for
for i=0 to maxlen-1
if i=0
输出值
else
输出空格加值
end if
end for
3、代码截图
4、PTA提交列表说明
1、用C提交出现了编译错误,后来改成了C++,出现段错误;
2、用嵌套for循环记录最大子序列出现了段错误,改进成一个for循环,提交后出现了编译错误;
3、寻找发现在依次赋值给L时,i<=maxlen,改为i<maxlen后提交正确。
1、题目2:单链表逆置
2、设计思路:#将链表L逆置
定义指针结构变量p,q,p指向L的第一个数据节点
if p==NULL
1、输出NULL
2、retur;
end if
L->next置为空
while p!=NULL
头插法,使其逆置
end while
3、代码截图
4、PTA提交列表说明
1、第一次提交编译错误,是输出函数结尾少了'}';
2、后面提交出现了段错误以及部分正确,主要错误就是:(1)创建函数在创建单链表时尾节点没有赋值为NULL;
(2)逆置函数使用头插法时while循环的条件使用错误;
(3) 输出函数判断单链表为NULL时,只输出而没有return。
1、题目3:两个有序序列的中位数
2、设计思路:#合并两个有序表
定义指针结构变量r,始终指向S3尾节点,开始时指向头节点
S1和S2移到第一个数据节点
while S1和S2都不为NULL
if S1的数据元素<=S2的数据元素
1、r指向S1
2、S1指向下一个节点
else
1、r指向S2
2、S2指向下一个节点
end if
r指向下一个节点
end while
if S1和S2都为NULL
return;
end if
if S1!=NULL
r指向S1
end if
if S2!=NULL
r指向S1
end if
3、代码截图
4、PTA提交列表说明
在做这题的时候,由于前面的题目跟它有异曲同工之处,所以提交时还是比较顺利的,但在做的过程中还是又遇到一些小问题
1、在合并时把相同项删掉了,改成了上述写法就没有这种状况了;
2、在写博客园的时候,混淆了逻辑位置和物理位置,又提交了1次,发现只有部分正确,认真思考后,弄清了之前的思路。
二、截图本周题目集的PTA最后排名
1.顺序表PTA排名
2.链表PTA排名
3.我的总分:
238
三、本周学习总结
1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?
因为自己的写代码效率低,所以一有空就编程,遇到不会的就向别人请教;整体还是比较满意的。
2.谈谈你对线性表的认识?
线性表是一个序列就是元素之间是有顺序的,元素间存在序偶关系。线性表的存储分为顺序存储结构和链式存储结构。
(1)顺序存储结构:用一段地址连续的存储单元一次存储线性表的数据元素。
优点:可以快速的访问表中任意位置的元素;
缺点:插入和删除需要移动大量元素。
(2)链式存储结构:用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。
优点:在插入和删除操作时,不需要移动元素;
缺点:没有顺序存储结构随机存储的优点;
须为表中元素之间的逻辑关系而增加额外的存储空间。
3.代码Git提交记录截图