【Hello Algorithm】基础数据结构

news2024/12/24 8:22:14

作者:@小萌新
专栏:@算法
作者简介:大二学生 希望能和大家一起进步
本篇博客简介:介绍几种基础数据结构

基础数据结构

  • 单链表结构
    • 翻转单链表
    • 删除节点
  • 双链表
  • 栈和队列
    • 用栈实现队列
    • 用队列实现栈
  • 哈希表

单链表结构

在阅读这篇文章之前大家要对于单链表结构做一个详细的了解

关于单链表结构大家可以参考我的这篇文章

单链表

这里直接讲解关于单链表的两道题目来加深下同学们对于单链表的理解

翻转单链表

该题目来自lc206题 题目和描述如下

在这里插入图片描述

给我们一个单链表的头节点 要求我们翻转整个单链表

解析:

对于这道题来说并没有过多的考查我们的算法能力 它想要考查的应该是我们对于单链表的熟悉程度 以及coding能力

思路也很简单 我们设计三个指针 一个指针指向当前要翻转的节点 一个指针指向当前要翻转节点的前一个节点 一个指针指向要翻转节点的下一个节点

翻转完毕之后两个指针前进一次 直到翻转到单链表末尾为止

代码表示如下

class Solution {
public:
    ListNode* reverseList(ListNode* head) 
    {
        if (head == nullptr)
        {
            return nullptr;
        }

        ListNode* prev = nullptr;
        ListNode* cur = head;
        ListNode* next = head;

        while (next)
        {
            next = next->next;

            cur->next = prev;

            prev = cur;
            cur = next;
        }

        return prev;
    }
};

如果说这道题目有什么需要注意的地方的话就是注意空指针的引用问题

我们要对next指针判定非空之后才能让它指向下一个位置

运行结果如下

在这里插入图片描述

删除节点

改题目来自lc的剑指offer18题 题目和描述如下

在这里插入图片描述

我们首先要考虑的是要删除的值是否为头节点

  • 如果是头节点 我们返回头节点的值就要变化
  • 如果不是头节点正常删除即可

由于题目中交代了我们不需要使用freee或者是delete来删除节点 所以说我们直接改变指针指向从而来改变这个单链表的结构就好了

代码表示如下

class Solution {
public:
    ListNode* deleteNode(ListNode* head, int val) 
    {
        // head -> val == val
        while (head != nullptr && head->val == val)
        {
            head = head->next; 
        }

        if (head == nullptr)
        {
            return nullptr;
        }

        ListNode* prev = head;
        ListNode* cur = head->next;

        while(cur)
        {
            if (cur -> val == val)
            {
                prev->next = cur->next;
                cur = cur->next;
            }
            else
            {
                prev = cur;
                cur = cur->next;
            }
        }

        return head;
    }
};

运行结果如下

在这里插入图片描述

双链表

关于双链表结构我们可以认为就是单链表结构加上了一个向前指向的指针 这样子在在链表的任意节点就既可以向前又可以向后了

关于双链表结构不熟悉的同学可以参考我的这篇博客

带头双向链表

双链表的coding其实和单链表差不多 因为这一片博客是为了让大家了解下基础的数据结构 这里就不过多赘述了

栈和队列

关于栈和队列数据结构不了解的同学可以参考我的这篇博客

栈和队列

简单来说 栈是一个后进先出的数据结构 队列是一个先进先出的数据结构

下面是几道题让大家更了解栈和队列这两种数据结构

用栈实现队列

该题目出自lc232题目 题目和描述如下

在这里插入图片描述

题目要求让我们使用两个栈来实现一个队列 该题目博主在自己之前的博客中已经做过详细的讲解了 大家可以跳转到具体的博客学习

两个栈实现队列

用队列实现栈

同样这 这个题目的要求是让我们使用两个队列来实现一个栈 这个题目博主在之前的博客中也讲解过了 大家可以跳转到具体的博客学习

两个队列实现栈

哈希表

在C++中的map有两个 它们的底层分别是红黑树和哈希表

如果我们想要使用红黑树来定义一个map 我们可以这么做

map<T, T> M;

如果我们想要使用哈希表来定义一个map 我们可以这么做

unordered_map<T , T> M;

关于这两个数据结构的具体用法可以参考这两篇博客

map和set

unordered_map和unordered_set

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

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

