【算法训练营】栈,队列,二叉树习题1-1(python实现)

描述

实现一个栈,完成以下功能:

  1. 入栈
  2. 出栈
  3. 询问栈中位置Y是谁

一开始栈为空。栈中的位置从1开始(即栈底位置为1)。

输入

第一行一个整数n,表示操作个数。

接下来n行,每行第一个数字表示操作(见描述):

  • 若为数字1,则接下来有一串字符串X,表示将X压入栈中。
  • 若为数字2,表示弹出栈顶(保证栈非空),并输出出栈的这个人。
  • 若为数字3,则接下来有一个整数Y,表示询问栈中位置Y是谁(保证位置Y合法),并输出名字。

输出

将所有操作2和操作3输出,一行一个。

输入样例

11
1 a
1 b
1 c
3 1
3 2
3 3
2
1 d
3 1
3 2
3 3

输出样例

a
b
c
c
a
b
d

限制

对于30%的数据,1 ≤ n ≤ 2000;

对于另30%的数据,没有操作3;

对于100%的数据,1 ≤ n ≤ 100000。

数据中出现的字符串只包含26个小写字母(无空格等分隔符),且长度不超过15。

字符串有可能重复。正如现实中可能有重名一样。

时间:2 sec

空间:256 MB

提示

[入栈和出栈都是操作着栈顶。]

[开一个大小为n的数组,记录栈顶的位置,入栈出栈就是将这栈顶加一减一,栈中某个位置Y在数组相应的下标就是Y。]

实现代码

class Stack:def __init__(self):self.stack = []def push(self, name):self.stack.append(name)def pop(self):if self.stack:return self.stack.pop()def peek(self, index):return self.stack[index - 1]stack = Stack()n = int(input())
output = []for _ in range(n):operation = input().split()if operation[0] == '1':name = operation[1]stack.push(name)elif operation[0] == '2':popped = stack.pop()if popped:output.append(popped)elif operation[0] == '3':index = int(operation[1])output.append(stack.peek(index))for item in output:print(item)

队列

描述

实现一个队列,完成以下功能:

  1. 入列
  2. 出列
  3. 询问队列中位置Y是谁

一开始队列为空。队列中的位置从1开始(即队头位置为1)。

输入

第一行一个整数n,表示操作个数。

接下来n行,每行第一个数字表示操作(见描述):

  • 若为数字1,则接下来有一串字符串X,表示将X加入队列。
  • 若为数字2,表示出列(保证队列非空),并输出出列的这个人。
  • 若为数字3,则接下来有一个整数Y,表示询问队列中位置Y是谁(保证位置Y合法),并输出名字。

输出

将所有操作2和操作3输出,一行一个。

输入样例

11
1 a
1 b
1 c
3 1
3 2
3 3
2
1 d
3 1
3 2
3 3

输出样例

a
b
c
a
b
c
d

限制

对于30%的数据,1 ≤ n ≤ 2000;

对于另30%的数据,没有操作3;

对于100%的数据,1 ≤ n ≤ 100000。

数据中出现的字符串只包含26个小写字母(无空格等分隔符),且长度不超过15。

字符串有可能重复。正如现实中可能有重名一样。

时间:2 sec

空间:256 MB

提示

[队头出列,队尾入列。]

[开一个大小为n的数组,记录队头和队尾的位置,入列出列就是将这两个位置改变一下,队列中某个位置Y在数组相应的下标为队头的位置+Y-1。]

实现代码

class Queue:def __init__(self):self.queue = []def enqueue(self, name):self.queue.append(name)def dequeue(self):if len(self.queue) == 0:return Nonereturn self.queue.pop(0)def get_name_at_position(self, position):return self.queue[position - 1]# 读取输入
n = int(input())
queue = Queue()# 处理操作
for _ in range(n):operation = input().split()if operation[0] == '1':queue.enqueue(operation[1])elif operation[0] == '2':print(queue.dequeue())elif operation[0] == '3':position = int(operation[1])print(queue.get_name_at_position(position))

二叉树

描述

给定一个1到n的排列,按顺序依次插入到一棵二叉排序树中,请你将这棵二叉树前序遍历和后序遍历输出。

前序遍历的定义

后序遍历的定义

输入

第一行一个整数n。

接下来一行表示为n个整数,代表1到n的一个排列。

输出

输出所建成的二叉树的前序遍历和后序遍历。

输入样例

10
2 6 9 3 5 7 10 8 4 1

输出样例

2 1 6 3 5 4 9 7 8 10
1 4 5 3 8 7 10 9 6 2

限制

对于50%的数据,1 ≤ n ≤ 100;

