博客作业2---线性表
一、PTA实验作业(5分)
题目1:6-3 jmu-ds- 顺序表删除重复元素
1. 设计思路(伪代码或流程图)
···
一、创建顺序表
if(n<=0) exit(0);
给L申请空间
for int i=0 to n-1
输入数据给L->data[i]
end for
令L->length等于循环次数n
二、输出顺序表
for int i=0 to L->length-2
输出 L->data[i]+空格
end for
输出 L->data[i]
三、删除顺序表重复元素
定义整型循环变量i, j=0, k;
for i=1 to L->length-1; i++
初始化k=0;
遍历已经保存下来的数,判断已存数与原数组中的数是否相同, 如果不同k++
if (k>j)说明遍历了新的数组且无重复 ,则创建新的数组数据
end for
L->length=j+1
···
2.代码截图
3.PTA提交列表说明。
这个问题是,刚开始没有判断空表,然后新建数组的下标弄乱了,改一改就对了。
题目2:6-4 集合的基本运算(单链表)
1. 设计思路(伪代码或流程图)
···
一、单链表元素递增排序
定义字符型变量t,用于数据交换
定义结构体指针 r, s;
for r=L; r!=NULL; r=r->next
for s=r->next; s!=NULL; s=s->next)
比较相邻两个数据的大小,如果前一个r->data大于后一个s->data
交换两数
end s
end r
二、输出链表元素
定义一个结构体指针p指向头结点L的下一个节点
while(p)
输出p->data
p后移一个节点
end while
换行
三、求两有序集合ha、hb的并集hc。
{
定义结构体指针 ta, tb, tc;
给hc申请空间
hc->next = NULL;
tc = hc;
ta = ha->next;
tb = hb->next;
while(ta,tb同时不为空){
if(ta->data < tb->data)
给kc下一个节点申请空间,kc后移,将相等的数据放在kc里
ta后移一个结点
else if(ta->data > tb->data)
给kc下一个节点申请空间,kc后移,将相等的数据放在kc里
tb后移一个结点
else if(ta->data == tb->data) 给kc下一个节点申请空间,kc后移,将相等的数据放在kc里
ta,tb都后移一个结点
while (ta不为空)
给kc下一个节点申请空间,kc后移,将相等的数据放在kc里
ta后移一个结点
end while
while (tb不为空)
给kc下一个节点申请空间,kc后移,将相等的数据放在kc里
tb后移一个结点
end while
tc->next = NULL;
}
四、求两有序集合ha、hb的的交集hc。
定义结构体指针ka, kb, kc;
给hc申请空间
hc->next = NULL;
kc = hc;
ka = ha->next; kb = hb->next;
while(ka,kb同时不为空){
if ka中数据等于kb中数据
给kc下一个节点申请空间,kc后移,将相等的数据放在kc里
ka,kb后移一个节点
else if ka中数据小于kb中数据,ka后移一个结点
else if ka中数据大于kb中数据,kb后移一个结点
end while
kc->next = NULL;
五、求两有序集合ha、hb的差集hc
定义结构体指针ta, tb, tc;
给hc申请空间
ta = ha->next
tc = hc
while(ta)
每次进行外循环的时候对tb初始化为hb的下一个节点
while(tb不为空,切tb的数据不等于ta的数据)
tb后移
if(上一个循环结束后tb所指为空)说明没有找到相等的
给tc的下一个节点申请空间,tc后移一个结点
将ta中的数据存入tc
ta后移一个节点,保证遍历完ta链表,控制循环
end while
tc->next = NULL;
···
2.代码截图
3.PTA提交列表说明。
这道题最大的问题就是,我没有先给L的下一个结点申请空间,编译的时候一个段错误,输出递增的结果之后就卡在那里了,卡了好久好久好久,最后去百度了一下才弄清楚是哪里除了问题。
题目3:7-3 两个有序序列的中位数(25 分)
1. 设计思路(伪代码或流程图)
···
求两有序集合ha、hb的并集hc。
{
定义结构体指针 ta, tb, tc;
给hc申请空间
hc->next = NULL;
tc = hc;
ta = ha->next;
tb = hb->next;
while(t1,t2同时不为空){
if(t1->data < t2->data)
给t下一个节点申请空间,t后移,将相等的数据放在t里
t1后移一个结点
else if(t1->data > t2->data)
给t下一个节点申请空间,t后移,将相等的数据放在t里
t2后移一个结点
else if(t1->data == t2->data) 给t下一个节点和下下个节点申请空间,将相等的数据放在刚申请的t的两个节点上
t1,t2都后移一个结点
while (t1不为空)
给t下一个节点申请空间,t后移,将相等的数据放在t里
t1后移一个结点
end while
while (t2不为空)
给t下一个节点申请空间,t后移,将相等的数据放在t里
t2后移一个结点
end while
t->next = NULL;
}
···
2.代码截图
3.PTA提交列表说明。
- 这道题就是集合的基本操作做会了就解决了,编辑错误是用了C的没用C++的。
二、截图本周题目集的PTA最后排名(3分)
1.顺序表PTA排名
2.链表PTA排名
3.我的总分:215
三、本周学习总结(2分)
1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?(1分)
- 本周的课堂派预习作业只有一次,写PTA的时间还是不少的,顺序表和单链表的第一题都是基本操作,做的时候比较懵,是对着书打的代码,觉得对着书抄没什么用就自己慢慢打,还是要很久的,一道题要做很长时间。虽然耗时但是是有用的,记得住。
- 学习时间安排:课堂派做预习作业之前预习课本,上课认真听, 做PTA 的时候再好好看看课本内容
- 编程时间安排,通常除了书面作业之外,否则打开电脑后第一时间就是打开PTA做题,刚接触的部分做得慢就需要时间了
- 不懂的问题会先看一下代码哪里出了问题,可能错的地方改改,看看结果,如果不行就去翻书,再改,还不对的话会去问问同学或者百度。
2.谈谈你对线性表的认识?(1分)
- 线性表、包括顺序表和链表。顺序表里面元素的地址是连续的,链表里面节点的地址不是连续的,是通过指针连起来的。
- 若线性表需要频繁查找,很少进行插入和删除操作时,宜采用顺序存储结构。若需要频繁插入和删除时,宜采用单链表结构。
- 当线性表中的元素个数变化较大或者根本不知道有多大时,最好用单链表结构,这样可以不需要考虑存储空间的大小问题。而如果事先知道线性表的大致长度,用顺序存储结构效率会高很多。
3.代码Git提交记录截图
四、阅读代码(选做,加1分)
求a以内的所有质数的和
循环条件 用b,c,a,d控制得很巧妙,很大程度上减少了执行次数,但是for比较多,a的数小的话比较好用,过大会内存超限。