数据结构实操代码题~考研

news/2024/9/11 3:28:24/ 标签: 数据结构, 考研, python

作者主页: 知孤云出岫在这里插入图片描述

目录

    • 数据结构实操代码题
      • 题目一:实现栈(Stack)
      • 题目二:实现队列(Queue)
      • 题目三:实现二叉搜索树(BST)
      • 题目四:实现链表(Linked List)
      • 题目五:实现图的深度优先搜索(DFS)和广度优先搜索(BFS)

在这里插入图片描述

数据结构实操代码题

题目一:实现栈(Stack)

请实现一个栈的数据结构,支持以下操作:

  • push(x):将元素x压入栈中。
  • pop():移除并返回栈顶元素。
  • top():返回栈顶元素。
  • is_empty():判断栈是否为空。
python">class Stack:def __init__(self):self.items = []def push(self, x):self.items.append(x)def pop(self):if not self.is_empty():return self.items.pop()else:return Nonedef top(self):if not self.is_empty():return self.items[-1]else:return Nonedef is_empty(self):return len(self.items) == 0# 测试代码
stack = Stack()
stack.push(1)
stack.push(2)
print(stack.top())    # 输出: 2
print(stack.pop())    # 输出: 2
print(stack.is_empty()) # 输出: False
print(stack.pop())    # 输出: 1
print(stack.is_empty()) # 输出: True

题目二:实现队列(Queue)

请实现一个队列的数据结构,支持以下操作:

  • enqueue(x):将元素x加入队列。
  • dequeue():移除并返回队列头部元素。
  • front():返回队列头部元素。
  • is_empty():判断队列是否为空。
python">class Queue:def __init__(self):self.items = []def enqueue(self, x):self.items.append(x)def dequeue(self):if not self.is_empty():return self.items.pop(0)else:return Nonedef front(self):if not self.is_empty():return self.items[0]else:return Nonedef is_empty(self):return len(self.items) == 0# 测试代码
queue = Queue()
queue.enqueue(1)
queue.enqueue(2)
print(queue.front())    # 输出: 1
print(queue.dequeue())  # 输出: 1
print(queue.is_empty()) # 输出: False
print(queue.dequeue())  # 输出: 2
print(queue.is_empty()) # 输出: True

题目三:实现二叉搜索树(BST)

请实现一个二叉搜索树的数据结构,支持以下操作:

  • insert(x):插入元素x。
  • search(x):查找元素x,返回True或False。
  • inorder():中序遍历二叉树。
python">class TreeNode:def __init__(self, key):self.left = Noneself.right = Noneself.val = keyclass BinarySearchTree:def __init__(self):self.root = Nonedef insert(self, key):if self.root is None:self.root = TreeNode(key)else:self._insert(self.root, key)def _insert(self, root, key):if key < root.val:if root.left is None:root.left = TreeNode(key)else:self._insert(root.left, key)else:if root.right is None:root.right = TreeNode(key)else:self._insert(root.right, key)def search(self, key):return self._search(self.root, key)def _search(self, root, key):if root is None or root.val == key:return root is not Noneif key < root.val:return self._search(root.left, key)else:return self._search(root.right, key)def inorder(self):return self._inorder(self.root, [])def _inorder(self, root, result):if root:self._inorder(root.left, result)result.append(root.val)self._inorder(root.right, result)return result# 测试代码
bst = BinarySearchTree()
bst.insert(3)
bst.insert(1)
bst.insert(2)
bst.insert(5)
print(bst.search(3))    # 输出: True
print(bst.search(4))    # 输出: False
print(bst.inorder())    # 输出: [1, 2, 3, 5]

题目四:实现链表(Linked List)

请实现一个单向链表的数据结构,支持以下操作:

  • append(x):在链表末尾添加元素x。
  • insert(index, x):在指定位置插入元素x。
  • delete(index):删除指定位置的元素。
  • get(index):获取指定位置的元素。
python">class ListNode:def __init__(self, x):self.val = xself.next = Noneclass LinkedList:def __init__(self):self.head = Nonedef append(self, x):if not self.head:self.head = ListNode(x)else:current = self.headwhile current.next:current = current.nextcurrent.next = ListNode(x)def insert(self, index, x):if index == 0:new_node = ListNode(x)new_node.next = self.headself.head = new_nodeelse:current = self.headfor _ in range(index - 1):if current is None:returncurrent = current.nextif current is None:returnnew_node = ListNode(x)new_node.next = current.nextcurrent.next = new_nodedef delete(self, index):if self.head is None:returnif index == 0:self.head = self.head.nextelse:current = self.headfor _ in range(index - 1):if current is None:returncurrent = current.nextif current is None or current.next is None:returncurrent.next = current.next.nextdef get(self, index):current = self.headfor _ in range(index):if current is None:return Nonecurrent = current.nextreturn current.val if current else None# 测试代码
ll = LinkedList()
ll.append(1)
ll.append(2)
ll.append(3)
print(ll.get(1))     # 输出: 2
ll.insert(1, 4)
print(ll.get(1))     # 输出: 4
ll.delete(2)
print(ll.get(2))     # 输出: 3