对于100%的数据,1 ≤ n ≤ 100000。

保证建成的树的高度不超过50。

时间:2 sec

空间:256 MB

提示

[二叉树的操作基本都是递归操作,只要想想如何在一个节点上判断是朝着左孩子走还是朝着右孩子走就行了。]

实现代码

class TreeNode:def __init__(self, val):self.val = valself.left = Noneself.right = Nonedef insert_into_bst(root, val):if root is None:return TreeNode(val)if val < root.val:root.left = insert_into_bst(root.left, val)else:root.right = insert_into_bst(root.right, val)return rootdef preorder_traversal(root):if root is None:return []return [root.val] + preorder_traversal(root.left) + preorder_traversal(root.right)def postorder_traversal(root):if root is None:return []return postorder_traversal(root.left) + postorder_traversal(root.right) + [root.val]# 读取输入
n = int(input())
permutation = list(map(int, input().split()))# 构建二叉排序树
bst_root = None
for num in permutation:bst_root = insert_into_bst(bst_root, num)# 输出前序遍历和后序遍历
preorder_result = preorder_traversal(bst_root)
postorder_result = postorder_traversal(bst_root)print(" ".join(map(str, preorder_result)))
print(" ".join(map(str, postorder_result)))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/676544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考网工笔记1:计算机网络的形成和发展

计算机网络的形成和发展 一、早期的计算机网络 1、1951年&#xff0c;美国麻省理工学院林肯实验室就开始为美国空军设计称为 SAGE 的半自动化地面防空系统&#xff0c;该系统最终于1963年建成&#xff0c;被认为是计算机和通信技术结合的先驱。 2、美国航空公司与 IBM公司在…

谷歌发布AI新品Gemini及收费模式;宜家推出基于GPT的AI家装助手

&#x1f989; AI新闻 &#x1f680; 谷歌发布AI新品Gemini及收费模式 摘要&#xff1a;谷歌宣布将原有的AI产品Bard更名为Gemini&#xff0c;开启了谷歌的AI新篇章。同时推出了强化版的聊天机器人Gemini Advanced&#xff0c;支持更复杂的任务处理&#xff0c;提供了两个月的…

C++服务器端开发(10):性能优化

选择合适的数据结构和算法&#xff1a;使用适当的数据结构和算法可以极大地提高服务器的性能。例如&#xff0c;使用哈希表来快速访问和检索数据&#xff0c;使用平衡二叉树来维护有序的数据等。 减少内存分配和释放&#xff1a;频繁的内存分配和释放操作会导致性能下降。可以…

Mysql Day03

多表设计 一对多 在多的一方添加外键约束&#xff0c;关联另外一方主键 一对一 任意一方添加外键约束&#xff0c;关联另外一方主键 多对多 建立第三张中间表&#xff0c;中间表至少包含两个外键&#xff0c;分别关联两方主键 idstu_idcourse_id 1 11 2 12313421524 案…

融资项目——获取树形结构的数据

如下图所示&#xff0c;下列数据是一个树形结构数据&#xff0c;行业中包含若干子节点。表的设计如下图&#xff0c;设置了一个id为1的虚拟根节点。&#xff08;本树形结构带虚拟根节点共三层&#xff09; 实现逻辑&#xff1a; 延时展示方法&#xff0c;先展现第二层的信息&a…

机器学习8-决策树

决策树&#xff08;Decision Tree&#xff09;是一种强大且灵活的机器学习算法&#xff0c;可用于分类和回归问题。它通过从数据中学习一系列规则来建立模型&#xff0c;这些规则对输入数据进行递归的分割&#xff0c;直到达到某个终止条件。 决策树的构建过程&#xff1a; 1.…

2024年生成式AI芯片市场规模将达500亿美元

1月24日&#xff0c;德勤发布《2024科技、传媒和电信行业预测》中文版报告&#xff0c;2024年是科技、传媒和电信行业关键的一年&#xff0c;不少科技公司正利用生成式AI升级软件和服务&#xff0c;预计今年全球生成式人工智能芯片销售额可能达到500亿美元以上。 2024年将有许…

【开源】基于JAVA+Vue+SpringBoot的智慧社区业务综合平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 业务类型模块2.2 基础业务模块2.3 预约业务模块2.4 反馈管理模块2.5 社区新闻模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 业务类型表3.2.2 基础业务表3.2.3 预约业务表3.2.4 反馈表3.2.5 社区新闻表 四、系统展…

Mysql一行记录存储过程

Mysql一行记录存储过程 Mysql的文件架构 行&#xff08;row&#xff09; 数据库表中的记录都是行存放的&#xff0c;每行继续根据不同的行格式都有不同的存储结构。 页&#xff08;page&#xff09; 记录是按照行来存储的&#xff0c;但是数据库的读取是以页为单位的&…

