1.本周学习总结


1.1思维导图


1.2.谈谈你对线性表的认识及学习体会。

  • 线性表主要分为顺序存储结构链式存储结构两种。其中顺序存储结构主要运用的是我们比较熟悉的数组的写法,而链式存储结构则运用的是后来学的链表。在建表前,二者都需要对结构体先做定义。随着学习的深入,调试的难度较之前也会大一些,没办法第一时间找到问题所在。经过pta的练习,能够对一些常出现的问题进行总结:如指针域未置空申请空间失败,甚至是结构体名称上出现问题(这个问题比较弱智,一般都是手滑按错了)。本周的学习,pta上的题目是基于课本的分模块训练,对于插入删除查找进行了一定的函数训练,故而做到后面的编程题时,其实主要就是将前面的函数灵活结合运用。一开始写pta还是脱离不了课本,但是后期该现象出现好转,练熟分块的函数,在编写完整的程序时也会更得心应手一些。最大的体会是,对于程序当中每一句语句的意思都要自己捋清楚,强行硬套就像背题,脱离模板就会出错。

2.PTA实验作业

2.1.题目1:6-4 顺序表操作集

2.1.1设计思路(伪代码)

    List MakeEmpty()
    {
    	    定义 L;
	    动态申请内存;
	    置空返回; 
    }
    bool Insert(List L, ElementType X, Position P)
    {
	    定义 i;				
	    if   表满||位置不合法
		    cout<< "FULL"||"ILLEGAL POSITION" ;
		    return false;
	    end if
	    for L->Last + 1 to P						//倒序后移
		    L->Data[i] = L->Data[i-1];
	    end for;
	    L->Data[i] = X;						 		//插入 
	    L->Last++;		
    }
    Position Find(List L, ElementType X)
    {
    	    定义i;
	    for i=0 to L->Last
		    找到直接返回位置
	    end for  
    }
    bool Delete(List L, Position P)
    {
	    判断位置是否合法
	    定义 i;
	    for i=P to L->Last
    } 

2.1.2代码截图


2.1.3本题PTA提交列表说明。

1.编译错误

  • 不小心丢进去了c++的语法,然后发现只能用c来着

2.返回空表

  • 置为空表时应该使L->last=-1

3.插入数据时,答案错误

  • 要掌握好临界值,确定初始化的L->last值,更改相应的变量(因为一开始写的时候,是令L->last=0,后面改的时候就有漏改的情况)

4.答案错误

  • 题目设置要求,在判断条件的顺序上面,经过几次调试,输出的答案会不太一样,按照题目要求调整就可以啦

2.2 题目2 6-8 jmu-ds-链表倒数第m个数(单链表)

2.2.1设计思路(伪代码)

way1

	int Find(LinkList L, int m)
	{
		定义 nodeNum;						//节点数
		定义 p;
		p = L;								//p来动
		while p = p->next != NULL
			计数
		end while;
		if 位置!合法 return -1; end if
		for i = 0 to nodeNum - m + 1		//L动
			L移动
		end for
		return data;
	}

way2

    	int Find(LinkList L, int m)
	{
		定义 i=1;
		定义 p=L;
		while p = p->next !NULL			//链没结束
			跳过 m - 1 次;
			then L 移动;
			i++;						//计数
		end while;
		if m 不合法 return -1;
		返回 data	
	}

2.2.2代码截图

way 1

way 2

2.2.3本题PTA提交列表说明。

  1. 位置无效 段错误,答案错误
  • 要增加一条位置判断语句
            if (m<1 || m>nodeNum)return -1;				//非法返回

2.3 题目3 7-2 一元多项式的乘法与加法运算

2.3.1设计思路(伪代码)

  • 主要介绍俩函数

1.PlusResult

        LinkList PlusResult(LinkList L1, LinkList L2)
		定义 p1=L1->next, p2=L2->next, p3, temp, LPLus;
		动态分配 LPlus并置空
		p3 = LPlus;									//保留头节点
		if !p1 相加为 p2; end if
			反之 为p1;
		while p1 &&p2
			compare with indexes
			if != 将较大的存入p3并后移
			else factor相加后存入
			end if
		end while
		剩余链接上;

