博客作业2---线性表
一、PTA实验作业(5分)
1.题目1:6-3 jmu-ds- 顺序表删除重复元素(25 分)
2. 设计思路(伪代码或流程图)
for i=0 to i<L->length遍历链表
for j=i+1 to j<L->length查找链表中的数看似否为重复元素
如果找到该数,把它的置为-100
for i=0 to i<L->length再次遍历链表
当链表元素不是重复元素,即不等于-100时
把不重复元素依次放入链表中,即依次修改旧链表元素值
k++记录新链表长度
end i
把链表长度置为k
3.代码截图
4.PTA提交列表说明。
第一次提交时有一个点没通过,提示词-空表,后来发现输出语句是错的,错误如下:
j=L->length-1;
for(i=0;i<j;i++)
printf("%d ",L->data[i]);
printf("%d",L->data[j]);
后来更改了该语句为:
for(i=0;i<L->length;i++){
if(i==L->length-1) printf("%d",L->data[i]);
else printf("%d ",L->data[i]);}
先判断是否为最后一个节点,再决定节点结尾带不带空格,避免了顺序表为空的情况
1.题目2:6-4 集合的基本运算(单链表)(20 分)
2. 设计思路(伪代码或流程图)
- 排序
for p=L to p!=NULL遍历链表
for q=p->next to q!=NULL遍历p后面的链表
当 p->data大于q->data时
p指向的元素与q指向的元素交换
重复交换操作直到遍历完整个p链表
- 求并集
令新链表头节点等于ha的头结点
令pa=ha->next,pb=hb->next
while pa和pb都不为空指针
分别比较pa和pb中的元素
将最小的元素放入新链表中
取完最小值的链表指针移向下一元素
重复上面操作,直到其中一个链表已经遍历完
如果pa!=NULL
pc->next直接指向剩余的pa
如果pb!=NULL
pc->next直接指向剩余的pb
- 求差集
while pa不是空指针
pb=hb->next;
while pb!=NULL 且 pb->data小于pa->data
pb指针指向下一个节点
若pa结点值不在B中
s=(LinkList *)malloc(sizeof(LinkList));
s->data=pa->data;
pc->next=s;
pc=s; 插入新链表中
pa指向下一个结点
3.代码截图
冒泡排序
求并集
求交集
求差集
4.PTA提交列表说明。
后面两个测试点无法通过,原因是我之前写的输出函数有错误,当链表为空表时,该题的要求是不能输出内容,而我写的会输出NULL,后来我把输出语句改了一下,最后两个测试点都通过了。
1.题目3:7-3 两个有序序列的中位数(25 分)
2. 设计思路(伪代码或流程图)
求并集
令新链表头节点等于ha的头结点
令pa=ha->next,pb=hb->next
while pa和pb都不为空指针
分别比较pa和pb中的元素
将最小的元素放入新链表中
取完最小值的链表指针移向下一元素
重复上面操作,直到其中一个链表已经遍历完
如果pa!=NULL
pc->next直接指向剩余的pa
如果pb!=NULL
pc->next直接指向剩余的pb
把两链表连成一个有序链表
while(r){
n1++;
r=r->next;
}
求新链表的长度n1
由于(n1+1)/2即为中位数,指针后移(n1+1)/2就得到中位数的节点
3.代码截图
4.PTA提交列表说明。
第一次写的时候用的是数组来写,出现了两个错误
第二个错误的原因是我理解错了题意,题中要求的是把两个表组成一个表,而我求了他们的并集,把相同的元素删掉了。最后一个错误是我用了数组来写,而数组空间不够大,后来我就改成了用链表来动态申请空间,不过数组来写的话把数组写大点也是可以的。
改了用链表之后最后一个测试点又由段错误变成了答案错误
错误原因:把函数前面的“typedef int ElemType”语句错写成了“typedef char ElemType”
二、截图本周题目集的PTA最后排名(3分)
1.顺序表PTA排名
2.链表PTA排名
3.我的总分:235
三、本周学习总结(2分)
1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?(1分)
安排内容:学习时间安排、编程时间安排、不懂问题是哪种方式交流?
本周主要时间都花在写PTA上,写PTA时遇到问题的时候会向同学请教。不太满意,写的时候发现对链表还不熟悉,很多基本的操作如链表的删除等都要翻看课本才写得出来,主要原因是预习的时候不太认真。本周打算先看一下课本,复习一下,这周写PTA集太依赖课本了。
2.谈谈你对线性表的认识?(1分)
线性表是很灵活的,可以随时改变大小,而我们之前学的数组不能,所以数组会占用很多内存,运行效率没有线性表高,比如有一些题目的数据大小没有给出,运用线性表可以灵活的分配内存,不会造成资源的浪费,这是线性表的优点。线性表包括顺序表和链表,线性表存储元素的类型都是一样的。
3.代码Git提交记录截图