曾文惠

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、PTA实验作业(5分)

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

给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。

2. 设计思路(伪代码)

#define MAXSIZE 100000 
typedef struct{
    ElementType Data[MAXSIZE];
    Position Last; // 保存线性表中最后一个元素的位置 
}list;

定义结构体变量 L;
定义整型变量 正整数的长度n 循环变量i 储存变化的地址k=1 递增的长度o=0 储存新一轮进行递增的地址p 

Input n
for i=0 to i=n 共n次 
    Input L.data[i];
	if i!=0 and L.data递增     k++;
	  
	if k 大于 o
	
	   o 等于 k,记录递增的长度 
	   p 等于 i-k+1
	   
	end if
	
	if i!=0 and L.data递减    重置k=1; 
	
end for

for i=p to i=p+o-1 
   Output L.data[i] ;
end for

3.代码截图

4.PTA提交列表说明

提交错误说明一:从16分到10分:

  • A:10分:

  • B:16分:

因为这道题是比较早做的,所以已经忘记了当时是怎么改的,所以就从提交记录里将两个代码对比了一下,发现两者的区别在于循环条件
A的循环条件是从0开始的,但是我在循环前就令last=L->Data[0],所以接下来的next=L->Data[i]其实并没有起到判断其是否递增的功能,应当要从1开始

提交错误说明二:从16分到20分

因为到最后实在改不出来了,所以换了个思路写, 通过记录顺序表的最大递增长度以及每次开始递增的位置进行实现

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

2. 设计思路

 参数为新建的L 
 if  L等于NULL or L->next等于 NULL 
    return ;
 end if
 定义指针 pPre=L;储存先前指针
 定义指针 pCur=pPre->next ;储存当前指针
 定义指针 pNext=NULL 为后继指针
 while(pCur!=NULL)
      
        pNext=pCur->next;  
        pCur->next=pPre;  
        pPre=pCur;  
        pCur=pNext;
 end
 L->next=NULL;
 L=pPre; 

3.代码截图(主函数以及创建的函数和题目3一样)

逆序函数

4.PTA提交列表说明

一、格式错误:题目要求最后一个数据不跟空格

二、链表空:题目要求输出NULL

1.题目3:7-3 两个有序序列的中位数(25 分)

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

1.主函数就是调用函数
2.新建就是课本尾插法
3.合并

4.找中位数

定义 指针TL
TL=L
定义整型变量s=0
if NULL!=L or NULL!=L->next
   while TL->next !=NULL
       s++; 
	   TL=TL->next
   end
   if s!=1 
      s=s/2;
   end if
   while s--!=0 L=L->next
   Ouput L->data

3.代码截图

1 主函数

2 新建(尾插法)

3 合并


4 找中位数

4.PTA提交列表说明

一、编译错误:提交的时候忘记把C改成C++了

二、从12分(部分正确)到25分

  • 错误一:审题有误,以为是求并集,所以把重复的元素删除了------测试点最大N通过
  • 错误二:最小N
    改正:
    原因:L是链表的表头,缩小了循环范围导致输出的是表头的内容,但表头无内容

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

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

曾文惠 201721123002

1.顺序表PTA排名

2.链表PTA排名

3.我的总分:184

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

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

本周的代码是从周三开始做的一直到作业提交的前一秒
我看了一下自己的提交记录,有在晚自习前的,也有在半夜(这天好像是立志要完成几道题,但是最后好像没有实现.....),提交记录也是满满的辛酸,但是总的来说,这周也依然是十分努力,代码都是自己打的。
对自己的安排满意吗?我觉得还是满意的吧,基本有时间都是在打代码,就是效率有点低,然后就是一直把握不了问同学的时间段,太早问了感觉自己的查错能力没有得到提升,坚持自己调又是一天一题的效率,目前是将自己遇到的错误都放到了word里,希望积少成多,可以慢慢积累经验,提高自己的差错能力。

然后我还发现了一个问题还是老毛病:在写博客的时候发现回忆之前写的代码有点艰难..我个人是记性比较不好的,上学期的上机考也是经常得0分的,但是目前写代码都十分困难,在想还有什么时间段可以用来复习....

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

  • 我的主观认识:线性表是最基本、最简单、也是最常用的一种数据结构,它是n个具有相同特性的数据元素的有限序列,在稍复杂的线性表中,一个数据元素可由多个数据项组成,线性表这个名字与它的功能也十分贴切,就像是一个表,主要由顺序表示或链式表示,各个元素之间又有一定的线性联系,使得一个个的元素连成了一个表。

  • 各章节总结:

线性表通过顺序表和链表实现其基本运算

1.顺序表-------线性表的顺序存储结构
《1》抽象数据类型
《2》时间复杂度
2.链表----------线性表的链式储存结构
《1》单链表
《2》双链表
《3》循环链表

3.代码Git提交记录截图(...)

error

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

因为如上流程图 ,我的合并函数十分的长,所以找了吴军霖同学的代码学习借鉴

void ListMerge( List &A , List B ){
	
	List p = A->next;
	List q = B->next;
	List s = A;//以A为表头?
	
	while( p||q ){
		List keep;
		if( !q || p && p->data<=q->data  ){
			keep = p->next;
			s->next = p;
			s = p ;
			p = keep;
		}
		else{
			keep = q->next;
			s->next = q;
			s = q ;
			q = keep;
		}
	}
	s->next = NULL;
	
}

posted on 2018-03-25 21:57  曾文惠  阅读(1023)  评论(1编辑  收藏  举报