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

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

目录

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

在这里插入图片描述

数据结构实操代码题

题目一:实现栈(Stack)

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

  • push(x):将元素x压入栈中。
  • pop():移除并返回栈顶元素。
  • top():返回栈顶元素。
  • is_empty():判断栈是否为空。
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 None

    def top(self):
        if not self.is_empty():
            return self.items[-1]
        else:
            return None

    def 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():判断队列是否为空。
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 None

    def front(self):
        if not self.is_empty():
            return self.items[0]
        else:
            return None

    def 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():中序遍历二叉树。
class TreeNode:
    def __init__(self, key):
        self.left = None
        self.right = None
        self.val = key

class BinarySearchTree:
    def __init__(self):
        self.root = None

    def 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 None
        if 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):获取指定位置的元素。
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, x):
        if not self.head:
            self.head = ListNode(x)
        else:
            current = self.head
            while current.next:
                current = current.next
            current.next = ListNode(x)

    def insert(self, index, x):
        if index == 0:
            new_node = ListNode(x)
            new_node.next = self.head
            self.head = new_node
        else:
            current = self.head
            for _ in range(index - 1):
                if current is None:
                    return
                current = current.next
            if current is None:
                return
            new_node = ListNode(x)
            new_node.next = current.next
            current.next = new_node

    def delete(self, index):
        if self.head is None:
            return
        if index == 0:
            self.head = self.head.next
        else:
            current = self.head
            for _ in range(index - 1):
                if current is None:
                    return
                current = current.next
            if current is None or current.next is None:
                return
            current.next = current.next.next

    def get(self, index):
        current = self.head
        for _ in range(index):
            if current is None:
                return None
            current = current.next
        return 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节点开始进行广度优先搜索。
from collections import defaultdict, deque

class 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 visited

    def _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}

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

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

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

相关文章

LayoutLMv2:视觉丰富文档理解的多模态预训练

文本和布局的预训练由于其有效的模型架构和大规模未标记扫描/数字出生文档的优势&#xff0c;在各种视觉丰富的文档理解任务中被证明是有效的。我们提出了具有新的预训练任务的LayoutLMv2架构&#xff0c;以在单个多模态框架中对文本、布局和图像之间的交互进行建模。具体而言&…

网络编程学习之tcp

按下*&#xff08;星号&#xff09;可以搜索当前光标下的单词。 Tcp编程的过程 打开网络设备 Bind&#xff1a;给服务地址把ip号和端口号连接进去 Tcp是有状态的 Listen是进入监听状态&#xff0c;看有没有客户端来连接服务器 Tcp比udp消耗过多资源 Upd类似于半双工&#…

Qt图形与图片(Qt位置相关函数、Qt基础图形的绘制、双缓冲机制、显示SVG格式图片)

此篇文章介绍几种主要位置函数及其之间的区别&#xff0c;以及各种与位置相关函数的使用场合&#xff1b;然后&#xff0c;通过一个简单绘图工具实例&#xff0c;介绍利用QPainter和QPainterPath两种方法绘制各种基础图形&#xff1b;最后&#xff0c;通过几个实例介绍如何利用…

Golang | Leetcode Golang题解之第230题二叉搜索树中第K小的元素

题目&#xff1a; 题解&#xff1a; type MyBst struct {root *TreeNodenodeNum map[*TreeNode]int // 统计以每个结点为根结点的子树的结点数&#xff0c;并存储在哈希表中 }// 统计以 node 为根结点的子树的结点数 func (t *MyBst) countNodeNum(node *TreeNode) int {if…

达梦数据库dm8安装步骤及迁移

目录 前言: 一、安装部署 1、下载 2、创建用户及安装目录 3、挂载下载的镜像 4、环境配置 5、安装 二、基本使用 1、DM工具使用 2、兼容性配置 2.1 兼容GBK字符集编码 2.2 兼容UTF-8字符集编码 3、创建用户和密码,表空间 4、整理数据库配置 5、启动脚本设置 …

基于YOLOV8的数粒机视觉计数解决方案

一:行业背景调查 随着全球市场商品大规模工业化生产技术的大规模发展,其中对各类产品生产包装以及原材料供给有了更多精准计数的要求,这些要求主要分布在一些产量较大,产品颗粒较小,单个成本较高的商品中,近几年主要从医药包装领域和接插件包装领域开始对产品包装中的计…

ENSP实现防火墙区域策略与用户管理

目录 实验拓扑与要求​编辑 交换机与防火墙接口的配置 交换机&#xff1a; 创建vlan 接口配置 防火墙配置及接口配置 防火墙IP地址配置 云配置​编辑​编辑​编辑 在浏览器上使用https协议登陆防火墙&#xff0c;并操作 访问网址&#xff1a;https://192.168.100.1:844…

弥合人类与人工智能的知识差距:AlphaZero 中的概念发现和迁移(1)

