第02次作业-线性表

Posted 兰景晖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第02次作业-线性表相关的知识,希望对你有一定的参考价值。

一、PTA实验作业

题目1:顺序表 7-1 最长连续递增子序列

1. 设计思路

定义结构体List,定义数组Data[maxsize]表示顺序表元素,变量Position表示位置,变量Length表示顺序表子列长度,变量Maxposition表示最长的递增子序列最后一个元素的位置,变量 L->Maxlength表示最长的递增子序列长度。
定义结构体L,变量n表示顺序表长度,变量j表示数组下标
for i=0 to n-1
    Data[i]存储顺序表元素
end for
for i=0 to n-1(i+=此段子列长度)
    判断后一个元素是否比前一个元素小,若是,则开始新一段子列的长度计算与位置记录
    比较此段子列长度与之前子列长度最大值
end for
输出最长的递增子序列

2.代码截图


3.PTA提交列表说明


编译错误: 在C编译器中调用C++头文件
解决方法:将编译器改成C++编译器

题目2:链表 6-5判断链表结点对称

1. 设计思路

初始化带头结点空双向循环链表: 给头节点分配存储空间并将指针域设为空
销毁链表: 定义两个结构体指针p和r分别指向两个相邻结点,通过循环顺序删除结点
正向顺序输出链表:  定义结构体指针p,指针循环后移,依次输出结点元素
在第i个位置插入结点: 链表为空跳出函数,否则,定义两个结构体指针p和r,通过循环使指针p指向待插入位置的前一个结点,然后进行插入操作
判断链表是否对称: 若链表为空,跳出循环;若链表不为空,定义两个结构体指针p和r,p指向第一个存储元素的结点,r通过循环指向尾结点,两指针循环向中间移动,判断对称位置元素是否相等

2.代码截图


3.PTA提交列表说明


答案错误:偶数对称测试点运行结果为段错误
解决方法:将

while(p!=r){
		if(p->data!=r->data) return 0;
		p=p->next;
		r=r->prior;
	} 

改为

while(p!=r&&r->next!=p){
		if(p->data!=r->data) return 0;
		p=p->next;
		r=r->prior;
	} 

题目3:6-2 单链表逆置

1. 设计思路

若链表为空或只有一个元素,不对链表进行逆置操作
若链表有多个元素,定义两个结构体指针p和q,循环将首元素结点后的结点通过头插法插到头结点之后,使元素结点逆置

2.代码截图


3.PTA提交列表说明

此题经测试修改才交到PTA上,过程中题例输入,答案错误,重复输出首元素,原因是输出首元素后未将指针后移就输出数据
解决方法:将

cout<<p->data;
	p=p->next;
	while(p){
  	cout<<" "<<p->data;
  }

改为

cout<<p->data;
	p=p->next;
	while(p){
  	cout<<" "<<p->data;
    p=p->next;
  }

二、截图本周题目集的PTA最后排名

1.顺序表PTA排名

2.链表PTA排名

3.我的总分:1.5分

三、本周学习总结

1.学习时间安排:分散在做题时间里

编程时间安排:大部分课余时间
交流方式:在网上查找,和同学讨论
对自己的安排不满意,做题效率低下
打算做出的改变:先看完课本内容再去做题,规范做题格式,熟悉思路与方法

2.对线性表的认识:

线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,除了第一个和最后一个数据元素之外,其它数据元素都有前驱和后继。

顺序表:
优点: 用一组地址连续的存储单元依次存储数据元素,可以直接找到某一位置上的元素。
在已知数据元素个数的情况下,每个元素的存储密度大,为1。
缺点:插入和删除的时候要将插入点后 的所有元素依次后移或前移。
在未知数据元素个数的情况下,开辟空间过大会造成较大的空间浪费。

链表:
优点:在未知数据元素个数的情况下,虽然有非数据项的指针占空间,但比起顺序空间浪费
会比较少。
插入和删除的时候只需改变几个几个结点的指针域,不需移动结点位置,耗时短。
缺点:每个结点开辟的位置都是随机的,会产生很多小的碎片空间。

3.代码Git提交记录截图

以上是关于第02次作业-线性表的主要内容,如果未能解决你的问题,请参考以下文章

第02次作业-线性表

第02次作业-线性表

第02次作业-线性表

第02次作业-线性表

第02次作业-线性表

第02次作业-线性表