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

news2024/9/27 21:21:29

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

目录

    • 数据结构实操代码题
      • 题目一:实现栈(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}

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

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

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

相关文章

Gitlab CI/CD介绍

基本概念 GitLab CI/CD&#xff08;持续集成/持续部署&#xff09;流水线是GitLab平台提供的一项强大功能&#xff0c;旨在通过自动化构建、测试和部署过程&#xff0c;提高开发团队的效率和软件发布的质量。 CI&#xff08;Continuous Integration&#xff09;&#xff1a;持续…

【驱动篇】龙芯LS2K0300之spi设备驱动

实验介绍 GC9A01是一款小巧&#xff08;1.28寸&#xff09;、彩色&#xff08;分辨率为 240 * 240 RGB&#xff09;圆形TFT屏幕&#xff0c;它采用4线 SPI的控制方式&#xff0c;电源供电电压为3.3V&#xff0c;有7个控制引脚&#xff1b;本次实验将使用它来验证龙芯SOC的SPI通…

从汇编层看64位程序运行——程序中的栈(Stack)结构及其产生的历史原因

大纲 传统栈程序栈X86体系栈反向的原因参考资料 如果要讲程序在系统层的运行&#xff0c;一个绕不开的名词就是“栈”。所以深入理解“栈”是这个系列重要的基础。本文也将深入浅出&#xff0c;只讲明白程序运行中使用的栈是什么。 传统栈 有计算机基础的同学都知道栈的特点&…

开源浏览器引擎对比与适用场景:WebKit、Chrome、Gecko

WebKit与Chrome的Blink引擎对比 起源与关系&#xff1a; WebKit最初由苹果公司开发&#xff0c;用于Safari浏览器。后来&#xff0c;WebKit逐渐成为一个独立的开源项目&#xff0c;被多个浏览器厂商采用。Blink是Google基于WebKit项目分支出来的一个浏览器引擎&#xff0c;用于…

实现Android夜间模式主题:从入门到精通

实现Android夜间模式主题:从入门到精通 随着用户对夜间模式的需求越来越高,Android开发者需要掌握如何在应用中实现夜间模式。本文将详细介绍在Android中实现夜间模式的步骤,包括配置、实现、以及一些最佳实践,帮助开发者创建更具吸引力和用户友好的应用。 夜间模式的优势…

文献翻译与阅读《Integration Approaches for Heterogeneous Big Data: A Survey》

CYBERNETICS AND INFORMATION TECHNOLOGIES’24 论文原文下载地址&#xff1a;原文下载 目录 1 引言 2 大数据概述 3 大数据的异构性 4 讨论整合方法 4.1 大数据仓库&#xff08;BDW&#xff09; 4.2 大数据联盟&#xff08;BDF&#xff09; 5 DW 和 DF 方法的比较、分…

逻辑回归中的损失函数

目录 一、损失函数介绍&#xff1a;二、简化上述损失函数&#xff1a; 一、损失函数介绍&#xff1a; 与回归问题成本函数不同的是&#xff0c;逻辑回归模型&#xff08;解决分类问题&#xff09;的成本函数在获得损失J的时候不再用真实值y与预测值y^的差值计算损失&#xff0…

adminPage-vue3依赖FormPage说明文档,表单页快速开发,使用思路及范例(Ⅱ)formConfig基础配置项

adminPage-vue3依赖FormPage说明文档&#xff0c;表单页快速开发&#xff0c;使用思路及范例&#xff08;Ⅱ&#xff09;formConfig配置项 属性: formConfig&#xff08;表单项设置&#xff09;keylabelnoLabeldefaultValuebindchildSlottypeString类型数据&#xff08;除 time…

探索GitHub上的两个革命性开源项目

在数字世界中&#xff0c;总有一些项目能够以其创新性和实用性脱颖而出&#xff0c;吸引全球开发者的目光。今天&#xff0c;我们将深入探索GitHub上的两个令人惊叹的开源项目&#xff1a;Comic Translate和GPTPDF&#xff0c;它们不仅改变了我们处理信息的方式&#xff0c;还极…

为什么说https访问是网站的标配

在互联网时代&#xff0c;数据安全和隐私保护成为了不可忽视的重要议题。随着网络攻击、数据泄露等事件频发&#xff0c;用户对在线活动的安全性要求越来越高。HTTPS协议作为HTTP协议的加密版本&#xff0c;已经成为现代网站的标配&#xff0c;其重要性和必要性不言而喻。下面从…

