数据结构(五)数据结构与算法中的经典题

news/2024/7/27 21:41:58/文章来源:https://blog.csdn.net/qq_33489955/article/details/135626624

本文是在原本数据结构与算法闯关的基础上总结得来,加入了自己的理解和部分习题讲解。至此数据结构介绍已完结,后续会把数据结构算法题系列更完。
原活动链接

邀请码: JL57F5

闯关题 :有关于数据结构与算法中的经典题

根据要求完成题目
Q1. (单选)以下哪些数据结构支持随机访问?
A. 数组
B. 单链表
C. 双向链表
D. 队列
E. 栈

Q2. (单选) 下列哪个操作与队列的机制无关?
A. 入队
B. 出队
C. 获取队首元素
D. 更改队尾元素

Q3. (单选)以下哪种数据结构可以用于实现浏览器的前进和后退功能?
A. 栈
B. 队列
C. 数组
D. 堆
E. 哈希表

class Browser:
def init(self):
self.back_stack = [] # 后退栈
self.forward_stack = [] # 前进栈
self.current_page = None # 当前页面

def visit_page(self, page):if self.current_page is not None:self.back_stack.append(self.current_page)self.current_page = pageself.forward_stack = []def go_back(self):if len(self.back_stack) > 0:self.forward_stack.append(self.current_page)self.current_page = self.back_stack.pop()def go_forward(self):if len(self.forward_stack) > 0:self.back_stack.append(self.current_page)self.current_page = self.forward_stack.pop()mm

在上述示例中,Browser类使用back_stack和forward_stack两个栈来实现浏览器的前进和后退功能。visit_page方法用于访问新页面,将当前页面推入back_stack,并清空forward_stack。go_back方法从back_stack中弹出最近访问的页面,并将其推入forward_stack。go_forward方法从forward_stack中弹出最近访问的页面,并将其推入back_stack。

通过使用栈数据结构,可以轻松实现浏览器的前进和后退功能,并保持页面访问的顺序。

Q4. (单选)哈希表可以借助哪种数据结构来实现?
A. 图
B. 链表
C. 二叉树
D. 堆

Q5. (单选)以下哪种操作不是哈希表的基本操作?
A. 插入(Insert)
B. 删除(Delete)
C. 修改(Update)
D. 查找(Search)
E. 排序(Sort)

背景:
假设你是一家餐厅的后厨管理员,你需要负责安排顾客的点餐和餐厅后勤工作。由于餐厅人流量比较大,顾客数量众多,为了保证餐厅运营效率以及顾客满意度,你需要实现一种基于队列的排队算法。

问题:
实现一个基于队列的顾客排队模块。

方案:
我们可以使用队列来实现顾客排队。每个顾客到餐厅后,需要先进行排队,等待服务员叫号后进入餐厅就餐。我们可以将每个顾客看做一个个元素,先到先服务,每次将队前元素出队即可。同时,在顾客进入餐厅之前,我们还可以预估每个顾客的点餐时间,将顾客插入到队列中之后,根据队列中前后的顺序以及每个顾客的点餐时间,实现一种优先级算法,让点餐时间短的顾客先被叫号。

class Restaurant:def __init__(self):self.queue = []  # 初始化餐厅的队列为空列表def add_customer_to_queue(self, customer, order_time):"""将顾客加入队列中。Args:customer (str): 顾客名字。order_time (float): 顾客点餐时间。"""if len(self.queue) == 0:  # 如果队列为空self.queue.append((customer, order_time)) # 题目q6 : 直接将顾客名字和点餐时间作为元组加入队列else:for i in range(len(self.queue)):  # 遍历队列中的顾客if order_time < self.queue[i][1]:  # 如果当前顾客的点餐时间比要插入的顾客点餐时间大self.queue.insert(i, (customer, order_time))  # 将顾客插入到当前顾客之前的位置break  # 插入完成后中断循环else:self.queue.append((customer, order_time))  # 如果没有找到合适的位置,则将顾客添加到队列末尾def call_customer(self):"""叫号,将队首的顾客出队列。Returns:顾客名字。"""if len(self.queue) == 0: # 题目q7 :  如果队列为空return None  # 返回None表示没有顾客等待else:customer = self.queue.pop(0)[0]  # 弹出队首顾客并获取其名字return customer  # 返回顾客名字作为结果

在上面的代码中,我们定义了一个Restaurant类,类中包含了一个queue列表,用于存放排队中的顾客。类中定义了add_customer_to_queue方法,将顾客加入队列中;call_customer方法用于叫号,将队首的顾客出队列。

可以使用下面的代码来测试上面的餐厅排队模块的正确性:

# 创建一个餐厅实例
r = Restaurant()# 添加顾客到队列中
r.add_customer_to_queue("Alice", 2)
r.add_customer_to_queue("Bob", 3)
r.add_customer_to_queue("Cathy", 1)# 叫号
print(r.call_customer())  # Cathy
print(r.call_customer())  # Alice
print(r.call_customer())  # Bob
print(r.call_customer())  # None
Cathy
Alice
Bob
None