相关文章

GLM-130B-一个开放的双语通用预训练模型-论文精读

本文为作为类ChatGPT的模型ChatGLM的前期基础论文2《AN OPEN BILINGUAL PRE-TRAINED MODEL》的精读笔记&#xff0c;基础论文1的精读笔记请见《GLM论文精读-自回归填空的通用语言模型》。希望对大家有帮助&#xff0c;欢迎讨论交流。GLM-130B&#xff0c;主要思想概述&#xff…

Android 签名文件

签名文件相关 一、为什么需要签名&#xff1f;二、创建签名文件2.1、使用AS新建签名文件2.2、使用 keytool 新建签名文件 三、签名串改参考地址 一、为什么需要签名&#xff1f; Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中&#xff0c;也就是…

YooAsset | Unity资源管理方案

跳转官方仓库地址 一、说明 可空包、可首包DLC、可满足限制包体的需求、可玩家自己制作MOD上传到服务器、可分工程构建&#xff1b;支持内置渲染管线、可编程渲染管线&#xff1b;支持完整路径、可寻址资源定位&#xff1b;基于标签打包&#xff0c;自动分析冗余&#xff0c;基…

MongoDB 查询文档中使用$expr、$where选择器

之前我们介绍过使用比较选择器、逻辑选择器、元素选择器、数组选择器查询文档&#xff0c;如果您需要进一步了解&#xff0c;可以参考&#xff1a; MongoDB 查询文档中使用比较选择器、逻辑选择器https://blog.csdn.net/m1729339749/article/details/129965699MongoDB 查询文档…

【Ubuntu20.04】ROS noetic的g2o与系统g2o冲突问题

文章目录 0.问题描述1.问题原因2.解决方法2.1.方法12.1.方法2 3.成功效果 0.问题描述 \qquad 从github安装2023版本的g2o时&#xff0c;若ROS也安装了g2o&#xff0c;则会在编译时触发运行时冲突。具体表现为段错误&#xff0c;如若需要排查是否为ROS的g2o导致&#xff0c;则需…

MySQL:存储过程与函数、视图

一、学习目标 掌握如何创建存储过程掌握如何创建存储函数熟悉变量的使用方法熟悉如何定义条件和处理程序了解光标的使用方法掌握流程控制的使用掌握如何调用存储过程和函数熟悉如何查看存储过程和函数掌握修改存储过程和函数的方法熟悉如何删除存储过程和函数掌握创建存储过程…

知识推理——CNN模型总结(一)

记录一下我看过的利用CNN实现知识推理的论文。 最后修改时间&#xff1a;2023.05.12 目录 1.ConvE 1.1.解决的问题 1.2.优势 1.3.贡献与创新点 1.4.方法 1.4.1 为什么用二维卷积&#xff0c;而不是一维卷积&#xff1f; 1.4.2.ConvE具体实现 1.4.3.1-N scoring 1.5.…

TiDB x CAPCOM | 为在线游戏提供灵活、可靠、可扩展的数据库服务

通过 TiDB 连接全球极限场景和创新场景&#xff0c;是 PingCAP 长期坚持的国际化战略。目前&#xff0c;在全球已有超过 3000 家企业选择 TiDB。无论在游戏、金融、物流、互联网还是智能制造等行业&#xff0c;基于规模化 OLTP 扩容、实时 HTAP 分析等应用场景&#xff0c;Ping…

在idea工具下,使用protobuf自动生成java代码,超详细教程

新项目需要使用google protobuf 生成java代码 开始第一步&#xff0c;网上很多教程都说下载protobuf support插件&#xff0c;但是我下载了很多idea版本&#xff0c;就是找不到这个protobuf support 插件 在idea 中选择file ->settings ->plugin , 搜索protobuf,一般都…

[SWPUCTF] 2021新生赛之Crypto篇刷题记录(11)

[SWPUCTF] 2021新生赛之Crypto篇刷题记录① [SWPUCTF 2021 新生赛]crypto6[SWPUCTF 2021 新生赛]ez_caesar[SWPUCTF 2021 新生赛]crypto10[SWPUCTF 2021 新生赛]pigpig[SWPUCTF 2021 新生赛]traditional NSSCTF平台&#xff1a;https://www.nssctf.cn/ PS&#xff1a;记得所有…

渤海银行有点火,李伏安有点烦

