• 第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提交记录截图

  • 相关阅读:
    批量计算(batch computing)、流式计算(stream computing)、交互计算(interactive computing)、图计算(graph computing)
    ETL相关 ELT
    添加AD验证(域身份验证)到现有网站
    android开发导包升级到androidx踩坑记录【转载】
    Android Support v4v7v13和AndroidX理解【转载】
    架构师的成长之路初片~linux-基本防护措施
    架构师的成长之路初片~nginx优化篇
    架构师的成长之路初片~linux-监控脚本
    架构师的成长之路初片~Virtual-自定义容器
    架构师的成长之路初片~Virtual-容器和镜像常用的管理命令
  • 原文地址:https://www.cnblogs.com/3nodisnoable/p/8637756.html
Copyright © 2020-2023  润新知