一、PTA实验作业
题目1:6-2 线性表元素的区间删除
设计思路
定义整型变量i作为循环变量,j用来储存所删除节点的个数
for (i小于顺序表长度时执行循环)
if(顺序表中第i个数大于Mind且小于MAXd)
j++
否则L->Data[i-j]=L->Data[i];
i++
L->Last-=j;
代码截图
PTA提交列表说明
本题第一次提交时用了while循环语句,结果编译器判定是段错误,后来改为for循环时提交答案正确。
题目2:6-2 jmu-ds-单链表逆置
设计思路
void CreateList(List &L,int n){
if(n==0){ 判断输入n是否为零
printf("NULL");
exit;若是0 则输出NULL并退出
}
定义链表指针 s,r
定义整型变量i作为循环数x用来储存要写入链表的数;
L=(ListNode * )malloc(sizeof(ListNode));链表初始化
让r指向头节点
for(i<n时执行循环){
s=(ListNode * )malloc(sizeof(ListNode));
输入数并储存在x中;
把x中的数写进;链表
r->next=s;
r=s;
}
r->next=NULL;
}
void ReverseList(List &L){
定义链表指针p,q,r
if(表为空) return;
p=L->next;p,q分别指向L 与q的下一个节点
q=p->next;
p->next=NULL;
while(q指向节点不为空执行循环){
r=q->next;
q->next=p;逆置链表
p=q;
q=r;
}
L->next=p;
}
void PrintList(List L){输出链表
ListNode *p=L->next;
while(p!=NULL){
if(p->next==NULL){
printf("%d",p->data);
}
else{
printf("%d ",p->data);}
p=p->next;
}
}
代码截图
PTA提交列表说明
本题第一次提交时是因为输出函数格式不正确而导致答案错误,加上并没有判断输入的n是否合理所以错了,后来经过修改改正
题目3:7-3 两个有序序列的中位数
设计思路
struct mdian{创建结构体
int num;
};
创建结构体数组 str[200005];
bool compBySize(struct mdian a,struct mdian b){
return a.num<b.num;}
int main(){
定义整型变量n来记录数据
输入整数存于n
定义整型变量i作为为外层计数器
for(i<2n时执行循环){
输入整数存于结构体数组;
}
sort(str,str+2*n,compBySize);//排序
printf("%d",str[n-1]);按顺序输出数组
return 0;
}
代码截图
PTA提交列表说明
本题用链表处理比较麻烦,于是巧妙地运用了数组,算是一点小偷懒了= =
所以除了前两次提交编译器没选好出现了编译错误
其他地方没有什么大的错误
二、截图本周题目集的PTA最后排名
1.顺序表PTA排名
2.链表PTA排名
3.我的总分:
200
三、本周学习总结
1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?
其实本周自己对于时间的安排不是特别好,这学期学到数据结构明显比较吃力了,所以平时做作业也不是特别积极,导致本周的作业都是堆到最后几天来做的,所以自己很不满意,以后要养成经常打代码的习惯,作业尽量提早做,平时经常复习,提高自己对代码的熟练度。
2.谈谈你对线性表的认识?
线性表是最基本、最简单、也是最常用的一种数据结构。
线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。
除此之外还有很多东西有待学习,而且我对线性表研究的也不是很透彻,以后补充。
四、阅读代码
作者仅仅用不到100行代码就实现了双向链表。
包括以下功能:
1. 添加节点
2. 删除节点
3. 取得头节点
4. 取得尾节点
5. 取得下一个节点
6. 取得上一个节点
7. 链表是否为空的判断
8. 取得链表节点个数
而且代码很清晰 可读性很高 很值得学习