文丨新熔财经 作者丨向雪徊 5月8日&#xff0c;大连银保监局连开七份罚单&#xff0c;处罚对象为渤海银行股份有限公司大连分行及相关责任人。 大银保监罚决字〔2023〕27号显示&#xff0c;渤海银行大连分行存在五项主要违法事实&#xff1a;一是未执行统一授信&#xff1b;…

【敬伟ps教程】套索、魔棒工具、快速选择工具、选区的编辑和调整

文章目录 套索工具自由套索多边形套索磁性套索工具 魔棒工具快速选择工具选区的编辑和调整 套索工具 自由套索 套索工具的用法&#xff0c;点击鼠标左键拖动鼠标建立选区。当选区没闭合时&#xff0c;松开鼠标会自动闭合选区。套索工具灵活快速但不够准确。套索工具的选项栏是…

拥有Type-C接口的显示器上 绝大多数人都不知这么大作用

大多数的数码爱好者认识Type-C接口&#xff0c;估计都是从2015年的安卓手机开始的。 但估计不少用户不知道的是&#xff0c;电脑端的显示器上也有Type-C接口。 如果你是一个刚入门想买显示器的朋友&#xff0c;下面可以分别看看显示器最常见的几种接口的介绍&#xff0c;结合你…

Sentinel 入门使用

目录 一. Sentinel简介1.1Sentinel简介1.2 Sentinel与Hystrix的区别1.3 名词解释 二. sentinel控制台2.1 下载启动控制台2.3 客户端接入控制台2.4 Rest整合Sentinel2.5 Feign 整合Sentinel 想了解Sentinel具体的使用规则就点这里呀&#xff01;&#xff01;&#xff01; 一. Se…

FISCO BCOS v3.3.0发布,新增块内分片技术,单链性能突破10万TPS

FISCO BCOS开源社区一贯秉承开源、开放、联合共建的原则&#xff0c;致力于链接社区力量将FISCO BCOS打造成更加完美的区块链底层平台。 作为FISCO BCOS开源社区重要的发起者和推动者&#xff0c;微众区块链持续参与开源生态共建。在社区通力协作下&#xff0c;FISCO BCOS v3.…

【Linux】RK3399平台开发系列——设备树的学习笔记

学习内容 RK3399平台开发系列讲解&#xff08;设备树篇&#xff09;设备树的详解 - 视频介绍 简介 设备树&#xff08;Device Tree&#xff09;是用于描述硬件设备和系统关系的树形数据结构&#xff0c;主要用于 Linux 操作系统中的设备驱动程序。在嵌入式系统中&#xff0c…

ARM和X86、X86和X64、Intel和AMD、CPU和GPU介绍

一、ARM和X86 X86 和 ARM 都是CPU设计的一个架构。X86 用的是复杂指令集。ARM用的是精简指令集。 指令集其实就是机器码&#xff0c;机器码上是汇编&#xff0c;汇编之上是程序语言例如java、c、c#。 复杂指令集是在硬件层面上设计了很多指令&#xff0c;所以编程会简单些。 精…

ChatGLM是什么?ChatGLM和ChatGPT有什么区别?

ChatGLM是什么&#xff1f; ChatGLM是清华技术成果转化的公司智谱AI研发的支持中英双语的对话机器人。ChatGLM基于GLM130B千亿基础模型训练&#xff0c;它具备多领域知识、代码能力、常识推理及运用能力&#xff1b;支持与用户通过自然语言对话进行交互&#xff0c;处理多种自…

IS210WSVOH1AE直流发电机的种类 ? 直流发电机中换向器的用途

​ IS210WSVOH1AE直流发电机的种类 ? 直流发电机中换向器的用途 什么是直流发电机 通过使用直流发电机&#xff0c;我们可以发电&#xff0c;发电机 4个作用是将机械能转化为电能。直流发电机主要用于特殊应用或本地发电&#xff0c;直流发电机的运行特性非常重要&#xff0c;…

企业快递管理软件使用教程

想要分析企业快递管理软件的作用&#xff0c;首先要明白&#xff0c;企业快递管理的大致情况&#xff0c;以及面临的难题是什么&#xff1f; 随着经济的发展&#xff0c;以及快递行业的不断前行。因公寄件早已成了企业运作必不可少的环节之一&#xff0c;试问哪家企业没有寄递…