第02次作业-线性表
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)的时间复杂度上寻找到相应的元素,但整体使用不方便,需要插入、删除时,必须要整块整块地移动顺序表。
而链表的时间复杂度虽然略高于顺序表,但每个元素并非顺序储存,而是通过指针形成链式结构,可以简单地插入拼接。