2.MultResult

        void MultResult(LinkList L1, LinkList L2, LinkList &LMult)
		定义 p1=L->next, p2=L->next, p, temp;
		while p1
			新生成head并置空					//p2的函数是为了生成一个新的链表,然后用于加法函数,所以这个head每次都要新生成一下 
			p = head;
			while p2
				新生成temp并置空
				factor 相乘 index相加
				存入后移;
			end while
			p->next=NULL
			LMult = PlusResult(head, LMult);	//调用加法函数
			初始化结点
	        end while

2.3.2代码截图

1.调用加法函数





2.3.3本题PTA提交列表说明

  • Q:一开始写加法函数,用了三个参数,在乘法当中调用函数则用了一个鬼畜的写法,大概是这样:PlusResult(L1,LMult,LMult);,程序出错,乘法无法运行。
  • A:是一种比较鬼畜的尝试,经过这个之后中规中矩改写了PlusResult函数,把函数类型改成LinkList,就能使函数上下通用了😁
  • Q: 出现很奇怪的数字(一开始只写加法函数的时候)
  • A:整半天发现是index写成了factor(尴了个尬),输出就出错了
  • Q:还很经常出现这种情况(叹气不大会用vs来着)
  • A:百度了一下解决方案,其实基本上就是写的时候不小心或者没考虑全,方案如下:0xCDCDCDCD错误解决方法是结构体要初始化。链表的末尾一定要保持指向NULL才能用tmp->next==NULL来判断结尾,0xcdcdcdcd是一个未知值,新建的指针正好指向这个,但是不保证每次都是这个。所以,重点不是tmp的问题,而是tmp1->next=NULL。此时保证新建的尾节点只向NULL。
  • Q:加法函数的做法会导致乘法结果的同类项不能合并:

  • A:改用边算边插入的写法(调不出来来着qaq🤦‍

3.1 题目

题目

L1-6 幸运彩票
彩票的号码有 6 位数字,若一张彩票的前 3 位上的数之和等于后 3 位上的数之和,则称这张彩票是幸运的。本题就请你判断给定的彩票是不是幸运的。

输入格式:
输入在第一行中给出一个正整数 N(≤ 100)。随后 N 行,每行给出一张彩票的 6 位数字。

输出格式:
对每张彩票,如果它是幸运的,就在一行中输出 You are lucky!;否则输出 Wish you good luck.。

3.2 解题思路

两种算法

  • 1.比较容易想到的暴力方法(利用%和/,化为数字和),加减求和直接判断写法(这种做法很直接,但是略微有些笨
  • 2.利用字符串,将输入的数字以字符串的形式存取,通过ASCII码值和的比较来判断结果。

3.3 代码截图

3.4 学习体会

  • 选取了天梯赛上的一道题目,是相对比较容易的一道题目。其实本来选取的是leecode上的一题很神奇地将时间复杂度从n3降到了n,不过是java的代码(看不太懂来着,本来以为只是看起来比较复杂,实际上真的很复杂qaq,代码如下。问了学姐,用到了hash树的原理,因为哈希树存的是键值对(看到这个程度我大概觉得自己应该是不能消化这一块的内容了。不过这里用的一个思想也是将字符转化为对应的ASCII码然后用hash等方法简便运算,所以就退而求其次找了天梯赛上的题目(代码不难,主要是想让自己记住字符转数字的判断方法

  • 第三块内容在寻找优秀代码的过程当中,还是比较纠结的。leecode上面有带题解的优秀代码很多都是java或者python写的,当然评论区也会有网友们的一些写法也值得参考。在寻找过程当中,也尝试去找vector等stl容器的源码(寻思着掌握了比较好理解来着)但是太长了就有点自闭(寻思着下一次争取看一些源码叭,本学期打算先从一些比较简便的算法学起,再掌握源码,语法等。
posted on 2019-03-30 20:59  Salcious  阅读(1104)  评论(1编辑  收藏  举报