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

这篇具有很好参考价值的文章主要介绍了数据结构(五)数据结构与算法中的经典题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

邀请码: 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 = page
    self.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 中各题你计算出来的结果。💡 这一步的代码你无需修改,直接运行即可。文章来源地址https://www.toymoban.com/news/detail-807812.html

# 生成 csv 作业答案文件
def save_csv(a1, a2, a3, a4, a5,a6,a7) : 
    import pandas as pd
    df = 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工作区下,你可以自行右击下载或者读取查看


到了这里,关于数据结构(五)数据结构与算法中的经典题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构与算法】之多指针算法经典问题

    本文为 【数据结构与算法】多指针算法经典问题 相关介绍,下边将对 链表反转 (包含 迭代反转链表 、 递归反转 、 头插法反转 ), 双指针-快慢指针 (包含 寻找单向无环链表的中点 、 判断单向链表是否有环及找环入口 ), 双指针-左右指针 (包含 两数之和 、 二分查

    2024年02月03日
    浏览(53)
  • 200个经典面试题(算法思想+数据结构)_1

    1. 爬楼梯 70. Climbing Stairs (Easy) 题目描述:有 N 阶楼梯,每次可以上一阶或者两阶,求有多少种上楼梯的方法。 定义一个数组 dp 存储上楼梯的方法数(为了方便讨论,数组下标从 1 开始),dp[i] 表示走到第 i 个楼梯的方法数目。 第 i 个楼梯可以从第 i-1 和 i-2 个楼梯再走一步

    2024年02月13日
    浏览(42)
  • 【数据结构与算法】:10道链表经典OJ

    思路1:遍历原链表,将 val 所在的节点释放掉。(太麻烦) 思路2:创建新链表,再遍历原链表,找到不为 val 的节点尾插到新链表。 思路1代码实现如下: 注意: 1.当链表为空时,直接返回NULL即可。 2.当尾插上最后一个有效节点时,此时它的 next 可能还与最后一个节点相链接,

    2024年04月14日
    浏览(36)
  • 头歌数据结构实训参考---十大经典排序算法

    可通过 目录 快速查阅对应排序算法

    2024年02月04日
    浏览(62)
  • 【数据结构】单链表经典算法题的巧妙解题思路

    目录 题目 1.移除链表元素 2.反转链表 3.链表的中间节点 4.合并两个有序链表 5.环形链表的约瑟夫问题 解析 题目1:创建新链表 题目2:巧用三个指针 题目3:快慢指针 题目4:哨兵位节点 题目5:环形链表   介绍完了单链表,我们这次来说几个经典的题目,本篇的题目衔接下一

    2024年04月28日
    浏览(52)
  • 【数据结构与算法】三个经典案例带你了解动态规划

    从表中我们可以看到,最大的公共子串长度为2,一共有两个长度为2的公共子串,分别是第一个字符串的第2个字符到第3个字符和第一个字符串的第3个字符到第4个字符,即 ba 和 ac 根据上面的方法,我们来用代码封装一下求取最大公共子串的函数 function publicStr(s1, s2) { // 创建

    2024年04月09日
    浏览(92)
  • 算法竞赛备赛之经典数据结构训练提升,暑期集训营培训

    我们将结构体和指针结合来实现链表 我们算法主要是用数组来模拟链表,这样效率会高一些。 数组模拟单链表 邻接表:存储图和树 实现一个单链表,链表初始为空,支持三种操作: 向链表头插入一个数 删除第k个插入的数后面的数 在第k个前面插入一个数 数组模拟双链表的

    2024年02月16日
    浏览(52)
  • 【数据结构】回溯算法公式化解题 leetcode经典题目带刷:全排列、组合、子集

    一、什么是回溯算法 回溯算法(Backtracking Algorithm)是一种解决 组合问题 、 排列问题 、 选择问题 等一类问题的常用算法。它通过尝试所有可能的选择来找到问题的解,当发现当前选择不符合要求时,就回溯到之前的状态,然后尝试其他的选择。 1、基本思想: 从问题的起

    2024年02月11日
    浏览(42)
  • 数据结构--》掌握数据结构中的查找算法

            当你需要从大量数据中查找某个元素时,查找算法就变得非常重要。         无论你是初学者还是进阶者,本文将为你提供简单易懂、实用可行的知识点,帮助你更好地掌握查找在数据结构和算法中的重要性,进而提升算法解题的能力。接下来让我们开启数据

    2024年02月08日
    浏览(54)
  • 数据结构--》掌握数据结构中的排序算法

            当我们面对海量数据时,如何高效地将其排序是数据结构领域中一个重要的问题。排序算法作为其中的关键部分,扮演着至关重要的角色。         无论你是初学者还是进阶者,本文将为你提供简单易懂、实用可行的知识点,帮助你更好地掌握排序算法在数据

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包