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--树相关推荐

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

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

  2. C语言|博客作业05

    C语言|博客作业05 这个作业属于哪个课程 https://bbs.csdn.net/forums/csuft_swxy_C?typeId=17321 这个作业要求在哪里 https://bbs.cs ...

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

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

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

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

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

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

  6. C语言I博客作业05

    这个作业属于哪个课程 2021秋C语言_中南林涉外社区-2021秋C语言_中南林涉外论坛-CSDN社区云 这个作业要求在哪里 C语言I---作业05-CSDN社区 这个作业的目标 学号 2021856 ...

  7. C语言I———博客作业05

    这个作业属于哪个课程 https://bbs.csdn.net/forums/csuft_swxy_C?category=0&typeId=17321 这个作业要求在哪 https://bbs ...

  8. DS博客作业06--图

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

  9. DS博客作业01--日期抽象数据类型设计与实现

    1.思维导图及学习体会 1.1第一章绪论知识点思维导图 1.2 学习体会 本次大作业使用的是c++语法,作为一个纯正的小白,在未知领域上一点点地摸索,靠着百度和大佬的帮助下渐渐地掌握了一些c++的使用 ...

最新文章

  1. 算法解密:电梯是如何实现上下调度的?
  2. es对分组后结果进行统计_ElasticSearch里面如何分组后根据sum值排序
  3. 如何在本地搭建多个网站(wampserver)
  4. 3D Button Suite
  5. 使用js对来判断一个字符串中括号是否平衡匹配
  6. C++radix sort基数排序的实现算法之二(附完整源码)
  7. sonar 使用问题 Unable to load component class org.sonar.scanner.report.ActiveRulesPublisher
  8. CGGeometry.h详解
  9. mysql5.6 replication_MySQL 5.6 Replication
  10. 服务端渲染和客户端渲染区别?
  11. Shell(一) 入门到复杂 自己做的各种脚本实例与解释
  12. 【图像重建】基于matlab GUI霍夫曼图像重建(带面板)【含Matlab源码 1168期】
  13. Delphi如何调用C++写的DLL
  14. 【听课笔记】入行电商产品经理
  15. ubuntu 14.04 安装 minidwep-gtk, aircrack-ng, reaver 搭建抓包环境
  16. 支付宝PC(二维码扫码)支付(Java开发)完整版
  17. 入门算法题——数学篇(一)
  18. 详解linux杀死进程方法:kill、pkill、killall之间的区别及用法!
  19. 数仓工具—Hive源码之Beeline/HiveCli(4)
  20. python3 + Scrapy爬虫学习之创建项目

热门文章

  1. 问卷星调查学生对《算法》教学的建议与反馈
  2. python第三方模块—psutil模块
  3. mysql数据库主从同步
  4. Centos 7 安装 rabbitmq 3.6.6
  5. Zookeeper源码编译为Eclipse工程(转)
  6. 定义文字用em、rem,效果和px一样
  7. LAMP搭建UCenter
  8. 通过Corosync实现Mysql高可用,以及LVS+ldirectord高可用并状态检测
  9. [值得学习]售前工程师的成长---一个老员工的经验之谈(一)
  10. 安装截图软件shutter