zoukankan      html  css  js  c++  java
  • 第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提交记录截图

  • 相关阅读:
    与众不同 windows phone (50)
    与众不同 windows phone (49)
    重新想象 Windows 8.1 Store Apps (93)
    重新想象 Windows 8.1 Store Apps 系列文章索引
    重新想象 Windows 8.1 Store Apps (92)
    重新想象 Windows 8.1 Store Apps (91)
    重新想象 Windows 8.1 Store Apps (90)
    重新想象 Windows 8.1 Store Apps (89)
    重新想象 Windows 8.1 Store Apps (88)
    重新想象 Windows 8.1 Store Apps (87)
  • 原文地址:https://www.cnblogs.com/3nodisnoable/p/8637756.html
Copyright © 2011-2022 走看看