线性表
一、PTA实验作业
1.题目1:6-2 线性表元素的区间删除
2. 设计思路
1、定义结构体S
2、为S申请内存
3、定义i,j=0,count=0
4、for i=0 to L->last
5、 if(L->Data[i]>minD && L->Data[i]<maxD)
6、 count++
7、 end if
8、 else
9、 S->Data[j++]=L->Data[i]
10、 end else
11、end for
12、S->Last=L->Last-count;
13、 return S;
3.代码截图
4.PTA提交列表说明
1、一开始我用的方法是找到区间内的数的同时移动数组,但这样在数据大的时候会运行超时
2、后来换了现在的方法,但是写的时候忘了给S申请内存,还有忘了count初始值要赋值为0
1.题目2:6-3 jmu-ds-链表倒数第m个数
2. 设计思路
1、定义结构体s,r;整数num
2、r=L;s=L;
3、for(int i=1 to m
4、 r=r->next
5、end for
6、if(r==NULL) return -1
7、else
8、while(r)
9、 r=r->next;
10、 s=s->next;
11、end while
12、if(s存在) num=s->data
13、返回num
3.代码截图
4.PTA提交列表说明
1、编译错误的原因我记不大清了,好像我一开始忘了让s,r指在L
2、后来我提交的时候答案部分正确,仔细看了题目后我发现我忘了判断r是否为空了
3、将r的判断加上后,我提交又错了,但还是部分正确,后来我发现s也要判断是否为空
1.题目3:7-1 两个有序链表序列的合并
2. 设计思路
一、创建函数
1、定义p,tem两个结构体,整数num
2、tem=L;
3、输入num
4、while(num大于0)
5、 p申请内存
6、 p的data等于num
7、 p->next=NULL
8、 tem->next=p
9、 tem=p
10、 输入num
11、end while
二、输出函数
1、定义结构体p
2、p=L->next
3、if(!p) 输出NULL
4、else 输出p->data
5、p=p->next
6、while(p)
7、 输出“空格 p->data”
8、 p=p->next
9、end while
10、end else
三、合并函数
1、定义结构体p1,p2,p3
2、p1=L1->next; p2=L2->next;
3、L3=p3=L1;
4、while(p1&&p2)
5、 if(p1->data小于等于p2->data)
6、 p3->next=p1; p3=p1; p1=p1->next;
7、 else
8、 p3->next=p2; p3=p2; p2=p2->next;
9、end while
10、p3->next=p1?p1:p2;
3.代码截图
4.PTA提交列表说明
1、我一开始在合并函数中将L1或L2剩下的接上L3的方法并不是那样的,而是判断L1或L2存在,然后一个一个节点的接,但是这样会导致编译错误,我也搞不懂为什么,去百度,发现有种写法是如上所示,十分简洁,我就采用了那种方法
二、截图本周题目集的PTA最后排名
1.顺序表PTA排名
2.链表PTA排名
3.我的总分:176
三、本周学习总结
1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?
- 1、我周一到周五课比较多,所以尽量拿出1-2小时学习数据结构,周末没安排就半个下午和半个晚上来敲代码
- 2、我对自己的安排不够满意,因为链表对我来说有一定难度,我这样的时间安排还是不够
- 3、我会尽量延长学习的时间来更好地弄懂链表及接下来的内容
2.谈谈你对线性表的认识?
- 线性表应该是较简单的数据结构(与接下来的内容相比,虽然链表我觉得也很难= =),线性表的基本操作应包括创建线性表,销毁线性表及插入,删除,求长度等等
- 线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的