1.本周学习总结

1.1思维导图

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

对于线性表的操作过程,需要对指针操作这一块比较熟悉,因为算法中用到的指针非常多,包括顺序表和链表的建表,LinkList *L都是很多题目需要用到的结构,定义结构体等等操作还是需要多熟悉。同时,不同情况对于顺序表和链表的选择也是不一样的,顺序表的特点在于无需为表示结点间的逻辑关系而增加额外的存储空间,存储利用率提高,并且可以方便的存储表中的任一结点,存储速度快。而链表的特点在于可以方便的进行扩充并且可以方便的删除和插入。所以很多时候考虑一个算法的效率或者功能,也是在于对顺序表和链表的选择。对于线性表这一块,c++语法也很多的应用到,cin和cout,new等语句都大大简化代码长度,可读性也更强,所以线性表还是需要好好下功夫学习。

2.PTA实验作业

2.1题目1:

6-4 顺序表操作集 (20 分)
本题要求实现顺序表的操作集。
各个操作函数的定义为:
List MakeEmpty():创建并返回一个空的线性表;
Position Find( List L, ElementType X ):返回线性表中X的位置。若找不到则返回ERROR;
bool Insert( List L, ElementType X, Position P ):将X插入在位置P并返回true。若空间已满,则打印“FULL”并返回false;如果参数P指向非法位置,则打印“ILLEGAL POSITION”并返回false;
bool Delete( List L, Position P ):将位置P的元素删除并返回true。若参数P指向非法位置,则打印“POSITION P EMPTY”(其中P是参数值)并返回false。

2.1.1设计思路

List MakeEmpty()函数创建空线性表
a=new LNode
a->last=NULL尾节点为空,创建成功返回线性表
Position Find( List L, ElementType X )函数找出函数中特定元素
if(!L)先判断是否为空
for i=0 to L->last遍历链表
if(L->date[i]==X)判断是否是要找到的数
return i如果是要找的数,返回当前的节点
bool Insert( List L, ElementType X, Position P )函数插入节点
两个if语句判断是否为满和是否非法区域
for i=L->last to P从表尾遍历至需要的位置
L->Data[P]=X;++L->Last;让p节点为X,最大长度节点后移
bool Delete( List L, Position P )函数删除指定节点元素
if(P>=L->last||P<0)判断是否越界,最大长度节点前移
for i=P to L->last从P节点开始后面的元素前移

2.1.2代码截图


2.1.3本题PTA提交列表说明。


·Q1:这道题是我做完后面的题目之后再回来做的,所以函数的实现基本没什么问题,编译错误的原因是有几个判断条件,比如说删除和插入函数中的判断空没有加下去,而且把主函数都写进去了
·A1:后来对照着同学的代码修改了一下,加上了两个判断,并且细节处也做了优化,如++L->last和--L->last都是同学给的建议。

2.2 题目2

6-9 jmu-ds-有序链表合并 (20 分)

已知两个递增链表序列L1与L2,2个链表都是带头结点链表。设计函数实现L1,L2的合并,合并的链表仍然递增有序,头结点为L1的头结点。 合并后需要去除重复元素。
输入格式: 输入分两行,先输入数据项个数,再输入数据项,数字用空格间隔。
输出格式: 在一行中输出合并后新的递增链表,数字间用空格分开,结尾不能有多余空格;

2.1.1设计思路

LinkList pa=L1->next,pb=L2->next,r,s; 定义指针,r指针和s指针分别代表L1的操作指针和新链表的操作指针
while(pa!=NULL&&pb!=NULL)循环进行的条件,让指针的指向不会跑到非法区域
if的三个判断,两个链表的元素大小关系执行相应操作,目的是有序的整合到一个数组中去
接下来的两个while(pa,pb!=NULL)则是让新的链表继承原本两个链表的所有数据并且保持有序
r->next=NULL的作用是让r链表不溢出

2.1.2代码截图


2.1.3本题PTA提交列表说明。


