博客作业2---线性表

一、PTA实验作业

1.题目1:最长连续递增子序列

2. 设计思路(伪代码或流程图)

void FindLongest(List &L)//找最长的连续递增子序列 
{
	int i,j,m;
	定义longest为最长序列,数组length[100000]存放各序列长度 
	遍历线性表
		各递增序列长度初定为1 

	for i=0 to L->length-1
		for j=i+1 to L->length
			if  元素的值为递增 
				首元素位置为i的递增序列长度递增 
			else 退出循环;
		end;
	end;    
	
	for i=0 to L->length  
		找出最长连续递增子序列及其首元素的位置 i 
	end;
	if 线性表为空表 return; 
	if 最长连续递增子序列=1
		输出第一个元素 
		return ;
	
	输出最长连续递增子序列 
}

3.代码截图

4.PTA提交列表说明。

  • 第一次提交编译错误 , 编译器改成c++后解决。

  • 第二次提交段错误

  • 第三次提交答案错误

  • 第四次提交答案正确

1.题目2:链表倒数第m个数

2. 设计思路(伪代码或流程图)

int Find(LinkList L, int m ){       //找链表倒数第m个数
	定义 i=0,j,k=0;K表示链表长度 
	LinkList h,p;
	h=p=L->next;
	遍历链表,计算链表长度k 
	倒数m转为正数j 
	位置无效时 return -1; 
	遍历h
		找到第j个元素 跳出循环 
	返回 h->data;
} 

3.代码截图

4.PTA提交列表说明。

  • 第一次提交部分正确

  • 第二次提交部分正确

  • 第三、四次提交答案错误,在判断m位置无效的地方修改了两次,发现没有解决答案错误的问题。

  • 第五次提交答案正确 ,找了好久发现h=p=L错误,本题是带有表头节点的单链表,应该是h=p=L->next

1.题目3:两个有序链表序列的合并

2. 设计思路(伪代码或流程图)

void Union(LinkList *ha,LinkList *hb,LinkList *&hc){ //求两有序集合ha、hb的并集hc。
	LinkList *pa=ha->next,*pb=hb->next,*r,*s;
	hc=new LinkList;
	r=hc;
	遍历ha、hb 
		if (pa->data<pb->data) {      //ha<hb
			申请空间
			保留pa里面的数据
			连接到链表中 
			pa向后移 	
		}
		else if(pa->data>pb->data){  //ha>hb
			申请空间
			保留pb里面的数据
			连接到链表中 
			pb向后移 
		}
		else{                     //ha=hb
			申请空间
			保留pa、pb里面的数据
			连接到链表中 
			pa、pb向后移 
		}
	end 
	
	while(pa){            //pb扫描完 
		申请空间将pa中剩余的节点连接到链表后面 
	}
	while(pb){           //pa扫描完 
		申请空间将pb中剩余的节点连接到链表后面 
	}
	r->next=NULL;
}

3.代码截图


4.PTA提交列表说明。

  • 第一次提交编译错误 , 编译器改成c++后解决。

  • 第二次提交多种错误

  • 第三次提交部分正确


  • 第N次提交部分正确 ,大规模输入出现段错误,于是输入不用数组改用链表。

  • 第N+1次提交答案正确

二、截图本周题目集的PTA最后排名(3分)

本次2个题目集总分:295分

1.顺序表PTA排名

2.链表PTA排名

3.我的总分:221(2分)

三、本周学习总结(2分)

1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?(1分)

  • 学习时间安排:先看完教学视频,再过一遍课本,讲课后做题时再边做题边看书,巩固代码。
  • 编程时间安排:一般是晚上的时间和没课的时间来写代码,找一大块的时间写代码比较有效率,晚上的思路比较清晰做起来比较顺!?
  • 不懂问题是哪种方式交流:遇到困难主要是私下找舍友或同学交流。

2.谈谈你对线性表的认识?(1分)

2.1.顺序表:

  • 特点:使用一组地址连续的存储单元依次存储表中的数据元素,常见的就是使用数组去实现。顺序表中的任意数据元素都可随机访问,是一种支持随机访问,长度自动动态调整的线性表结构。
  • 优点:访问表中的元素很快,时间复杂度为O(1)
  • 缺点:插入,删除元素需要移动大量的元素,时间复杂度为O(n) 。
    因此如果我们在编程中需要这样一种线性表数据结构:构造后对元素的访问操作很频繁,而很少进行增,删等元素位置的调整操作,那么就可以考虑使用顺序表

2.2.单链表

  • 特点: 用一组地址任意的存储单元存储数据元素。存储单元地址可连续,也可不连续。为了形成逻辑线性结构,每一个结点 除了保存需要存储的数据外,还需要保存逻辑上相邻的下一个结点的地址。链表不支持随机访问。有n个结点的线性表,访问某个结点的平均时间复杂度为O(n/2),最坏为O(n) 。而数组支持随机访问,他的访问时间复杂度为O(1)
  • 优点:插入和删除操作无需移动元素,只需修改结点的指针域。这点恰巧是顺序表的缺点。
  • 缺点:访问元素时,不支持随机访问。访问第n个数据元素,必须先得到第n-1个元素的地址,因此访问任何一个结点必须从头结点开始向后迭代寻找,直到找到这个目标结点为止。

3.代码Git提交记录截图

四、阅读代码(选做,加1分)

找1篇优秀代码贴图展示,并说明该代码功能是什么,优点是什么?
代码可以是自己同学代码,也可以是其他地方找的代码。

原文地址:https://www.cnblogs.com/smtwula/p/8634362.html