一、PTA实验作业(5分)
1.题目1:6-3 顺序表删除重复元素
2. 设计思路(伪代码或流程图)
自定义函数void CreateSqList(List & L, int a[], int n)
定义变量i用于循环
for i = 0 to n-1
赋a[i]的值给L -> data[i]
end for
自定义函数void DelSameNode(List & L)
定义变量i用于循环,j用于二次循环,judge判断元素是否重复,k表示m的下标,m用于存储非重复的元素,d代表长度
定义m[maxsize]存储非重复的元素
令d=L -> length;
for i = 0 to d
令judge = 0
for j = i-1 to 0
若L -> data[j] 等于 L -> data[i]
judge = 1
若 judge= 0
将该元素存入m[i]
否则表示该元素重复,长度减一
end for
end for
for i = 0 to L 的长度
令L -> data[i] 等于 m[i]
end for
自定义函数void DispSqList(List L)
定义i用于循环
若不为空表,输出第一个不带空格的元素
for i = 1 to L 的长度
输出带空格的元素
end for
3.代码截图
4.PTA提交列表说明。
未考虑空表时的输出
用了 if 来修正
题目2 单链表逆置
2. 设计思路(伪代码或流程图)
自定义函数void CreateList(List & L, int n)
定义变量 i 用于循环
定义指针 r用于操作,p = L
for i = 0 to n-1
输入数字r->data
令r -> next 等于 p -> next
p -> next =r
p = p -> next
end for
自定义函数ReverseList(List & L)
定义指针 s , p = L -> next
当 p不为空时
令s指向p,p指向r,r等于p,p等于s
退出循环后
L 指向 r
自定义函数PrintList(List L)
若 L -> next -> next 为空
输出 NULL
否则
令 L 指针向后移动
输出L -> data
再令 L 后移
当 L 指向非空时
输出 “”L->data
指针后移
结束循环
3.代码截图
4.PTA提交列表说明。
未给r分配空间导致以及没有考虑空链表导致段错误。
题目3 两个有序链表序列的合并
2. 设计思路(伪代码或流程图)
定义链表 L1 L2 L3
定义工作指针s1 = L1
s2 = L2
s3 = L3
定义工作指针r
定义变量n=0
用尾插法建立2个链表
循环比较 s1 -> data 与 s2 -> data
若 s1 -> data > s2 -> data) {
r -> data = s2 -> data;
r -> next = s3 -> next;
s3 -> next = r;
s2 = s2 -> next;
} 将小的存入L3并且令其指针后移
小于等于时同理
利用循环输出
3.代码截图
4.PTA提交列表说明。
忘记分配内存,并列时我把重复的给删除了导致第二点错误
二、截图本周题目集的PTA最后排名(3分)
1.顺序表PTA排名
2.链表PTA排名
3.我的总分:215
三、本周学习总结(2分)
1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?(1分)
安排内容:学习时间安排、编程时间安排、不懂问题是哪种方式交流?
不满意,时间不够,大多数时间都在做pta,做得很慢,下次要提高效率
2.谈谈你对线性表的认识?(1分)
此处先谈你自己主观认识,后面再具体总结本章各个小节内容。
线性表是一种数据,是以栈、队列、字符串、数组等特殊线性表的形式来使用的,能够提高数据运算的效率,线性表是一个线性结构。
3.代码Git提交记录截图
四、阅读代码
void isSymmetric(Node *L){
int arr[maxSize];
//链表中共有n个元素
Node *r;
r = L->next;
int i = 0;
while(i < (linkListSize)/2){//当小于一半的时候
arr[i] = r->data;
r = r->next;//循环
i++;
}
i--;//回到数组的最高值
//若linkListSize是奇数,则需要后移一位(越过中心结点)
if(linkListSize%2==1) r= r->next;
while(r!=null)//未到链表尾部时
{
if(r->data == arr[i])
{
i--;
r = r->next;
}
else break;//跳出循环
}
if(i == -1){
printf("中心对称
");
}
else{
printf("非中心对称
");
}
}
该代码用于判断链表是否对称,用a []存前半段代码,再与后半段比较,若不同跳出循环输出不对称,否则循环到结束,输出对称,思路清晰,注释明白