【数据结构】初探数据结构面纱:栈和队列全面剖析

【数据结构】初探数据结构面纱&#xff1a;栈和队列全面剖析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;数据结构 文章目录 【数据结构】初探数据结构面纱&#xff1a;栈和队列全面剖析前言一.栈1.1栈的概念及结构1.2栈的结构选择1.3栈的…

Xilinx FPGA:vivado fpga与EEPROM的IIC通信,串口显示数据,含使用debug教程

一、实验要求 实现FPGA与EEPROM的通信&#xff0c;要求FPGA对EEPROM实现先“写”后“读”&#xff0c;读出的值给uart发送端并显示到电脑上&#xff0c;按下按键1让fpga对EEPROM写入数据&#xff1b;按下按键2让fpga读出对EEPROM写入过的数据。 二、信号流向图 三、程序设计 …

Spring-Spring、IoC、DI、注解开发

1、Spring是什么 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。 Spring整体架构 Spring优点&#xff1a; Spring属于低侵入设计。IOC将对象之间的依赖关系交给Spring,降低组件之间的耦合&#xff0c;实现各个层之间的解耦&#xff0c;让我们更专注于业务…

Day1每日编程题日记:数字统计、两个数组的交集、点击消除

前言&#xff1a;该篇用于记录自看。曾回看昨天的做题代码&#xff0c;竟然会觉得陌生&#xff0c;这竟然是我写的&#xff0c;细细读了一下&#xff0c;原来我当时是这么想的。因此我觉得记代码没有实际用处&#xff0c;重点是领悟了思想&#xff0c;这样子代码就在心中&#…

怎样将aac转换mp3格式?推荐四个aac转MP3的方法

怎样将aac转换mp3格式&#xff1f;当需要将aac格式音频转换为MP3格式时&#xff0c;有几种方法可以轻松实现这一目标。MP3是一种广泛支持的音频格式&#xff0c;几乎所有设备和平台都能播放MP3文件&#xff0c;包括各种音乐播放器、手机、平板电脑和汽车音响系统。而且它也提供…

MQTT协议网关解决方案及实施简述-天拓四方

MQTT协议网关是一个中间件&#xff0c;负责接收来自不同MQTT客户端的消息&#xff0c;并将这些消息转发到MQTT服务器&#xff1b;同时&#xff0c;也能接收来自MQTT服务器的消息&#xff0c;并将其转发给相应的MQTT客户端。MQTT协议网关的主要功能包括协议转换、消息过滤、安全…

YOLOv10改进 | 主干/Backbone篇 | 利用RT-DETR特征提取网络PPHGNetV2改进YOLOv10

一、本文介绍 本文给大家带来利用RT-DETR模型主干HGNet去替换YOLOv10的主干&#xff0c;RT-DETR是今年由百度推出的第一款实时的ViT模型&#xff0c;其在实时检测的领域上号称是打败了YOLO系列&#xff0c;其利用两个主干一个是HGNet一个是ResNet&#xff0c;其中HGNet就是我们…

会声会影分割音频怎么不能用 会声会影分割音频方法 会声会影视频制作教程 会声会影下载免费中文版2023

将素材中的音频分割出来&#xff0c;对声音部分进行单独编辑&#xff0c;是剪辑过程中的常用操作。会声会影视频剪辑软件在分割音频后&#xff0c;还可以对声音素材进行混音编辑、音频调节、添加音频滤镜等操作。有关会声会影分割音频怎么不能用&#xff0c;会声会影分割音频方…

加密软件|让数据传输更安全

加密软件在当今数字化时代扮演着至关重要的角色&#xff0c;它们通过先进的加密算法和技术&#xff0c;确保数据在存储、传输和分享过程中的安全性&#xff0c;从而保护个人隐私和企业机密。一、加密软件的基本作用数据加密&#xff1a;加密软件通过应用复杂的加密算法&#xf…

回归树模型

目录 一、回归树模型vs决策树模型&#xff1a;二、回归树模型的叶结点&#xff1a;三、如何决定每个非叶结点上的特征类型&#xff1a; 本文只介绍回归树模型与决策树模型的区别。如需了解完整的理论&#xff0c;请看链接&#xff1a;决策树模型笔记 一、回归树模型vs决策树模…