题目五:实现图的深度优先搜索(DFS)和广度优先搜索(BFS)

请实现一个无向图的数据结构,支持以下操作:

  • add_edge(u, v):添加边u-v。
  • dfs(start):从start节点开始进行深度优先搜索。
  • bfs(start):从start节点开始进行广度优先搜索。
python">from collections import defaultdict, dequeclass Graph:def __init__(self):self.graph = defaultdict(list)def add_edge(self, u, v):self.graph[u].append(v)self.graph[v].append(u)def dfs(self, start):visited = set()self._dfs(start, visited)return visiteddef _dfs(self, node, visited):if node not in visited:visited.add(node)for neighbor in self.graph[node]:self._dfs(neighbor, visited)def bfs(self, start):visited = set()queue = deque([start])visited.add(start)while queue:node = queue.popleft()for neighbor in self.graph[node]:if neighbor not in visited:visited.add(neighbor)queue.append(neighbor)return visited# 测试代码
g = Graph()
g.add_edge(1, 2)
g.add_edge(1, 3)
g.add_edge(2, 4)
g.add_edge(3, 4)
g.add_edge(4, 5)
print(g.dfs(1))  # 输出: {1, 2, 3, 4, 5}
print(g.bfs(1))  # 输出: {1, 2, 3, 4, 5}

这些题目涵盖了栈、队列、二叉搜索树、链表和图的基本操作,通过编写这些代码,你可以很好地练习和巩固数据结构的基本概念和应用。


http://www.ppmy.cn/news/1475275.html

相关文章

虚幻引擎ue5如何调节物体锚点

当发现锚点不在物体上时&#xff0c;如何调节瞄点在物体上。 步骤1&#xff1a;按住鼠标中键拖动锚点&#xff0c;在透视图中多次调节锚点位置。 步骤2:在物体上点击鼠标右键点击-》锚定--》“设置为枢轴偏移”即可。

2974.最小数字游戏

1.题目描述 你有一个下标从 0 开始、长度为 偶数 的整数数组 nums &#xff0c;同时还有一个空数组 arr 。Alice 和 Bob 决定玩一个游戏&#xff0c;游戏中每一轮 Alice 和 Bob 都会各自执行一次操作。游戏规则如下&#xff1a; 每一轮&#xff0c;Alice 先从 nums 中移除一个 …

机器学习扫盲:优化算法、损失函数、评估指标、激活函数、网络架构

专栏介绍 1.专栏面向零基础或基础较差的机器学习入门的读者朋友,旨在利用实际代码案例和通俗化文字说明,使读者朋友快速上手机器学习及其相关知识体系。 2.专栏内容上包括数据采集、数据读写、数据预处理、分类\回归\聚类算法、可视化等技术。 3.需要强调的是,专栏仅介绍主…

MySQL8之mysql-community-server-debug的作用

mysql-community-server-debug是MySQL社区服务器的一个调试版本&#xff0c;它主要用于开发和调试MySQL数据库服务器。与标准的MySQL社区服务器版本相比&#xff0c;调试版本包含了额外的调试信息和工具&#xff0c;以帮助开发人员和数据库管理员诊断和解决MySQL服务器中的问题…

npm发布的包如何快速在cnpm上使用

npm发布的包如何快速在cnpm上使用 解决方案 前往淘宝npm镜像官网 搜索插件库并点击同步 等待一分钟即可查看最新版本

9.5 栅格图层符号化多波段彩色渲染

文章目录 前言多波段彩色渲染QGis设置为多波段彩色二次开发代码实现多波段彩色 总结 前言 介绍栅格图层数据渲染之多波段彩色渲染说明&#xff1a;文章中的示例代码均来自开源项目qgis_cpp_api_apps 多波段彩色渲染 以“3420C_2010_327_RGB_LATLNG.tif”数据为例&#xff0c…

等保测评新趋势:应对数字化转型中的安全挑战

随着信息技术的飞速发展&#xff0c;数字化转型已成为企业提升竞争力、优化运营效率的重要手段。然而&#xff0c;这一转型过程中&#xff0c;企业也面临着前所未有的安全挑战。等保测评&#xff08;信息安全等级保护测评&#xff09;作为保障信息系统安全的重要手段&#xff0…

Python爬虫教程第5篇-使用BeautifulSoup查找html元素几种常用方法