在上面的测试代码中,我们创建一个餐厅实例,向餐厅排队模块添加几个顾客,然后调用call_customer方法叫号,检查叫号时的顾客排队顺序是否满足点餐时间的先后关系。
实现我们要求的模块功能已经正确实现,并可以按照点餐时间的先后顺序将顾客进行排队。

观察上面的实现代码,完成下面的单选题(注意仔细查看注释和前后代码)

Q6. 代码第13行为空,现在需要实现 直接将顾客名字和点餐时间作为元组加入队列,下面哪个选项为正确代码,选择正确选项并把结果赋值给a6

A : self.queue.append((add_customer_to_queue, order_time))

B : self.queue.append((customer, order_time))

C : self.queue.insert((add_customer_to_queue, order_time))

D : self.queue.insert((customer, order_time))

Q7. 代码第28行为空,现在需要实现 如果队列为空的代码,下面哪个选项为正确代码,选择正确选项并把结果赋值给a7

A : if count(self.queue) == 0:

B : if len(self.queue) == 0:

C : if len(self.queue) is None:

D : if count(self.queue) is None:

#填入你的答案
a1 = 'A'  # 如 a1 = 'A'
a2 = 'D'  # 如 a2 = 'A'
a3 = 'A'  # 如 a3 = 'A'  
a4 = 'B'  # 如 a4 = 'A'  
a5 = 'E'  # 如 a5 = 'A'  
a6 = 'B'  # 如 a6 = 'A'
a7 = 'B'  # 如 a7 = 'A'

将结果保存为 csv 文件
csv 需要有两列,列名:id、answer。其中,id 列为题号,如 q1、q2;answer 列为 STEP1 中各题你计算出来的结果。💡 这一步的代码你无需修改,直接运行即可。

# 生成 csv 作业答案文件
def save_csv(a1, a2, a3, a4, a5,a6,a7) : import pandas as pddf = pd.DataFrame({"id": ["q1", "q2", "q3", "q4","q5","q6","q7"], "answer": [a1, a2, a3,a4,a5,a6,a7]})df.to_csv("answer_ago_1_5.csv", index=None)save_csv(a1, a2, a3, a4, a5,a6,a7)  # 运行这个cell,生成答案文件;该文件在左侧文件树project工作区下,你可以自行右击下载或者读取查看


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

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

相关文章

Shiro漏洞

VULHUB部署环境 下载vulhub https://github.com/vulhub/vulhub/archive/master.zip?spma2c6h.12873639.article-detail.7.76036a98Plc8q5&filemaster.zip 进入漏洞文件夹直接部署 界面 漏洞 如果勾选记住账号&#xff0c;请求包会附带remember-me字段&#xff0c;服务…

MetaGPT入门(一)

本文在Win11操作系统下进行&#xff0c;工具pycharm 一、环境准备 1.建议使用conda虚拟环境 安装anaconda参考&#xff1a;Windows10下Anaconda的安装_windows anaconda 路径-CSDN博客 打开Anaconda Powershell Prompt命令窗口&#xff0c;输入下面命令&#xff0c;创建3.1…

专业课145+合肥工业大学833信号分析与处理考研经验合工大电子信息通信

今年专业课145也是考研科目中最满意的一门&#xff0c;其他基本相对平平&#xff0c;所以这里我总结一下自己的专业课合肥工业大学833信号分析与处理的复习经验。 我所用的教材是郑君里的《信号与系统》&#xff08;第三版&#xff09;和高西全、丁玉美的《数字信号处理》&…

Qt超简单实现贪吃蛇

文章目录 常量Snake类GameController类GUI显示游戏简图 为了能够最简单地完成程序&#xff0c;所以没有用类的继承等知识。感兴趣的朋友可以改写一下。 常量 const int FILE_SIZE 30; //地图方格大小 const int FPS 5000 / 33; //游戏运行帧率 enum Item{empty, wall, food…

1.环境部署

1.虚拟机安装redhat8系统 这个其实很简单&#xff0c;但是有一点小细节需要注意。 因为我的电脑是 16核心的&#xff0c;所以选择内核16&#xff0c;可以最大发挥虚拟机的性能 磁盘选择SATA&#xff0c;便于后期学习 将一些没用的设备移除 选择安装redhat 8 时间选择上海 选择…

jdbc-mysql

NotWritablePropertyException: Invalid property driverClass of beanclass (com.alibabadruid.pool.DruidDataSource] Bean property "driverClass mysql的配置有问题

web练习2

需求 1.计算用户指定的数值内的奇数和。例如用户输入的是10则计算13579的和 <!doctype html> <html lang"en"> <head><meta charset"utf-8"><title>作业1</title></head> <body> <script>//计算用…

黄金t+d与黄金期货交易的区别