Element-ui date-picker组件报错 date.getHours is not a function

这个错误通常意味着date这个变量并不是一个真正的日期对象&#xff0c;而是其他类型&#xff0c;例如字符串或数字。因此&#xff0c;无法调用日期对象的getHours方法。 在Element-ui中使用date-picker组件时&#xff0c;应该保证绑定的数据是Date对象&#xff0c;而不是其他类…

python-基础篇-列表-脚本

文章目录 01_下标.py02_查找.py03_判断是否存在.py04_体验案例判断是否存在.py05_列表增加数据之append.py06_列表增加数据之extend.py07_列表增加数据之insert.py08_列表删除数据.py09_列表修改数据.py10_列表复制数据.py11_列表的循环遍历之while.py12_列表的循环遍历之for.p…

Goro Shimura似乎不懂模形式

Goro Shimura(1930-2019&#xff0c;Cole奖获得者)&#xff0c; 志村五郎&#xff0c;生前普林斯顿大学教授&#xff0c;日本裔数学家&#xff0c;研究模形式著称。在其名著Introduction to the Arithmetic Theory of Automorphic Functions&#xff08; Princeton University …

Linux 存储管理(磁盘管理、逻辑卷LVM、交换分区swap)

目录 1.磁盘管理 1.1 磁盘简介 1.2 管理磁盘 添加磁盘 管理磁盘流程三步曲 1.查看磁盘信息 2.创建分区 3.创建文件系统 4.挂载mount 5.查看挂载信息 6.MBR扩展分区 7.重启后的影响 2.逻辑卷LVM 2.1 简介 ​​​​​​2.2 创建LVM 2.3 VG管理 2.4 LV管理实战-在…

铱塔 (iita) 开源 IoT 物联网开发平台,基于 SpringBoot + TDEngine +Vue3

01 铱塔 (iita) 物联网平台 铱塔智联 (open-iita) 基于Java语言的开源物联网基础开发平台&#xff0c;提供了物联网及相关业务开发的常见基础功能, 能帮助你快速搭建自己的物联网相关业务平台。 铱塔智联平台包含了品类、物模型、消息转换、通讯组件&#xff08;mqtt/EMQX通讯组…

数组旋转变换分析

&#xff08;1&#xff09;数组初始化 初始化&#xff1a;[1,2,3,4,5,6,7,8] 其中1,5是一对&#xff0c;2,6是一对&#xff0c;3,7是一对&#xff0c;4,8是一对。 &#xff08;2&#xff09;任意旋转 把左边若干个数放到数组右边 新的数组和[x,x1......x7]mod 8同余 &…

学习Android的第八天

目录 Android ImageView 图像视图 ImageView 的基本使用 src属性和background属性的区别 范例 解决 anndroid:blackground 属性拉伸导致图片变形的方法 设置透明度的问题 范例 android:src 和 android:background 结合 范例 Java 代码中设置 blackground 和 src 属性…

基于鲲鹏服务器的LNMP配置

基于鲲鹏服务器的LNMP配置 系统 Centos8 # cat /etc/redhat-release CentOS Linux release 8.0.1905 (Core) 卸载已经存在的旧版本的安装包 # rpm -qa | grep php #查看已经安装的PHP旧版本# rpm -qa | grep php | xargs rpm -e #卸载已经安装的旧版&#xff0c;如果提示有…

OpenCV 笔记(21):图像色彩空间

1. 图像色彩空间 图像色彩空间是用于定义颜色范围的数学模型。 它规定了图像中可以使用的颜色以及它们之间的关系。它决定了图像中可以显示的颜色范围。不同的色彩空间可以包含不同的颜色范围&#xff0c;因此选择合适的色彩空间对于确保图像在不同设备上看起来一致非常重要。…

跳跃表的底层实现

跳跃表的底层是由 C 语言实现的&#xff0c;它的实现源码如下&#xff1a; typedef struct zskiplistNode {// 成员对象robj *obj;double score; // 分值struct zskiplistNode *backward; // 回退指针//层struct zskiplistLevel {// 前进指针struct zskiplistNode *forward;//…

架构之模板方法等模式的使用

目录 一、程序编写背景 二、编程思路讲解 - 类图 - 实现逻辑 - 工厂模式 - 模板方法模式 接口类&#xff08;代码&#xff09;抽象类&#xff08;代码&#xff09;具体实现类&#xff08;代码&#xff09;工厂类&#xff08;代码&#xff09;注册类&#xff08;代码&…