文章目录 简介find()和find_all()字符串通过id查找通过属性查找通过.方式查找通过CSS选择器查找通过xpath查找正则表达自定义方法总结 简介 上一篇详细的介绍了如何使用Beautiful Soup的使用方法&#xff0c;但是最常用的还是如何解析html元素&#xff0c;这里再汇总介绍下查询…

C# modbus验证

窗体 还有添加的serialPort控件串口通信 设置程序配置 namespace CRC {public static class CRC16{/// <summary>/// CRC校验&#xff0c;参数data为byte数组/// </summary>/// <param name"data">校验数据&#xff0c;字节数组</param>///…

SpringBoot新手快速入门系列教程十一:基于Docker Compose部署一个最简单分布式服务项目

我的教程都是亲自测试可行才发布的&#xff0c;如果有任何问题欢迎留言或者来群里我每天都会解答。 如果您还对于Docker或者Docker Compose不甚了解&#xff0c;可以劳烦移步到我之前的教程&#xff1a; SpringBoot新手快速入门系列教程九&#xff1a;基于docker容器&#xff…

ZGC的流程图

GC标记过程 1、初始标记 扫描所有线程栈的根节点&#xff0c;然后再扫描根节点直接引用的对象并进行标记。这个阶段需要停顿所有的应用线程&#xff08;STW&#xff09;&#xff0c;但由于只扫描根对象直接引用的对象&#xff0c;所以停顿时间很短。停顿时间高度依赖根节点的数…

14-47 剑和诗人21 - 2024年如何打造AI创业公司

​​​​​ 2024 年&#xff0c;随着人工智能继续快速发展并融入几乎所有行业&#xff0c;创建一家人工智能初创公司将带来巨大的机遇。然而&#xff0c;在吸引资金、招聘人才、开发专有技术以及将产品推向市场方面&#xff0c;人工智能初创公司也面临着相当大的挑战。 让我来…

LDAPWordlistHarvester:基于LDAP数据的字典生成工具

关于LDAPWordlistHarvester LDAPWordlistHarvester是一款功能强大的字典列表生成工具&#xff0c;该工具可以根据LDAP中的详细信息生成字典列表文件&#xff0c;广大研究人员随后可以利用生成的字典文件测试目标域账号的非随机密码安全性。 工具特征 1、支持根据LDAP中的详细信…

利用宝塔安装一套linux开发环境

更新yum&#xff0c;并且更换阿里镜像源 删除yum文件 cd /etc/yum.repos.d/ 进入yum核心目录 ls sun.repo rm -rf * 删除之前配置的本地源 ls 配置阿里镜像源 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 配置扩展包 wge…

DP(3) | 0-1背包 | Java | 卡码 46 LeetCode 416 做题总结

代码随想录笔记 AcWing-背包九讲专题 一道例题 dd大牛背包9讲 背包笔记 对于面试的话&#xff0c;其实掌握01背包&#xff0c;和完全背包&#xff0c;就够用了&#xff0c;最多可以再来一个多重背包。 01背包&#xff1a;n种物品&#xff0c;每种物品只有 1 个&#xff0c;每…

FFmpeg——视频拼接总结

最近需要做一个关于视频拼接的内容&#xff0c;需要将两个视频合成一个视频&#xff0c;使用opencv的话需要将视频读上来然后再写到文件了&#xff0c;这个会很消耗时间也没有必要。两个视频的编码格式是一样的&#xff0c;并不需要转码操作所以想法是直接将视频流补到后面&…

vue3使用Echarts图表生成项目进度甘特图

先看效果 代码展示 <template><h1>项目进度甘特图</h1><div id"app"><!-- Echarts 图表 --><div ref"progressChart" class"progressChart"></div></div> </template><script setup&…

Xcode Playgrounds:探索Swift编程的交互式乐园

Xcode Playgrounds&#xff1a;探索Swift编程的交互式乐园 Xcode是苹果公司为macOS开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了一套完整的工具集&#xff0c;用于开发macOS、iOS、watchOS和tvOS应用。在Xcode中&#xff0c;Playgrounds是一个革命性的…

C++中的RTTI(运行时类型识别)的定义

C中的RTTI&#xff08;Runtime Type Identification&#xff0c;运行时类型识别&#xff09;是一种机制&#xff0c;它允许程序在运行时确定对象的实际类型。这是C语言为了支持面向对象编程中的多态性而提供的一个重要特性。RTTI主要通过两个运算符实现&#xff1a;typeid和dyn…

Mac M1安装配置Hadoop+Flink SQL环境

Flink 1.18.1 Hadoop 3.4.0 一、准备工作 系统&#xff1a;Mac M1 (MacOS Sonoma 14.3.1) JDK&#xff1a;jdk1.8.0_381 &#xff08;注意&#xff1a;尽量一定要用JDK8&#xff0c;少用高版本&#xff09; Scala&#xff1a;2.12 JDK安装在本机的/opt/jdk1.8.0_381.jdk/C…