DS博客作业02--线性表
1.本周学习总结
1.1思维导图
1.2.谈谈你对线性表的认识及学习体会
通过这段时间的学习,我了解到线性表是最基本、最简单、也是最常用的一种数据结构。线性表是数据结构的一种,一个线性表是多个具有相同特性的数据元素的有限序列。
线性表中数据元素之间的关系是一对一的关系,我明白了使用合适的存储结构和数据结构对程序的巨大作用,算法的重要性也不言而喻。一开始还看不出线性表和数组的区别,
觉得线性表可有可无,通过几个实例深刻体会到它的便利。
2.PTA实验作业
2.1.有序表插入数据
2.1.1设计思路
要求实现3个函数,在递增的顺序表中插入一个新整数,并保持该顺序表的有序性。
定义i,j
for i=0 to n-1 //遍历顺序表
if L->data[i]>x //寻找插入的位置
break;
end for
for j=n to i //将L的第i项后的后移一位
L->data[j]=L->data[j-1]
L->data[i]=x //将x插入到i的位置
2.1.2代码截图
2.1.3本题PTA提交列表说明
一开始觉得这题和之前数组的一题很像只不过用了线性表,于是照着之前的思路去做,却总是要么最后一位插入错误,或者第一位插入错误,最后函数重新整理了一下,就通过了,通过后想到了更加简洁的方法,就多试了几次。
2.2.顺序表操作集
2.2.1代码截图
2.2.2本题PTA提交列表说明
一开始对return 的使用不理解 导致编译错误
然后Insert函数没有讨论特殊情况导致部分正确
参考了网上的代码
最后完全正确
2.3链表倒数第m个数
2.3.1 代码截图
2.3.2本题PTA提交列表说明
一开始不小心使用了C语法 导致编译错误
然后发现当位置无效时PTA无法通过
检查后发现是开始的结点没有置空
3、阅读代码
3.1 题目
从顺序表中,删除其值在s与t之间(包含s和t,要求s<t)的所有元素,如果s或t不合理或者顺序表为空则显示出错信息并推出运行。
3.2 解题思路
从头到尾扫描顺序表,我们用i表示扫描的元素的个数,用k记录满足判断条件的元素的个数;
则对于扫描到的每一个元素data[i],进行判断:
如果data[i]满足判断条件,说明该元素是应该被删除的元素,k的值加1(删除该元素的操作是通过后面的元素向前覆盖的过程完成的),
如果data[i]不满足判断条件,说明该元素不应该被删除,则需要将该元素向前移动k个元素,进而实现覆盖前面的应该被删除的元素。
3.3 代码截图
3.4 学习体会
此代码出自CSDN上的优秀博客
data【】中i k两个变量使得代码变得思路非常直观
同时定义的数组是代码赋值更加的方便