一、PTA实验作业
题目一:
6-3 jmu-ds- 顺序表删除重复元素
2. 设计思路(伪代码或流程图)
1.创建顺序表,采用for循环,
将从主函数传来的数组a【】录入到顺序表中,
其中循环次数n为顺序表的长度,for(i=0;i<n;i++)
2.输出顺序表,同样采用for循环,n与上同,
逐个输出//printf("%d",L->data[i]);(已经经过删除函数处理);
为满足题目要求,空格在if语句中输出
if(i<L->length-1)printf(" ");
3.删除重复元素,定义变量看k,q,s来控制双重循环,
for(k=0;k<L->length;k++)
第一层从第一个元素开始,
让其与从第2个元素到最后一个元素的数值进行比较
(由2层循环来实现 q=k+1; while(q<L->length)),
一旦两个元素的数值相同,
则从第q个元素开始向前缩进1,
if(L->data[k]==L->data[q]) L->data[s]=L->data[s+1] 同时将顺序表长度减一,
然后重复第一层循环,逐个元素比较。
3.实验代码
(仅删除函数)
4.PTA提交列表说明
做题轻率大意,没有事先在编译器查看是否能够运行
后在编译器查找错误,得以解决
6-3 jmu-ds-链表倒数第m个数
2. 设计思路(伪代码或流程图)
定义结构体指针就就j=l;k=l;
if(输入的m小于等于0)
则return -1
else
for(int i=0;i<m;i++){
j指向下一个节点
}
if(j==NULL){ //超出范围
return -1;
}
k指向头节点
while(j没有指向链尾){
j=j->next;k=k-next;//j已经进行了m次循环,当其指向链尾时,k正好指向倒数m个处的节点
}
返回k的值即为题目所求
3.实验代码
4.PTA提交列表说明
错误点:一开始if(j==NULL)判断是否超出范围写在了第一次for循环之前,导致程序无法辨别是否超出范围,但pta只是提示无效范围,自己找不到错误点,问了下大佬,得以解决。
7-3 两个有序序列的中位数
2. 设计思路(伪代码或流程图)
定义整型变量n,i,q,k用来计数
定义3个数组 a[100000],b[100000],c[200000],来储存元素
for(i=0;i<n;i++){
读入输入的元素进a[ ]
}
b[ ]同上
while(i<n&&k<n){//
if(a[i]<b[k]){//用if else 语句来剔除重复的元素,并排序
c[q]=a[i];
i++;
}
else{
c[q]=b[k];
k++;
}
q++;
}
剔除后即为a【】b【】的并集c【】
由题目
返回c[(2*n-1)/2;
3.实验代码
4.PTA提交列表说明
错误点:一开始被并集搞得有点迷糊,原先想先都录入到c【】再剔除重复元素,但代码写的不行,实现不了这个功能
解决方法:搞不定就换换种思路,在录入进c【】时通过比较a【】与b【】的大小,剔除重复元素的录入
1.顺序表PTA排名
2.链表PTA排名
3.我的总分:
总分:2
三、本周学习总结
学习时间安排:学习时间大部分在晚自习
不满意,尽量不太过于怠惰懒散,多看书,多学习,多交流
2.谈谈你对线性表的认识?
主观:线性表是一种逻辑结构,第一个元素无前驱,最后一个元素无后继
总结:线性表有顺序表和链式两类存储结构,由零个或多个数据元素组成的有序序列,常见操作有
1:建立一个空的线性表并初始化
2:插入节点,删除节点
3:查找节点
4:获取元素个数
3.代码Git提交记录截图
在码云的项目中,依次选择统计-Commits历史-设置时间段,进行搜索并截图,如下图所示,需要出现学号、项目提交说明。请在码云中将你的昵称改为“学号-姓名”。