zoukankan      html  css  js  c++  java
  • 博客作业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篇优秀代码贴图展示,并说明该代码功能是什么,优点是什么?
    代码可以是自己同学代码,也可以是其他地方找的代码。

  • 相关阅读:
    Python 面向对象编程
    snmp获取交换机端口和对应ip
    python IPy
    Django F()与Q()函数
    装饰器使用
    log日志信息查看
    shell简单入门
    gunicorn开启、关闭和重启
    CF1453B
    ACWing845 八数码(BFS,全排列hash)
  • 原文地址:https://www.cnblogs.com/smtwula/p/8634362.html
Copyright © 2011-2022 走看看