一、PTA实验作业
题目1:6-2 线性表元素的区间删除(20 分)
1. 设计思路:
1.首先定义i,j两个变量,i用来记录数组Data[]的下标,而j用来记录在区间(minD,maxD)之中的元素个数。
2.当i=0到i=L->Las-1t时,
如果L->Data[i]>minD&&L->Data[i]<maxD,用j来记录。
不然 L->Data[i-j]=L->Data[i],i加一
最后线性表的长度减去j。返回 链表L;
2.代码截图
3.PTA提交列表说明。
解决方法:一开始没有考虑表是空表,直到提交,看到测试点才发现,在加入判断表是不是空的时候,又出现错误,经过多次的修改,才正确。
题目2:7-1 两个有序链表序列的合并(20 分)
1. 设计思路:
1.先定义 init(LinkList &L);//初始化链表
read(LinkList &L);//读入函数
merge(LinkList La,LinkList Lb,LinkList &Lc);//合并函数
print(LinkList L);//输出函数
这四个函数
2.定义三个指针la,lb,lc;
初始化 init(la);init(lb);init(lc);这三个链表。
用 read()函数读入数据
用merge()函数合并
输出合并的链表。
3.核心函数 void merge(LinkList La,LinkList Lb,LinkList &Lc)
定义三个指针 pa,pb,pc;
用pa指向La->next;pb指向Lb->next;
Lc指向pc,Lc指向La;
while(pa&&pb){//判断pa和pb是不是空
if(pa->data<=pb->data){//比较pa和pb的大小;
pc->next=pa;
pc=pa;
pa=pa->next;
}
else{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;//看pa和pb那个的为空,把不为空的复制到链表Lc。
2.代码截图
3.PTA提交列表说明。
解决方法:1.开始是没有理解链表的头插法,写出的代码是错误的,经过查找资料,问同学,了解头插法。才把代码改对。
题目1:6-2 jmu-ds-单链表逆置(25 分)
1. 设计思路:
void CreateList(List &L,int n)
{
定义指针 *r,*s;
int i,a;
分配内存L=new node;
r指向L;
for(i=0;i<n;i++)用尾插法来建立链表
{
scanf("%d",&a);
s=new node;
s->data=a;
r->next=s;
r=s;
}
r->next=NULL;
}
void ReverseList(List &L)
{
定义指针 *pre,*cur;
pre 指向 L->next;
L->next=NULL;
while(pre!=NULL)使用尾插法倒置链表
{
cur=pre;
pre=pre->next;
cur->next=L->next;
L->next=cur;
}
}
void PrintList(List L)
{
ListNode *p=L->next;
if(p!=NULL)
{
printf("%d",p->data);//为了满足输出格式,
p=p->next;
while(p!=NULL)
{
printf(" %d",p->data);
p=p->next;
}
}
else
printf("NULL");
}
2.代码截图
3.PTA提交列表说明。
解决方法:开始是越界,导致段错误,然后用尾插法来实现,但当表为空时,就不知道怎么弄,最后用头插法,就解决了。
二、截图本周题目集的PTA最后排名
1.顺序表PTA排名
2.链表PTA排名
3.我的总分:193
三、本周学习总结
1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?
.1)编程时间:有时间就进行编码学习,尽量每天都能有所发现。但收获有点少 。
2)学习时间:周一至周五有提前预习和复习,但是还有好多不懂。
3)遇到不懂问题大部分向班级同学求救和百度搜查。但还是感觉太难了。
2.谈谈你对线性表的认识?
线性表中元素的存储不一定是连续的,还可以占用任意的、不连续的物理存储区域。与顺序表相比,链表的插入、删除不需要移动元素,给算法的效率带来较大的提高。线性表这张讲链表的节点结构、静态与动态链表的概念、链表的基本运算(如求表长、插入、查找、删除等)、单链表的建立(头插法和尾插法)以及双向循环链表的定义、结构、功能和基本算法。难度有点大。