博客作业2---线性表
一、PTA实验作业(5分)
题目1: 线性表元素的区间删除
设计思路(伪代码或流程图)
定义三个变量 i为循环变量,j,count控制链表的移动
当i<=L->Last时{
如果L->Data[i]在可删除区间内,count++;
否则j++;}
循环结束,链表的长度减少count
代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)
PTA提交列表说明。
- 一开始不知道函数的示例程序是不完整的,所以不管删除那部分代码怎么写,编译器都提示编译错误,所以也不知道对不对,每次都往上提交,结果pta上也说不对。我本来绝得这题得思路还是很清晰的,只要在删除区间内,指针直接往下移动跳过要删除的数就好了,可是具体写的时候就是运行不出来,最后这题基本上是在舍友的指导下写的。
题目2: jmu-ds-单链表逆置
设计思路(伪代码或流程图)
//创建单链表
为L申请内存
尾插法建立单链表
//逆置单链表
定义三个链表,p,q,s;
q指向L的下一节点,将L的内容全部清空
while(q){
仿造头插法,利用中间链表s,用头插法往L里新建内容
让q记住p的下一节点
free(p);
}
//输出单链表
定义链表p指向L的下一节点,定义space=0判断是否需要输出空格
如果p==NULL时输出NULL
while(p!=NULL){
如果 space!=0 输出空格
输出p->data
p=p->next;
space++;}
代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)
PTA提交列表说明。
- 这一题一开始想的太简单,就以为是用尾插法建立链表,仿照头插法再输出就好了。结果提交pta就各种错误。
- 然后舍友问我为什么要把q,r都置为NULL,我发现好像还真的不用这样,p指向的next也没有定义,整个内容错误太多。后来受到舍友的启发,用q来记录L的下一节点,然后将L置为NULL后再重新用头插法往里面放内容,所以就改成了现在这样。
题目3:jmu-ds-链表倒数第m个数
设计思路(伪代码或流程图)
定义变量length存放链表的长度,定义一个新链表p
p=L;
while(L->next){//计算链表长度
L=L->next;
length++;
}
for(int j=1;j<length;j++){
如果j==(length-m+1)
返回L->data;}
返回-1;
代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)
PTA提交列表说明。
- 一开始的思路是让p遍历到链表的倒数m处,然后再让p,f一起遍历链表,当p在次遍历到尾部时,f就刚好到了倒数m处,但是就是调试不出来,只能换个思路,计算出链表长度,当链表到达length-m+1处时再输出 L->data;
二、截图本周题目集的PTA最后排名(3分)
1.顺序表PTA排名
2.链表PTA排名
3.我的总分:133
三、本周学习总结(2分)
1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?(1分)
安排内容:学习时间安排、编程时间安排、不懂问题是哪种方式交流?
- 这一周的学习时间安排很不合理,这周的社团活动并没有占据很多时间,本周的空闲时间还是很多的但是都不怎么用到学习上,一周时间都是浑浑噩噩的,然后到周末了才开始敲代码,写题目。开学这么久了还是不怎么再学习状态,再加上数据结构又比上学期的C难了许多,所以很多时候听老师讲课也不怎么听得懂。听不懂就不想写题目,不想写题目就更加不会,就这样陷入了一个恶性循环里。然后后面写题目时也就和舍友或者问一下隔壁,不怎么到群里问,因为进度太慢了,不好意思去群里问。从下个星期起会努力的进入状态,争取每天可以写一道题目,不会的题目也会试着到群里问一下。
2.谈谈你对线性表的认识?(1分)
此处先谈你自己主观认识,后面再具体总结本章各个小节内容。
- 线性表是最基本、最简单、也是最常用的一种数据结构。它可以分为顺序表和链表两种。但是顺序表里面元素的地址是连续的,链表里面节点的地址不是连续的,是通过指针连起来的。在查找元素时顺序表的效率比链表高,但是插入删除时链表的效率远高于顺序表。