文章目录 一、摘要二、简介三、相关工作3.1 基于概念的解释3.2 强化学习中生成解释3.3 国际象棋与人工智能 四、什么是概念&#xff1f;五、发掘概念5.1 挖掘概念向量5.1.1 静态概念的概念约束5.1.2 动态概念的概念约束 5.2 过滤概念 一、摘要 人工智能&#xff08;AI&#xff…

2023年全国大学生电子信息竞赛E题——自动追踪系统(stm32和openmv+普通舵机)完美解决第四问

当时做的时候&#xff0c;当时看别人开源的23年的题&#xff0c;感觉一头雾水。两个字没思路。确实只有做了才会有思路。我这里清晰的整理出来思路。 1.第一问的复位问题就是写一个函数&#xff0c;如果按键按下&#xff0c;就进入&#xff0c;再按下就退出 当然这个复位是写死…

git提交大文件服务500

错误如图 需保证git服务端能接收大文件 修改项目下.git文件中的config文件&#xff0c;加入 [http] postBuffer 524288000

Mybatis——增删改查

目录 一、准备工作 二、mybatis——新增 三、mybatis——删除 四、mybatis——更新 五、mybatis——查询 六、XML映射文件 一、准备工作 1.准备一个数据库表 2.创建一个新的springboot工程&#xff0c;选择引入对应的起步依赖&#xff08;Mybatis、mybatis等&#xff09…

C:数据结构---算法

1.1排序算法 稳定排序 不稳定排序 ①冒泡排序&#xff08;稳定&#xff09; 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。对每一对相邻元素作同样的工作&#xff0c;从开始第一对到结尾的最后一对 ②选择排序 在未排序序列中找到最小&#xff08;大…

一文入门【NestJs】Providers

Nest学习系列 ✈️一文入门【NestJS】 ✈️一文入门【NestJs】Controllers 控制器 &#x1f6a9; 前言 在NestJS的世界里&#xff0c;理解“Providers”是构建健壮、可维护的后端服务的关键。NestJS&#xff0c;作为Node.js的一个现代框架&#xff0c;采用了Angular的一些核…

【Dison夏令营 Day 16】如何使用 Python 中的 PyGame 制作俄罗斯方块游戏

俄罗斯方块(Tetris)是一款经典的益智游戏&#xff0c;游戏的目的是将落下的几何图形片&#xff08;称为 “俄罗斯方块”&#xff09;排列起来&#xff0c;填满水平线&#xff0c;不留空隙。当一条线被完全填满时&#xff0c;它就被清除了&#xff0c;玩家就能获得分数。随着四角…

【企业级监控】源码部署Zabbix与监控主机

Zabbix企业级分布式监控 文章目录 Zabbix企业级分布式监控资源列表基础环境一、LNMP环境搭建&#xff08;在zbx主机上&#xff09;1.1、配置Yum仓库1.1.1、下载阿里云的仓库文件1.2.2、安装PHP7的仓库1.2.3、生成Mariadb10.11的仓库文件1.2.4、快速重建Yum缓存 1.2、安装PHP7.4…

小巧低调的黑盒子,打造个性化音乐体验,欧尼士ONIX Alpha小尾巴上手

欧尼士ONIX的产品很有辨识度&#xff0c;这家来自英国的品牌&#xff0c;有着鲜明的黑金设计色彩&#xff0c;以及低调奢华的质感&#xff0c;当然最重要的是&#xff0c;欧尼士的音质表现非常出色&#xff0c;因此深受音乐爱好者的喜爱。在以手机等设备为载体的流媒体音乐盛行…

uniapp中使用uni-ui组件库

src目录下新建components目录从uni-ui引入对应的组件目录&#xff0c;如下图 直接使用组件&#xff0c;demo <template><view id"my" data-name"王五" data-age"18">my页面</view><uni-data-select :localdata"local…

WebDriver与浏览器通信的深度剖析与探索

在自动化测试的世界里&#xff0c;WebDriver无疑是连接测试脚本与浏览器之间的桥梁&#xff0c;它让复杂的自动化测试成为可能。本文将深入探讨WebDriver与浏览器之间的通信机制&#xff0c;揭示它们之间如何协同工作&#xff0c;以及这一过程中涉及的关键技术和挑战。 一、We…

sqlmap使用之-post注入、head注入(ua、cookie、referer)

1、post注入 1.1、方法一&#xff0c;通过保存数据包文件进行注入 bp抓包获取post数据 将数据保存到post.txt文件 加上-r指定数据文件 1.2、方法二、通过URL注入 D:\Python3.8.6\SQLmap>python sqlmap.py -u "http://localhost/login.php" --data "userna…

2024年06月CCF-GESP编程能力等级认证C++编程三级真题解析

本文收录于专栏《C等级认证CCF-GESP真题解析》&#xff0c;专栏总目录&#xff1a;点这里。订阅后可阅读专栏内所有文章。 一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级&…