1.题目1:最长连续递增子序列
2. 设计思路
void max(List &L)
{
定义变量i用来遍历顺序表。
定义变量count表示递增的数量。
定义变量wei保存递增结束时单调递增元素的个数。
定义变量sum来表示最长递增开始的那个元素。
for(i=0;i<L->length;i++)
{
if data[i]<data[i+1]
count++;
else data[i]>=data[i+1] &&count>wei-1
更换sum,wei的值
else
归零count
end if
}
end for
for(i=0;i<wei-1;i++)
{
依次输出data[sum],每次输出后sum++
}
end for
}
3.代码截图

4.PTA提交列表说明

先后遇到了输出后面的递增序列而不是前面的递增序列,递增序列输出不完整,顺序表不够大等问题。
在修改了通过wei和sum来确定开始和结束元素的算法后,解决了问题。
1.题目2:jmu-ds-单链表逆置
2. 设计思路
void CreateList(List &L,int n)
{
定义变量m作为输入
定义节点L,s
定义链表指针r,s,其中r指向新开辟的节点L
for(int i=0;i!=n;i++)
{
输入m,将m赋给s->data
s->指向NULL,r->next=s,使两个节点相连
r=s,继续循环
}
end for
}
}
void PrintList(List L)
{
if L->为NULL
输出“NULL”
while(p!=NULL)
{
定义链表指针 *p=L->next
定义变量i判断是不是第一次输出
if i==0,第一次输出
输出p->data的值,p指向next,i++
else
输出空格p->data的值,p指向next
end if
}
输出换行符
}
void ReverseList(List &L)
{
定义链表指针p,q
p指向节点L的next
L->next为NULL
while(p!=NULL)
{
q=p指向next
p指向next=L指向next
L指向next=p
p=q
此循环实际上是先断开L,接入第一个p
再以第一个p为头,进行头插法
}
}
3.代码截图



4.PTA提交列表说明

在设计算法时,因为对链表操作不熟悉,翻阅了很久课本,期间遇到了不是用头插法而是尾插法,导致逆序后还是一样的问题。
1.题目3:两个有序序列的中位数
2. 设计思路
void sort(LinkList *&L) 排序函数
{
定义链表指针p指向L->next,q
if p为NULL
结束函数
while p不为空
{
while q不为空
{
if p->data>q->data
{
定义中间变量t
交换 p->data和q->data的值
即选择排序法
}
}
p指向next,继续循环
}
}
int Union(LinkList *ha,LinkList *hb,LinkList *&hc) 并集函数
{
定义数组a保存,定义变量i遍历链表,定义变量count计数,判断是否读入数据
定义链表指针 *p=ha->next,*q=hb->next
while p不为空
{
定义变量j遍历链表
for i=0 to j==i
{
count为0
if a[j]==p->data
count++
}
if count!=0
有重合,不能并入数组a
else
a[i]=p->data,同时i++
p指向next,继续循环
}
while q
{
操作与while p基本一致,原理相同
}
调用 CreateListR(hc,a,i)(非此题难点,故不表)函数由数组a创建新的链表
调用 sort(hc)为新的链表排序
返回新的链表的表头
}
void find(LinkList *&L,int n)寻找中位数
{
定义链表指针*p=L->next,定义变量i遍历链表
for i=0 to i!=(n-1)/2
{
p指向next
}
输出p指向data的值
结束
}
3.代码截图





4.PTA提交列表说明

大规模输入过于可怕了
二、截图本周题目集的PTA最后排名


我的得分:2.5
三、本周学习总结
1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?
本周每天都有花一个小时以上在数据结构上,在没有其他课业的时候,我花了很长的时间学习数据结构和C++。我相信这是一个量变引起质变的过程,如链表,我从上学期末初见链表的不理解,到现在可以较为熟练地使用链表,是熟能生巧的结果。
2.谈谈你对线性表的认识?
线性表是一种逻辑储存结构,它专注于点对点的链接,整个结构清晰可见,接下来将要学习的栈也是线性表的一种,可见它是十分重要的。目前为止,我学习了它的两种储存结构,即顺序表和链表,顺序表可以在O(1)的时间复杂度上寻找到相应的元素,但整体使用不方便,需要插入、删除时,必须要整块整块地移动顺序表。
而链表的时间复杂度虽然略高于顺序表,但每个元素并非顺序储存,而是通过指针形成链式结构,可以简单地插入拼接。
3.代码Git提交记录截图
