一、PTA实验作业(5分)
1.题目1:7-1 最长连续递增子序列
给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。
2. 设计思路(伪代码)
#define MAXSIZE 100000
typedef struct{
ElementType Data[MAXSIZE];
Position Last; // 保存线性表中最后一个元素的位置
}list;
定义结构体变量 L;
定义整型变量 正整数的长度n 循环变量i 储存变化的地址k=1 递增的长度o=0 储存新一轮进行递增的地址p
Input n
for i=0 to i=n 共n次
Input L.data[i];
if i!=0 and L.data递增 k++;
if k 大于 o
o 等于 k,记录递增的长度
p 等于 i-k+1
end if
if i!=0 and L.data递减 重置k=1;
end for
for i=p to i=p+o-1
Output L.data[i] ;
end for
3.代码截图
4.PTA提交列表说明
提交错误说明一:从16分到10分:
-
A:10分:
-
B:16分:
因为这道题是比较早做的,所以已经忘记了当时是怎么改的,所以就从提交记录里将两个代码对比了一下,发现两者的区别在于循环条件
A的循环条件是从0开始的,但是我在循环前就令last=L->Data[0],所以接下来的next=L->Data[i]其实并没有起到判断其是否递增的功能,应当要从1开始
提交错误说明二:从16分到20分
因为到最后实在改不出来了,所以换了个思路写, 通过记录顺序表的最大递增长度以及每次开始递增的位置进行实现
1.题目2:6-2 jmu-ds-单链表逆置
2. 设计思路
参数为新建的L
if L等于NULL or L->next等于 NULL
return ;
end if
定义指针 pPre=L;储存先前指针
定义指针 pCur=pPre->next ;储存当前指针
定义指针 pNext=NULL 为后继指针
while(pCur!=NULL)
pNext=pCur->next;
pCur->next=pPre;
pPre=pCur;
pCur=pNext;
end
L->next=NULL;
L=pPre;
3.代码截图(主函数以及创建的函数和题目3一样)
逆序函数
4.PTA提交列表说明
一、格式错误:题目要求最后一个数据不跟空格
二、链表空:题目要求输出NULL
1.题目3:7-3 两个有序序列的中位数(25 分)
2. 设计思路(伪代码或流程图)
1.主函数就是调用函数
2.新建就是课本尾插法
3.合并
4.找中位数
定义 指针TL
TL=L
定义整型变量s=0
if NULL!=L or NULL!=L->next
while TL->next !=NULL
s++;
TL=TL->next
end
if s!=1
s=s/2;
end if
while s--!=0 L=L->next
Ouput L->data
3.代码截图
1 主函数
2 新建(尾插法)
3 合并
4 找中位数
4.PTA提交列表说明
一、编译错误:提交的时候忘记把C改成C++了
二、从12分(部分正确)到25分
- 错误一:审题有误,以为是求并集,所以把重复的元素删除了------测试点最大N通过
- 错误二:最小N
改正:
原因:L是链表的表头,缩小了循环范围导致输出的是表头的内容,但表头无内容
二、截图本周题目集的PTA最后排名(3分)
本次2个题目集总分:295分
曾文惠 201721123002
1.顺序表PTA排名
2.链表PTA排名
3.我的总分:184
三、本周学习总结(2分)
1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?(1分)
本周的代码是从周三开始做的一直到作业提交的前一秒
我看了一下自己的提交记录,有在晚自习前的,也有在半夜(这天好像是立志要完成几道题,但是最后好像没有实现.....),提交记录也是满满的辛酸,但是总的来说,这周也依然是十分努力,代码都是自己打的。
对自己的安排满意吗?我觉得还是满意的吧,基本有时间都是在打代码,就是效率有点低,然后就是一直把握不了问同学的时间段,太早问了感觉自己的查错能力没有得到提升,坚持自己调又是一天一题的效率,目前是将自己遇到的错误都放到了word里,希望积少成多,可以慢慢积累经验,提高自己的差错能力。
然后我还发现了一个问题还是老毛病:在写博客的时候发现回忆之前写的代码有点艰难..我个人是记性比较不好的,上学期的上机考也是经常得0分的,但是目前写代码都十分困难,在想还有什么时间段可以用来复习....
2.谈谈你对线性表的认识?(1分)
-
我的主观认识:线性表是最基本、最简单、也是最常用的一种数据结构,它是n个具有相同特性的数据元素的有限序列,在稍复杂的线性表中,一个数据元素可由多个数据项组成,线性表这个名字与它的功能也十分贴切,就像是一个表,主要由顺序表示或链式表示,各个元素之间又有一定的线性联系,使得一个个的元素连成了一个表。
-
各章节总结:
线性表通过顺序表和链表实现其基本运算
1.顺序表-------线性表的顺序存储结构
《1》抽象数据类型
《2》时间复杂度
2.链表----------线性表的链式储存结构
《1》单链表
《2》双链表
《3》循环链表
3.代码Git提交记录截图(...)
error
四、阅读代码(选做,加1分)
因为如上流程图 ,我的合并函数十分的长,所以找了吴军霖同学的代码学习借鉴
void ListMerge( List &A , List B ){
List p = A->next;
List q = B->next;
List s = A;//以A为表头?
while( p||q ){
List keep;
if( !q || p && p->data<=q->data ){
keep = p->next;
s->next = p;
s = p ;
p = keep;
}
else{
keep = q->next;
s->next = q;
s = q ;
q = keep;
}
}
s->next = NULL;
}