DS博客作业05--树
1.本周学习总结
学习体会:树是一种重要的结构在生活上有大量的使用,例如文档和目录都是如此。起初在接触树的时候完全不知道这样一种结构是怎么实现的,对这样一种结构的实现感到神奇。在对二叉树的学习中渐渐对树有了认识,它的结构体有左右两个孩子指针,这样可以很好的保存下一层的数据。在有了认识后最重要的是用代码去实现这个功能,然后看到了树的遍历基本都是递归就有点懵了。递归对我来说一直都使用的不顺,经过在pta反复的使用后也算是比较熟悉了,在加上在大作业中对孩子兄弟树的操作后,感觉树还掌握的不错。
2.PTA实验作业
2.1.题目1:6-4 jmu-ds-表达式树
2.1.1设计思路
```c void类型 InitExpTree函数传入BTree &T,string str定义BTree变量p,p1,p2定义BTree的栈s,op定义int变量iwhile i小于str的长度 doif str[i] 是数 then新建结点p存str[i],并将p入栈selse str[i]是符号 thenif 栈op为空或str[i]的优先级大于op栈顶 then新建结点p存str[i],并将p入栈opelse thenwhile 栈op不空且str[i]的优先级小于op栈顶 dos出栈2次分别由p2和p1保存op出栈一次由p保存p左孩子指向p1,p右孩子指向p2,将p入栈sif 栈op不空且str[i]的优先级等于于op栈顶 thenop出栈else continuei++if 栈s为空 thenT=NULLreturnwhile 栈op不空 dos出栈2次分别由p2和p1保存op出栈一次由p保存p左孩子指向p1,p右孩子指向p2,将p入栈s T=p doule类型 EvaluateExTree函数传入BTree T定义double型变量x,yif T==NULL then return 0switch 判断T->data若为+号 return EvaluateExTree(T->lchild)+EvaluateExTree(T->rchild)break若为-号 return EvaluateExTree(T->lchild)-EvaluateExTree(T->rchild)break若为*号 return EvaluateExTree(T->lchild)*EvaluateExTree(T->rchild)break若为/号x=EvaluateExTree(T->lchild),y=EvaluateExTree(T->rchild)if y=0 then 输出“divide 0 error!” 退出程序else return x/ybreak若为数字 return T->data-'0'```
2.1.2代码截图
2.1.3本题PTA提交列表说明。
Q1:刚开始看到这个题目完全没有思路,直接放弃了 A1:经过老师在上课的时候说要用到2个栈来存放,感觉可以开始尝试了 Q2:写了一半发现这题的代码量有点多 A2:翻上去发现有一些功能已经有了,崩溃 Q3:虽然上面有符号优先级比较的函数,但是一直看不懂 A3:经过了多次的尝试才明白了代码是怎么实现优先级的比较 Q4:完成代码后又出现了有括号的数据不行的情况 A4:查找发现代码位置有误,并修改了代码位置最终解决
2.2.题目2:7-6 修理牧场
2.2.1设计思路
这里讲sort做法的思路
```c main函数定义int型vector变量s定义int变量n,a,x,y,i,sum=0输入数量nfor i=0 to n-1 do输入a,并存入s用sort对s排序while s长度不等于1 dox等于s中第一个数据,并将s中第一个数据删掉y等于s中第一个数据,并将s中第一个数据删掉sum=sum+x+yfor i=0 to i等于s的长度减1 doif x+y<s[i] break将x+y插入s中i的位置输出sumreturn 0```
2.2.2代码截图
哈夫曼树代码
sort排序做法
优先队列法
2.2.3本题PTA提交列表说明。
Q1:刚开始完全不会这一题 A1:百度看到这一题可以用优先队列,而且代码就几行,十分简便 Q2:但是毕竟那个没学过,所以又想换一个办法 A2:所以就有了哈夫曼树的代码,错误主要是min的初始化太小 Q3:看到哈夫曼的时间复杂度太大意识到不行 A3:所以又用sort写了一遍,综上还是优先队列的时间复杂度小,代码量少
2.3.题目3:7-7 朋友圈
2.3.1设计思路
```c main定义并查集数组t定义int数组sum定义整型N,M输入人数N和集合M定义整型i,x,a=0,b=0for i=1 to i=N do //数组初始化t[i].rank=0,t[i].data=i,t[i].parent=iwhile M-- do //遍历集合 输入当前集合人数x当x不为0 输入第一个人afor i=0 to i=x-2 do //遍历剩下的人 输入人b调用UNION函数联合a和b定义整型max=0for i=1 to i=N do //遍历所有人x=Find(i,t) //找头结点sum[x]++ //记录头结点相同的人数,即朋友圈人数if sum[x]>max do max=sum[x] //记录最大朋友圈 输出最大朋友圈人数max Find函数if a==t[a].parent 返回a //说明是头结点else return Find(t[a].parent,t) //不是就继续递归寻找 UNION函数int x为a的头结点,y为b的头结点if x==y then //选择rank大的为新的头结点if t[x].rank>t[y].rankt[y].parent=xelset[x].parent=y;if t[x].rank == t[y].rank then t[y].rank++ //相等的时候合并后rank要加一 ```
2.3.2代码截图
2.3.3本题PTA提交列表说明。
这题主要问题就是并查集不熟悉,经过了看课本和查百度才在最后艰难的完成了这一题的代码。
3、阅读代码
3.1 题目
题目描述
输入一串二叉树,用遍历先序打出。
输入输出格式
输入格式:
第一行为二叉树的节点数n。
后面n行,每一个字母为节点,后两个字母分别为其左右儿子。
空节点用*表示
输出格式:
先序排列的二叉树
3.2 解题思路
n行数据,逐行输入,存入tree数组中
在DLR函数中进行先序的输出操作,需要
注意的是,左孩子和双亲之间是两倍的关系,
左孩子和右孩子差1.
3.3 代码截图
3.4 学习体会
1.代码打多了对陌生代码可以有较快的反应能力,可以快速明白题目的解题方法
2.本题多采用数组的方式,而我们多采用指针的方式,多了解数组方面也有好处
转载于:https://www.cnblogs.com/putianliuzhong/p/10863894.html
DS博客作业05--树相关推荐
- DS博客作业03--栈和队列
DS博客作业03--栈和队列 1.本周学习总结(0--1分) 谈谈你对栈和队列结构的认识及学习体会. 这章有认真预习,但做题还要依靠书,记不住,可能还需要多加练习,在PTA上的题只做了栈的,队列的做得 ...
- C语言|博客作业05
C语言|博客作业05 这个作业属于哪个课程 https://bbs.csdn.net/forums/csuft_swxy_C?typeId=17321 这个作业要求在哪里 https://bbs.cs ...
- DS博客作业08--课程总结
1.当初你是如何做出选择计算机专业的决定的? 当初选择计算机专业是因为比较喜欢电脑,有事没事喜欢慢慢摸索一些关于电脑的乱七八糟的东西.因为接触电脑比较早,所以对电脑的操控什么的都比较熟练.当然我也特别 ...
- DS博客作业04--树大作业
1.树的存储结构 本组采用的树的存储结构为链式结构,选择如图所示的结构体 Name为结点的名称 LevelNum为孩子节点的个数 *Children[20]用来指向不同的孩子结点(类似于二叉树的结构体 ...
- DS博客作业07--查找
1.本周学习总结(0--2分) 1.1.思维导图 1.2谈谈你对查找运算的认识及学习体会. 2.PTA实验作业(6分) 本周要求挑3道题目写设计思路.调试过程.设计思路用伪代码描述.题目选做要求: 原 ...
- C语言I博客作业05
这个作业属于哪个课程 2021秋C语言_中南林涉外社区-2021秋C语言_中南林涉外论坛-CSDN社区云 这个作业要求在哪里 C语言I---作业05-CSDN社区 这个作业的目标 学号 2021856 ...
- C语言I———博客作业05
这个作业属于哪个课程 https://bbs.csdn.net/forums/csuft_swxy_C?category=0&typeId=17321 这个作业要求在哪 https://bbs ...
- DS博客作业06--图
1.本周学习总结 1.思维导图 2.谈谈你对图结构的认识及学习体会. 原本以为树已经够难的了,结果发现觉得太早了.图好难,看不懂.图是由两个集合V和E组成,V指的是顶点的有限集合,E代表两个不同顶点的 ...
- DS博客作业01--日期抽象数据类型设计与实现
1.思维导图及学习体会 1.1第一章绪论知识点思维导图 1.2 学习体会 本次大作业使用的是c++语法,作为一个纯正的小白,在未知领域上一点点地摸索,靠着百度和大佬的帮助下渐渐地掌握了一些c++的使用 ...
最新文章
- 算法解密:电梯是如何实现上下调度的?
- es对分组后结果进行统计_ElasticSearch里面如何分组后根据sum值排序
- 如何在本地搭建多个网站(wampserver)
- 3D Button Suite
- 使用js对来判断一个字符串中括号是否平衡匹配
- C++radix sort基数排序的实现算法之二(附完整源码)
- sonar 使用问题 Unable to load component class org.sonar.scanner.report.ActiveRulesPublisher
- CGGeometry.h详解
- mysql5.6 replication_MySQL 5.6 Replication
- 服务端渲染和客户端渲染区别?
- Shell(一) 入门到复杂 自己做的各种脚本实例与解释
- 【图像重建】基于matlab GUI霍夫曼图像重建(带面板)【含Matlab源码 1168期】
- Delphi如何调用C++写的DLL
- 【听课笔记】入行电商产品经理
- ubuntu 14.04 安装 minidwep-gtk, aircrack-ng, reaver 搭建抓包环境
- 支付宝PC(二维码扫码)支付(Java开发)完整版
- 入门算法题——数学篇(一)
- 详解linux杀死进程方法:kill、pkill、killall之间的区别及用法!
- 数仓工具—Hive源码之Beeline/HiveCli(4)
- python3 + Scrapy爬虫学习之创建项目