一、PTA实验作业
题目1:7-1 最长连续递增子序列
给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。
例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)
1. 设计思路(伪代码或流程图)
/*查找最长连续递增子序列函数 */
定义整型变量i,j表示循环变量,k用来作找到后新数组下标
定义整型变量 MaxLength=1; //MaxLength为1, 表示长度只有头部
定义整型 a[maxsize]存放最长连续递增子序列
for i=0 to L->length
a[i]=1; //表示长度只有头部
for i=0 to L->length-1
for i=0 to L->length-1
如果 前一个元素 > 后一个元素
a[i]++
否则 break
找到后:
for i=0 to L->length
如果 a[i] > MaxLength,k=i
如果 长度为1,直接输出此数
如果 长度为0,return
输出最后结果
end for
2.代码截图
3.PTA提交列表说明
- 编译错误。把PTA中的C改成C++后提交;
- 部分正确。没有考虑只有一个数时的情况,需要再加上if(MaxLength==1)时,直接输出这个数;
题目2:6-2 jmu-ds-单链表逆置
本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表为带头结点链表。
(单链表基本操作根据老师发的变化。)
1. 设计思路(伪代码或流程图)
/*逆置函数void ReverseList(List &L)调用 */
如果链表L 为空表||只有有一个元素
输出 NULL,不逆置
定义指针p,q ListNode *p,*q移动
令p指向L的第二个数据
while(p)
q 保存下p的值 ,p移动
p的next指向前一个元素
L->next的值不断变化,循环
end for
2.代码截图
3.PTA提交列表说明
- 需要考虑空表或仅仅只有有个元素时,不需要逆置;
- 答案错误。输入1 2 3 4 5逆置后输出4 3 2 1,修改第一个输出所指结点输出;
- 部分正确。猜想是逆置函数出错,注释掉其他函数,再读代码,查找出错地方,修改:在建模输入值时循环条件出错,将for(i=1;i<n;i++)改为for(i=1;i<=n;i++);
- 格式错误。输出函数,最后一个无空格;
题目3:7-3 两个有序序列的中位数
1. 设计思路(伪代码或流程图)
先类似7-1将给出的两个链表S1,S2合并,用链表S3装好
/*查找中位数int Find(LinkList S3, int m,int n)调用*/
m为中位数下标
定义整型变量j=0 表示S3下标
定义整型变量length=2*n表示合并后S3长度
定义 LinkList p=S3方便进行移动
如果 p为空 return 0
当 j<=m 时
j递增
p移动
直到j==m找到
返回找到的下标所指的值
end for
2.代码截图
3.PTA提交列表说明
- 编译错误。忘记把PTA中的C改成C++后提交;
- 段错误。之前把合并后的S3先输出来,函数没注释掉,不用输出,直接输出中位数的值;
- 答案错误。中位数查出错误,函数出错,检查发现length长度在合并后没有及时改变,应该变成2n;
二、截图本周题目集的PTA最后排名
1.顺序表PTA排名
2.链表PTA排名
3.我的总分:215
三、本周学习总结
1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?
- 课前完成老师布置的预习作业,然后平时上数据结构课程,课后完成相应的PTA练习题;
- 不太满意。除了老师安排的固定学习外可以自己课下多看数据结构书,看看代码和解题思路;
- 编程上不懂的地方先上网自己尝试弄懂,如果不行,请教同学;
2.谈谈你对线性表的认识?
主观认识:线性表是一种数据结构,能表示出前后相同元素之间的关系,让元素有规律的排列或组合;
本章小结:
(1)线性表的定义。线性表是具有相同特性的数据元素的一个有限序列;
(2)线性表的抽象数据类型描述。
ADT List {
数据对象:D={ | ∈ ElemSet, i=1,2,...,n, n≥0 }
数据关系:R1={