·Q1:第一次没有加入当两个表的元素相同的时候的判断条件,导致了第一个测试点错误。
`A1:在判断两个表元素大小之后加入判断元素是否相同函数
·Q2:加入判断之后,测试点还是错误,发现判断相同函数不能在判断大小函数之后
·A2:把判断相同函数加入到判断相等函数之前
·Q3:指针的作用重叠,导致内存发生错误
·A3:重新定义指针,多了两个指向next的指针

2.3题目3:

6-10 jmu-ds-有序链表的插入删除 (15 分)

链表L是一个有序的带头结点链表,实现有序链表插入删除操作。实现函数为:
函数接口定义:
void ListInsert(LinkList &L,ElemType e);//有序链表插入元素e
void ListDelete(LinkList &L,ElemType e);//链表删除元素e

2.3.1设计思路(伪代码)

void ListInsert(LinkList &L,ElemType e)函数实现插入元素e
LinkList s,p定义指针指向L和新链表
动态分配内存之后开始while循环遍历链表
if(p->next==NULL)当p指向最后一个数,即插入元素位置为最后一个
if(p->data>e)插入点不为最后一个,找到插入点,之后的元素后移
void ListDelete(LinkList &L,ElemType e)函数实现删除指定元素
同样LinkList s,p定义指针指向L和新链表
while循环遍历链表,if(p->data==e)找到相应元素
开始删除操作

2.3.2代码截图


2.3.3本题PTA提交列表说明


·Q1:第一次出现错误是编译错误,加入了一个没有的变量n作为链表长度
·A1:删除n,重新安排循环
·Q2:第二次出现的错误直接是段错误,没有定义链表末尾,内存溢出
·A2:按找同学给的建议修改了一下,在删除函数中加入判断

3.阅读代码

3.1题目

约瑟夫环问题:一圈共有N个人,开始报数,报到M的人自杀,然后重新开始报数,问最后自杀的人是谁?
圆桌问题

3.2解题思路

模拟整个过程,复杂度为O(NM)。可以用数学方法来求解: 把问题重新描述一下:N个人(编号0~(N-1)),从0开始报数,报到(M-1)的自杀,剩下的人继续从0开始报数。求最后自杀者的编号。第一个自杀的人是(M-1)%N,例如上图中,41个人中,报到3的人自杀,则字一个自杀的人的编号是(3-1)%41=2。有人自杀后,下一个位置M又从零开始报数,问题变为(N-1)个人,报到为(M-1)的人自杀,问题规模减小了。定义F(N-1)为总数为N-1个人时,最后自杀的人的序号。根据上面的对比,F(N-1)可以看成是N个人自杀掉一个之后重新编码组成的新问题,与重新编码之前的序号对比多了一个M,那么F(N-1) + M就相当于是N个人自杀掉一个之后,接着继续自杀到最后一个的序号。

3.3代码截图

3.4学习体会

这道题的规则看起来很简答,就是循环报数,然后逐一剔除人员,剩下最后的一个。但是实际的思路却比较复杂,首先要实现循环报数就需要用到循环链表,然后重复遍历链表,并且重复删除数据,移动节点,操作起来就相对复杂一些,刚开始系看到这道题,想的是能不能用数组写一写看看,但是后面的定义内存太大了,主要是不知道题目的定义大小,然后就得把空间定义的很大,这样对于时间复杂度和空间复杂度都不利。之后看了用数学的方法转化成数据结构的方法来解答,大大节省了空间和时间。所以说链表做法很多时候都是更加便利。以后要多学着用链表和线性表来解答题目了

转载于:https://www.cnblogs.com/lw123---/p/10629717.html

DS博客作业02--线性表相关推荐

  1. DS博客作业03--栈和队列

    DS博客作业03--栈和队列 1.本周学习总结(0--1分) 谈谈你对栈和队列结构的认识及学习体会. 这章有认真预习,但做题还要依靠书,记不住,可能还需要多加练习,在PTA上的题只做了栈的,队列的做得 ...

  2. DS博客作业08--课程总结

    1.当初你是如何做出选择计算机专业的决定的? 当初选择计算机专业是因为比较喜欢电脑,有事没事喜欢慢慢摸索一些关于电脑的乱七八糟的东西.因为接触电脑比较早,所以对电脑的操控什么的都比较熟练.当然我也特别 ...

  3. pta答案厦门大学C语言,C语言I博客作业02 - osc_dmzfpa0c的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.概括表格 问题 答案 这个作业属于那个课程 C语言程序设计I 我在这个课程的目标是 深入了解C语言,熟练掌握编译代码的方法及内容 这个作业在那个具体方面帮助我实现目标 学会用代码求华氏温度下对应的 ...

  4. DS博客作业07--查找

    1.本周学习总结(0--2分) 1.1.思维导图 1.2谈谈你对查找运算的认识及学习体会. 2.PTA实验作业(6分) 本周要求挑3道题目写设计思路.调试过程.设计思路用伪代码描述.题目选做要求: 原 ...

  5. DS博客作业04--树大作业

    1.树的存储结构 本组采用的树的存储结构为链式结构,选择如图所示的结构体 Name为结点的名称 LevelNum为孩子节点的个数 *Children[20]用来指向不同的孩子结点(类似于二叉树的结构体 ...

  6. 博客作业2---线性表

    一.PTA实验作业 1.题目1:6-2 线性表元素的区间删除 2. 设计思路 int i=0,count=0记录大于min小于max的元素个数,k=0 while i 小于等于L->last i ...

  7. 博客作业02---线性表

    一.PTA实验作业 题目1:7-1 最长连续递增子序列 给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列. 例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列 ...

  8. C语言程序设计博客作业02

    我在这个课程的目标是 <写上你的目标> 这个作业在那个具体方面帮助我实现目标 <写上具体方面> 参考文献 <写上作业所参考的文献资料> 1.PTA实验作业(20分/ ...

  9. DS博客作业06--图

    1.本周学习总结 1.思维导图 2.谈谈你对图结构的认识及学习体会. 原本以为树已经够难的了,结果发现觉得太早了.图好难,看不懂.图是由两个集合V和E组成,V指的是顶点的有限集合,E代表两个不同顶点的 ...

最新文章

  1. canal+mysql+rocket
  2. List<Map<String, Object>>——多层嵌套的数据结构
  3. e-mobile帐号状态存在异常_个体工商经营户解除异常名录操作步骤(暂执行)
  4. Nginx code 常用状态码学习小结
  5. FFmpeg 4.0版发布
  6. js层级选择框样式_【JavaWeb】85:jQuery的各种选择器
  7. mysql查询出来的数据用连接_mysql – 使用查询从连接的表中检索数据
  8. springboot快速入门(一)——HelloWorld搭建
  9. 绝对定位(HTML、CSS)
  10. JAVA Eclipse 启动 Eclipse 弹出“Failed to load the JNI shared library jvm_dll”怎么办
  11. 拉格朗日插值多项式及其余项
  12. CodeM2018复赛
  13. 学经济为什么学python_工具&方法丨划重点 ! 经济学专业学Python需要学哪些内容?——数据分析处理必知必会的知识点...
  14. 计算机停电组态丢失,基于MCGS组态软件的计算机集散控制系统的设计
  15. 用matlab解线性规划题目,用MATLAB软件解线性规划范例
  16. 记录一次破解某加固APP的修改纪录
  17. 【OpenCV学习】物体跟踪的粒子滤波算法
  18. 机器学习深度学习教程
  19. 英文对于程序员的重要性
  20. eoLinker API-Shop 常见热门的OCR文字识别API

热门文章

  1. 熊猫分发_熊猫下降列和行
  2. 如何卸载FileZilla的Ftp服务
  3. 人工智能哪些技术在教育领域中得到了应用?
  4. Java面试题:面向对象的特征有哪些方面?
  5. Android知识点复习(一)-Android系统架构
  6. OpenSSH升级-无需替换旧版本文件
  7. Nginx如何配置静态文件过期时间
  8. 聊下并发和Tomcat线程数(错误更正)
  9. 过来人谈谈计算机考研复试
  10. SSAS实践问题记录--后端数据库访问模块中存在错误。 为绑定指定的大小太小,导致一个或多个列值被截断。