一、PTA实验作业(5分)

题目1:最长连续递增子列(顺序表)

设计思路

  定义整型变量 i,j,最长连续递增子列开始的起始位置M,最长连续递增子列的长度max;
  List L; 
  输入链表长度;
  for  i=0  to  length    //链表初始化 
    输入L->data[i];  
  L->length=n;  //链表长度为n
  for  i=0  to  length
    L->num[i]等于1;  //存放该数所对应的最长连续递增子列的长度,先默认为1
    //寻找最长最长递增子列 //
  for  i=0  to  length
     for j=0  to  length{
   	 如果 data[j]小于data[j+1])  num[i]++; //记录每个元素的最长递增子列中元素个数 
   	 没有递增下去即结束;
   	}
   for  i=0  to  length{   //寻找递增子列数最大的子列 
   	如果num[i]大于max  max等于num[i],M等于i;
   }
   for i=M to   M+max-1  //输出最长子列 
  	 输出data[i] ;
   输出data[i];    //最后一个输出不带空格

代码截图

PTA提交列表说明


  • 编译错误:一开始的思路是弄了三个数组,一个数组储存数据,一个数组记录下每个数的最长连续递增子列,当这个数组的长度大于之前所有数组的长度,则用第三个数组把它保留下来,,,但是事实证明这个思路非常不可取,代码非常冗长而且凌乱。
  • 然后我就重新构思:用另一个结构体变量来存放该数所对应的最长连续递增子列的长度,然后比较这个变量即可找到目标子列的开头和长度,最后输出相对应的数据即可。

题目2:链表倒数第m个数(单链表)

设计思路

寻找倒数第m个数的值函数      //L:单链表  m:倒数第m个位置
	定义整型变量i,链表总元素个数,;
	LinkList p=L;
	while p不是空链表{
	    n加一;
	    p指向下一个节点;     //统计链表元素总个数	
        }
        if m>=n 或 m<0   返回-1;
	num=n-m+1;   //倒数第m个数应为正数第num个数
	p重新指向头结点;
	if  num大于零且小于n{
	    for  i=1  to  i<num    //寻找第num个数
	  	p指向下一个节点;
          m=p->data;  //目标位置所存储的数据
	  return m;
	}
	else 
	  返回-1;   

代码截图


PTA提交列表说明

  • 多种错误:一开始的思路没有乱,没有考虑到num的位置应该怎么找,,,
  • 部分正确:位置无效—没有考虑的m不在合理的范围之内的情况,对m和n的取值范围进行判断,不合理时返回-1即可。

题目3:两个有序序列的中位数(有序表)

设计思路

主函数
    定义整型变量 n;
    List La,Lb,Lc;
    输入n;
    创建链表La;  
    创建链表Lb;
    归并La和Lb到Lc;    //归并有序表
    输出Lc中data[n-1];  //直接输出归并后的有序表的中位数
void CreateList(List &L,int n)   //创建长度为n的有序表

void Union(List &LA,List &LB,List &LC)  //归并两个有序表
{
	定义整型变量 i=0,j=0,k=0;
	申请空间;
	while  i<LA->length且j<LB->length {
		如果 LA->data[i]小于LB->data[j]{
			LC->data[k]等于LA->data[i];
			i++;k++; //把比较小的数放入LC
		}
		否则{
			LC->data[k]等于LB->data[j];
			j++;k++; 			
		}
	}
        while  LA中的数没有放完{
	    LC->data[k]等于LA->data[i];
	    i++;k++;//直到LA全部放完    	
	}
	while LA中的数没有放完 {
            LC->data[k]等于LB->data[j];
	    j++;k++; //直到LA全部放完		
	}
    修改LC的长度为n; 	
}

代码截图


PTA提交列表说明

  • 在编译器里调试成功了才提交PTA的,最开始的思路是写三个函数,一个创建,一个归并且排序,最后一个找中位数,,,
  • 其实只要直接输出归并后的第n个位置的数即可。
  • 归并函数中需要注意的是重复的数据应一同归并,不能删除~

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

1.顺序表PTA排名

2.链表PTA排名

3.我的总分:204

三、本周学习总结

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

学习安排:上课前稍微预习,中午或者晚上有空就写写PTA的题目,看看书复习上课内容。
不满意:做题速度太慢,即使花很多时间也没有什么成效,这样很挫败,反而会写不下作业;也许我不应该一直想要完成作业,可能多看点书复习知识会好一些吧。

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

  • 我的认识:对数据处理更方便的操作。
  • 线性表是具有相同特性的数据元素的一个有限序列,它有顺序存储结构和链式存储结构,链式存储结构会比顺序存储结构要方便—比如区间元素的删除:链表只需改变指针的指向,再删除结点即可,而顺序表需要移动删除或增加的元素后面的所有元素,时间复杂度更大。

3.代码Git提交记录截图

过程:





四、代码互评

林岑的代码



我的代码



  • 不同之处:林岑用的是单链表,我用的是有序表,链表的申请空间比较自由,有序表的大规模输入的测试必须要把maxsize设的非常大。
  • 总体的比较过程还是比较相似的。
posted on 2018-03-25 22:38  EVOLYM  阅读(167)  评论(0编辑  收藏  举报