【数据结构与算法】- 周测一

课程链接: 清华大学驭风计划

代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com)


驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算机语言(刘知远教授) 以及数据结构与算法(邓俊辉教授)。本人是综合成绩第一名,除了数据结构与算法其他单科均为第一名。代码和报告均为本人自己实现,由于篇幅限制,只展示任务布置以及关键代码,如果需要报告或者代码可以私聊博主



数据结构与算法部分授课老师为邓俊辉教授,主要通过从贪心,分治,图搜索,动态规划 , 散列表, 计算几何入门数据结构与算法


有任何疑问或者问题,也欢迎私信博主,大家可以相互讨论交流哟~~



任务一

题目描述

有一个初始时为空的序列,你的任务是维护这个序列,需要进行的各种操作的表示与意义如下:

  • 1 k x : 在序列末尾插入 k个值都为 x 的数;
  • 2 k : 删除序列末尾的 k个数,若序列已不足 k个数,则删除序列中全部的数。

每次操作后,求序列的众数的值。一个序列的众数定义为该数列中出现次数最多的数,若出现次数最多的数有多种,取其中数值最小的数。



输入格式

从标准输入读入数据。

输入第一行为一个正整数 q,表示操作次数。

接下来 q 行描述依次进行的操作,每行描述一个操作,每个操作的输入方式同题目描述。


输出格式

输出到标准输出。

对于每个操作,输出操作完成后序列的众数(若序列为空则输出 -1),并换行


任务二

题目描述

实现一个双向链表,支持以下操作:

  1. split_succ(x):将 x 与 x 的后继(后一个)分离,若 x 没有后继,输出 no,否则输出 yes
  2. split_prev(x):将 x 与 x 的前驱(前一个)分离,若 x 没有前驱,输出 no,否则输出 yes
  3. link(x, y):将 x 接到 y 的前面,即 x 是 y 的前驱,y 是 x 的后继,若 x 已经有后继或者 y 已经有前驱,输出 no,否则输出 yes
  4. visit_succ(x):从 x 开始,一直按照后继访问下去,直到回到 x 或者没有后继为止,输出经过的所有节点编号
  5. visit_prev(x):从 x 开始,一直按照前驱访问下去,直到回到 x 或者没有前驱为止,输出经过的所有节点编号

以上的 x 均为节点编号,一共有 n 个节点,编号从 1 到 n。

一开始 n 个节点的前驱、后继均为空,也就是每个节点都是独立的节点。



输入格式

第一行两个正整数 n, m,接下来有 m 行,每行表示一个操作,格式见样例

输出格式

依次输出 m 行,每行代表一个操作的结果,格式见样例




任务三

题目描述

给定两个二叉树,请判断他们结构是否相同。在这里,二叉树 ab 相同,当且仅当 a 的根节点左子树和 b 的根节点左子树相同,a 的根节点右子树和 b 的根节点右子树相同。

ab 对应的左(右)子树都是空,也相同。

注意,不需要编号相同,只需要结构相同。



输入格式

多组数据,第一行为一个正整数 T,表示数据组数。

对于每组数据:

第一行一个正整数 n,表示二叉树 ab 的节点个数。

接下来 n 行,描述二叉树 a,第 i行有两个非负整数 l,r,,分别表示编号为 i1-1 的节点的左孩子与右孩子的编号。

之后还有 n 行,描述二叉树 b,第 i行有两个非负整数 l,r,,分别表示编号为 i1-1 的节点的左孩子与右孩子的编号。

注意,每个二叉树的节点编号范围为 00 到 n1-1,根节点的编号为 00,编号 1-1 表示为空。

输出格式

每组数据输出一行,若该组数据的两个二叉树结构相同,输出 yes,否则输出 no



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曼城周杰伦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值