在金融投资领域中&#xff0c;黄金是一种重要的避险工具和财富保值增值手段。对于投资者来说&#xff0c;了解并熟悉不同的黄金交易方式是至关重要的。其中&#xff0c;黄金TD和黄金期货交易是两种常见的黄金交易形式。那么&#xff0c;它们之间具体有哪些区别呢&#xff1f; 了…

光鉴科技的反卷思维,让科技不再难做

文 | 智能相对论 作者 | 陈壹 中国企业的全球竞争力&#xff0c;正从“拼人力、拼产能”转为“拼技术、拼创新”的新阶段。据世界知识产权组织发布的《世界知识产权指标报告》显示&#xff0c;2022年中国专利申请量约160万件&#xff0c;排名世界第一。而在最近发布的全球百强…

使用 Picocli 开发 Java 命令行,5 分钟上手

大家好&#xff0c;我是鱼皮&#xff0c;对不会前端的同学来说&#xff0c;开发 命令行工具 是一种不错的展示系统功能的方式。在 Java 中开发命令行工具也很简单&#xff0c;使用框架&#xff0c;几分钟就能学会啦~ Picocli 入门 Picocli 是 Java 中个人认为功能最完善、最简单…

1.机器学习-机器学习算法分类概述

机器学习-机器学习算法分类概述 个人简介机器学习算法分类&#xff1a;监督学习、无监督学习、强化学习一监督学习1. 监督学习分类任务举例&#xff1a;1.1 特征1.2 标签 二无监督学习1.关键特点2.应用示例3.常见的无监督学习算法 三强化学习1.定义2.示例场景 四机器学习开发流…

【搜索引擎设计:信息搜索怎么避免大海捞针?

在前面我们提到了网页爬虫设计&#xff1a;如何下载千亿级网页&#xff1f;中&#xff0c;我们讨论了大型分布式网络爬虫的架构设计&#xff0c;但是网络爬虫只是从互联网获取信息&#xff0c;海量的互联网信息如何呈现给用户&#xff0c;还需要使用搜索引擎完成。因此&#xf…

Flutter-Web从0到部署上线(实践+埋坑)

本文字数&#xff1a;7743字 预计阅读时间&#xff1a;60分钟 01 前言 首先说明一下&#xff0c;这篇文章是给具备Flutter开发经验的客户端同学看的。Flutter 的诞生虽然来自 Google 的 Chrome 团队&#xff0c;但大家都知道 Flutter 最先支持的平台是 Android 和 iOS&#xff…

c语言-数据类型(下)

目录 4.实型变量 5.字符常量 直接常量&#xff1a; 转义字符&#xff1a; 6.字符变量 7.字符串常量 五、输出格式总结 整型&#xff1a; 浮点型&#xff1a; 字符及字符串&#xff1a; 指针&#xff08;地址&#xff09;&#xff1a; 六、typedef 七、sizeof一个问…

鸿蒙开发之blank组件

一、使用 使用blank可以在row/column/flex在容器主轴方向上填充剩余部分。 可以通过设置min最小宽度/高度来控制填充的大小&#xff0c; 也可以通过backgroundColor设置背景颜色来改变默认的透明色填充。 //设置最小宽度为200&#xff0c;填充颜色灰色 Blank(200).backgrou…

项目架构之Zabbix部署

1 项目架构 1.1 项目架构的组成 业务架构&#xff1a;客户端 → 防火墙 → 负载均衡&#xff08;四层、七层&#xff09; → web缓存/应用 → 业务逻辑&#xff08;动态应用&#xff09; → 数据缓存 → 数据持久层 运维架构&#xff1a;运维客户端 → 跳板机/堡垒机&#x…

AttributeError: module ‘openai‘ has no attribute ‘error‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

RIP【新华三与华为区别】

【介绍】 rip分为rip 1 与 rip 2 &#xff0c;rip 2 是对 rip 1 的一种升级&#xff0c;rip 2 可以进行认证等功能 【命令】 新华三&#xff1a; [HC3-R1] rip #启用rip [HC3-R1-rip] version 2 #告知rip 版本号 [HC3-R1-rip] network 192.168.1.0 #宣告其网段 [HC3-R1-rip] …

【NI-DAQmx入门】LabVIEW中DAQmx同步

1.同步解释 1.1 同步基础概念 触发器&#xff1a;触发器是控制采集的命令。您可以使用触发器来启动、停止或暂停采集。触发信号可以源自软件或硬件源。 时钟&#xff1a;时钟是用于对数据采集计时的周期性数字信号。根据具体情况&#xff0c;您可以使用时钟信号直接控制数据采…

深度学习记录--正则化(regularization)

什么是正则化&#xff1f; 正则化(regularization)是一种实用的减少方差(variance)的方法&#xff0c;也即避免过度拟合 几种正则化的方法 L2正则化 又被称为权重衰减(weight dacay) 在成本函数中加上正则项&#xff1a; 其中 由于在w的更新过程中会递减&#xff0c;即权…