第02次作业-线性表
一、PTA实验作业
题目1:6-2 线性表元素的区间删除(20 分)
2. 设计思路(伪代码或流程图)
int a[MAXSIZE] //用来存储小于等于minD大于等于maxD的数
for i=0 to L->Last
if(L->Data[i]<=minD&&L->Data[i]>=maxD)
a[p++]=L->Data[i]
然后将a[]中的数赋给L->Data[],且L->Last=p-1
3.代码截图
4.PTA提交列表说明。
出现过段错误,多种错误,是因为没有理解清楚题目中L->Last是如何变化的,因此判断条件出错。后来将判断条件改为i<=L->Last就行了。
题目2:6-2 jmu-ds-单链表逆置(25 分)
2. 设计思路(伪代码或流程图)
创建一个有头结点的单链表,然后利用尾插法建表
ListNode *s
for i=1 to n{
cin>>s->data;
L->next=s;
L=s;
}
将L-next置为空
对链表进行逆置相当于头插法
ListNode *s,*p
while(L->next不为空){
L=L->next;
p->data=L->data;
L=L->next;
p->next=s->next;
s->next=p;
}
L=s
打印链表
判断链表是否为空,若是,打印NULL;反之,打印是数与数之间用空格隔开,尾部不能有空格。
实现方法如下:
先打印第一个节点的数据,然后
while(L不为空){
cout<<”“<<L->data;
L=L->next;
}
3.代码截图
4.PTA提交列表说明。
题目3:7-3 两个有序序列的中位数(25 分)
2. 设计思路(伪代码或流程图)
利用尾插法分别建立两个单链表,然后合并递增排序,根据数据个数判断出中位数所在位置输出即可
定义一个数组a[200001]
while(i<=n&&j<=n){
if S1中的数小于S2中的数
a[k++]=S1->data然后S1指针后移
else
a[k++]=S2->data然后S2指针后移
}
如果有链表指针还未到达尾部,则用循环将剩下的数据赋给a[]
中位数所在位置的下标为(k-1)/2
最后直接输出a[(k-1)/2]
3.代码截图
4.PTA提交列表说明。
此题提交一次就全部通过了测试点。
二、截图本周题目集的PTA最后排名
1.顺序表PTA排名
2.链表PTA排名
3.我的总分:261
三、本周学习总结
1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?
学习时间安排:在做预习作业前认真看视频,并结合书将新知识大概学习一遍。等老师上课讲时在认真听,敲代码遇到不会的再细读一遍课本。
编程时间安排:一般都在晚上打,因为晚上时间较为充足。或者有两三个小时空余的时候,这样代码可以有足够的的时间来想,不会断断续续的,那样效率不高。
遇到不懂的问题解决方法:与同学交流,让她帮忙找出错误;有时会问学姐思路,然后自己慢慢敲;由于链表不能调试,所以出现问题时会自己按照样例在纸上手动运行一遍,这样很快就能找出错误啦。
2.谈谈你对线性表的认识?
线性表是一种常用的数据结构。有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有一个终端结点没有后继但有一个前驱结点,其它的结点都有且仅有一个前驱和一个后继结点,即“一对一”的关系。线性表中的数据元素要求具有相同类型,它的数据类型可以根据具体情况而定,我们将它的类型设定为elemtype,表示某一种具体的已知数据类型。它可以是一个数、一个字符或一个字符串,也可以由若干个数据项组成。它有顺序和链式两种存储结构。
3.代码Git提交记录截图