1.本周学习总结
1.1思维导图
1.2.谈谈你对线性表的认识及学习体会。
- 链表的创建和使用很奇怪,看似没有差别但是无法正常运行,有的时候需要头插法,有时需要尾插法。操作量大且复杂。
2.PTA实验作业
2.1.题目1:6-1 jmu-ds-区间删除数据
2.1.1设计思路(伪代码)
定义变量j,遍历链表
L->length=j, //以赋值的方式删除元素
cout<<L->data[i];
if(i!=L->length-1) cout<<" "//空格与元素分别输出
2.1.2代码截图
2.1.3本题PTA提交列表说明。
- 本题主要是链表的基本知识,但是需要用C++的语法,模仿书本上的方式导致了错误
- 在查询资料后解决了问题
2.2题目2: 6-2-有序表插入数据
2.2.1设计思路(伪代码)
定义i,j
for i=0 to n-1 //遍历顺序表
if L->data[i]>x //寻找插入的位置
for j=n to i //将L的第i项后的后移一位
L->data[j]=L->data[j-1]
L->data[i]=x //将x插入到i的位置
2.2.2代码截图
2.2.3本题PTA提交列表说明。
- 本题寻找插入元素的位置很难,先是两端的极限位置,然后是循环寻找数据大小,用赋值的方式删除元素。
2.3 题目3: 6-3顺序表删除重复元素
2.2.1设计思路(伪代码)
定义j,m 分别进行循环,控制循环顺序
for(i=0;i<L->length-m;i++) 外层从第一个数开始循环
{
for(j=i+1;j<=L->length-m;j++) 内层从第二个数开始循环,之后依次从外层循环的后一个数开始循环
{
if(L->data[i]==L->data[j]) 出现相同数据
{
L->data[j]=L->data[j+1]; 删除次数据,向后移动一位
m++;
}
} end for
} end for
L->length-=m; 顺序表长度减少
2.2.2代码截图
2.2.3本题PTA提交列表说明。
- 本题需要两层循环,一开始没有设置两层循环导致无法找到需要删除的元素。
- 当最后一项删除时,题目的循环条件要到最后一个元素。
3、阅读代码
3.1 题目
删除单链表倒数第K个节点
3.2 解题思路
- 要删除倒数第K个节点,首先我们需要知道该链表有几个节点,然后再使指向头结点的指针走size-k-1步,删除该指针所指向的节点即可。
3.3 代码截图
3.4 学习体会
- 本题的约束条件较多
- 设置两个指向头结点的指针,可以先后出发,寻找倒数第K个节点
- 让其中一个指针先走K步,后使两个指针同时运行