第02次作业-线性表
---恢复内容开始---
1.题目1:
题目:
6-2 线性表元素的区间删除(20 分)
给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变。
2. 设计思路(伪代码或流程图)
不同与课堂派上的题目,需要比较将元素与最大值和最小值进行比较
List Delete( List L, ElementType minD, ElementType maxD ){
int i,j=0,k,d;
k=0;**k来计算删去的节点量
for(i=0;i<=L->Last;i++){
if(L->Data[i]>minD&&L->Data[i]<maxD){**判断节点是否满足条件,若满足则删去
k++;
}
else{
L->Data[j++]=L->Data[i];
}
}
L->Last=L->Last-k; 删去被删掉的节点的长度
return L;
}
3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)
4.PTA提交列表说明。
将这道题目与课堂派小测上的题目弄混
1.题目1:题目名称
6-3 jmu-ds-链表倒数第m个数(20 分)
已知一个带有表头节点的单链表,查找链表中倒数第m个位置上的节点。
- 输入要求:先输入链表结点个数,再输入链表数据,再输入m表示倒数第m个位置。
- 输出要求,若能找到则输出相应位置,要是输入无效位置,则输出
-1
。2. 设计思路
题目一开始,我以为用双链表来进行编程,可以直接倒过来进行寻找节点,但是用单链表的方法也更简单,可以计算出正数第几个节点
int Find(LinkList L, int m ){
LNode *p=L->next;
LNode *x=L->next;
int i=0;
int j;
while(p!=NULL){**用这部分计算链表的长度
p=p->next;
i++;
}
j=i-m;**于是就可以计算出往前数第几个是所要寻找的节点
if(m>i||m<=0){
return -1;
}
else{
for(j;j>0;j--){**然后直接进行寻找就可以找出
x=x->next;
}
return x->data;}
}3.代码截图
4.PTA提交列表说明。
没看清楚题目,若是输入错误,则要输出-1
1.题目3:
7-1 两个有序链表序列的合并(20 分)
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的并集新非降序链表S3。
2. 设计思路(伪代码或流程图)
可以通过建立三个链表,通过前面俩个链表每个节点一次进行大小比较得出第三个链表,所得出的链表就不需要排序
void combine(List l1,List l2,List l3)
{
l1=l1->Next;
l2=l2->Next;
while(l1!=NULL&&l2!=NULL)
{
if(l1->data>l2->data)**条件是判断哪个节点较小就赋予l3
{
l3->Next=l2;
l2=l2->Next;
}
else
{
l3->Next=l1;
l1=l1->Next;
}
l3=l3->Next;
}
if(l1==NULL&&l2==NULL) return;
if(l1!=NULL)
l3->Next=l1;
else l3->Next=l2;
return;
}3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)
4.PTA提交列表说明。
二、截图本周题目集的PTA最后排名
本次2个题目集总分:290分
1.顺序表PTA排名
2.链表PTA排名
3.我的总分:
3. 我的总分:215分
PTA总分在200--250分:2分
三、本周学习总结
1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?
每天都有抽出时间来进行数据结构的学习,可是基础并不扎实,基础的东西并没有高懂,好高骛远,应该踏实进行学习
2.谈谈你对线性表的认识?
线性表学习上,有点类似与数值,,其中各元素的相对位置都是线性的,除了第一位和最后一位,其中的元素都有前一位和后一位但都唯一,且相对与数组来说操作计算量更小
3.代码Git提交记录截图