第02次作业-线性表

Posted 郭胤鑫

tags:

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

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

2. 设计思路

void max(List &L)
{
	定义变量i用来遍历顺序表。 
	定义变量count表示递增的数量。
	定义变量wei保存递增结束时单调递增元素的个数。
	定义变量sum来表示最长递增开始的那个元素。
	 for(i=0;i<L->length;i++)
	 {
	 	if data[i]<data[i+1] 
	 	count++;
		else  data[i]>=data[i+1] &&count>wei-1
		更换sum,wei的值
		else
		归零count
		end if
		}
		end for
		for(i=0;i<wei-1;i++)
		{
		依次输出data[sum],每次输出后sum++
		}
		end for 
	 
} 

  

3.代码截图

4.PTA提交列表说明

先后遇到了输出后面的递增序列而不是前面的递增序列,递增序列输出不完整,顺序表不够大等问题。

在修改了通过wei和sum来确定开始和结束元素的算法后,解决了问题。

1.题目2:jmu-ds-单链表逆置

2. 设计思路

void CreateList(List &L,int n)
{
	定义变量m作为输入
	定义节点L,s 
	定义链表指针r,s,其中r指向新开辟的节点L 
	for(int i=0;i!=n;i++)
	{
		输入m,将m赋给s->data
		s->指向NULL,r->next=s,使两个节点相连
		r=s,继续循环 
	 }
	 end for 
}

}
void PrintList(List L)
{
	if L->为NULL
	输出“NULL” 
	while(p!=NULL)
	{
		定义链表指针 *p=L->next
		定义变量i判断是不是第一次输出
		if i==0,第一次输出
		输出p->data的值,p指向next,i++
		else
		输出空格p->data的值,p指向next 
		end if 
	}
	输出换行符 
} 

void ReverseList(List &L)
{
	定义链表指针p,q
	p指向节点L的next
	L->next为NULL
	while(p!=NULL)
	{
		q=p指向next
		p指向next=L指向next
		L指向next=p
		p=q
		此循环实际上是先断开L,接入第一个p
		再以第一个p为头,进行头插法 
	}
}

3.代码截图

4.PTA提交列表说明

在设计算法时,因为对链表操作不熟悉,翻阅了很久课本,期间遇到了不是用头插法而是尾插法,导致逆序后还是一样的问题。

1.题目3:两个有序序列的中位数

2. 设计思路

void sort(LinkList *&L) 排序函数 
{
	定义链表指针p指向L->next,q
	if p为NULL
	结束函数
	while p不为空
	{
		while q不为空
		{		
			if p->data>q->data
			{
				定义中间变量t 
				交换 p->data和q->data的值
				即选择排序法 
			} 
		} 
		p指向next,继续循环 
	}
} 
int Union(LinkList *ha,LinkList *hb,LinkList *&hc) 并集函数
{
	定义数组a保存,定义变量i遍历链表,定义变量count计数,判断是否读入数据 
	定义链表指针 *p=ha->next,*q=hb->next
	while p不为空
	{
		定义变量j遍历链表
		for i=0 to j==i
		{
			count为0
			if a[j]==p->data
			count++ 
		} 
		if count!=0
		有重合,不能并入数组a 
		else
		a[i]=p->data,同时i++
		p指向next,继续循环 
	} 
	while q
	{
		操作与while p基本一致,原理相同 
	} 
	调用 CreateListR(hc,a,i)(非此题难点,故不表)函数由数组a创建新的链表
	调用 sort(hc)为新的链表排序
	返回新的链表的表头 
} 

void find(LinkList *&L,int n)寻找中位数
{
	定义链表指针*p=L->next,定义变量i遍历链表 
	for i=0 to i!=(n-1)/2
	{
		p指向next 
	}
	输出p指向data的值
	结束 
}

  

3.代码截图

4.PTA提交列表说明

大规模输入过于可怕了

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

 

 

我的得分:2.5

 

三、本周学习总结

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

本周每天都有花一个小时以上在数据结构上,在没有其他课业的时候,我花了很长的时间学习数据结构和C++。我相信这是一个量变引起质变的过程,如链表,我从上学期末初见链表的不理解,到现在可以较为熟练地使用链表,是熟能生巧的结果。

 

2.谈谈你对线性表的认识?

线性表是一种逻辑储存结构,它专注于点对点的链接,整个结构清晰可见,接下来将要学习的栈也是线性表的一种,可见它是十分重要的。目前为止,我学习了它的两种储存结构,即顺序表和链表,顺序表可以在O(1)的时间复杂度上寻找到相应的元素,但整体使用不方便,需要插入、删除时,必须要整块整块地移动顺序表。

而链表的时间复杂度虽然略高于顺序表,但每个元素并非顺序储存,而是通过指针形成链式结构,可以简单地插入拼接。

 

3.代码Git提交记录截图

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

第02次作业-线性表

第02次作业-线性表

第02次作业-线性表

第02次作业-线性表

第02次作业-线性表

第02次作业-线性表