算法提升 (三)基础数据结构

news2024/12/26 21:53:52

作者:@小萌新
专栏:@算法提升
作者简介:大二学生 希望能够和大家一起进步!
内容简介:简单介绍基本数据结构的简单面试题
在这里插入图片描述
不负韶华

链表

阅读这篇文章之前需要有初阶数据结构的基础

关于链表的结构如果还有不了解的同学可以参考下我的这篇文章

链表的详细介绍

1. 反转单链表

给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。

这个题目在算法方面其实没有太多的技巧

主要是锻炼下我们的coding能力

我们来看图

在这里插入图片描述

单次的操作大概是这样子的

我们将当前的指针指向前面一个指针 这样子操作就完成啦

后面其实就是迭代操作

prev到pos位置

pos到next位置

next到最后的位置

代码表示如下

struct ListNode* reverseList(struct ListNode* head)
{
    if(head==NULL)
    {
        return NULL;
    }

    // 设置两个种子很 一个前指针一个后指针一个当前指针
    struct ListNode* prev =NULL;
    struct ListNode* pos =head;
    struct ListNode* next =head;


    while(pos)
    {
        next=next->next;
        pos->next = prev;
        prev = pos;
        pos =next;
    }

    return prev;
}

没有什么难度

2. 反转双链表

给定双链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。

这个的思路和前面反转单链表完全一致 按照上面的思路搞就可以

这里不再赘述

3. 删除链表中的重复项

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。

我们先考虑一种特殊情况 当我们的头就是我们要删除的节点的时候是不是要用头删啊

并且这个时候还需要移动头的位置

直到我们当前的数据不是我们要删除的数据了 是不是头才能确定下来 大家想想看是不是

之后就很简单了

cur找重复项 prev记录前面的值

如果cur是重复项的话 prev就指向cur的next

之后prev走到cur的位置 cur往前跑 不断循环 之后返回head就可以了

代码表示如下

struct ListNode* deleteNode(struct ListNode* head, int val)
{
    // 首先判断 如果整个链表为空 直接返回一个空就好
    if(head==NULL)
    {
        return NULL;
    }

    // 之后我们使用两个指针来进行删除 一个当前指针 一个next指针 
    struct ListNode* cur = (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* prev = (struct ListNode*)malloc(sizeof(struct ListNode));

    cur = head;
    // 前面以及判断过head不为空 这里放心用
    while(cur && cur ->val == val)
    {
        prev = cur;
        cur=cur->next;
        free(prev);
        head = cur;
    }
    



    // 后面开始考虑普通情况

    while(cur)
    {
        // 开始找要删的数据 找不到就往前遍历
        if(cur->val==val)
        {
            prev ->next = cur->next;
            prev = cur;
            cur = cur->next;
            free(prev);
        }
        else
        {
            prev = cur;
            cur = cur->next;
        }

    }

    return head;
}

队列和栈

还是跟前面一样 在看后面的内容之前需要有队列相关知识

具体大家可以看看我写的这两篇文章啊

初阶数据结构 队列

初阶数据结构 栈

1. 循环队列

这道题前面的博客已经写过了 这里简单介绍下思路

在这里插入图片描述

首先我们可以设置两个指针 分别指向头尾

但是我们这里发现 不太好判断队列的空 满是吧

那么这里我们可以增加一个参数 size

如果size= 0

是不是就代表队列为空

如果size = 最大值

是不是就代表队列为满

对这道题有兴趣的同学可以看看我的这篇博客 试着用我这里提供的方法将这个循环队列写出来

循环队列

2. 特殊栈

要求我们实现一个特殊的栈

它有两个功能

一个功能和基础的栈一样

还有一个功能是能够返回这个栈里面的最小值

这个思路也很简单

我们用两个栈来实现就好了

一个栈实现全部的普通功能

一个栈压栈的时候

1 如果为空 就压栈第一个元素

2 如果不为空 压栈当前元素和栈内最小元素两者的较小值

在这里插入图片描述

这样子就可以啦

3. 队列与栈

用两个队列实现栈

用两个栈实现队列

这两个题目前面的博客中均有涉及

大家可以移步观看

队列实现栈

栈实现队列

总结

在这里插入图片描述

简单介绍了几种基本数据结构的面试题目
由于博主水平优先所以出现错在所难免 希望大佬看到可以指正
如果帮助到大家别忘了一键三连啊
阿尼亚 哇酷哇酷!

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

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

相关文章

智能AI创意图片编辑Luminar Neo

Luminar Neo是Mac上的智能AI技术编辑软件背景替换、图像层、除尘、重新照明选项等,从而实现精确掌控。同时在这款软件中还拥有可简化复杂的编辑程序,如此一来用户即可将自己大脑中想象的愿景变为现实,让使用者能有多大胆的想法都可以在这款软…

深度学习 卷积神经网络原理

深度学习 卷积神经网络原理一、前言二、全连接层的局限性三、卷积层3.1 如何进行卷积运算?3.2 偏置3.3 填充3.4 步长3.5 卷积运算是如何保留图片特征的?3.6 三维卷积3.7 多种特征提取四、池化层五、全连接层六、参考资料一、前言 本文分析了全连接层存在…

burpsuite利用sql注入漏洞猜解数据库名称

目录 一、前提条件 二、burpsuite猜解数据库名 (一)设置firefox代理 (二)使用burpsuite的proxy模块截取数据包 (三)将proxy截取的数据包右击发送到intruder模块 (四)设置2个变量…

【Spring】快速入门Spring框架

文章目录1. 对Spring的理解2. Spring IoC3. DI4. 如何创建一个Spring项目4.1 创建一个Maven项目4.2 添加Spring框架支持4.3 添加启动类5. 存储Bean对象5.1 添加配置文件5.2 创建Bean对象5.3 注册Bean6. 获取并使用Bean对象7. 更简单存储Bean对象的方式7.1 前置工作7.2 添加存储…

python爬虫1

1.1 网络爬虫概述 网络爬虫(又被称为网络蜘蛛、网络机器人,在某社区中经常被称为网页追逐者),可以按照指定的规则(网络爬虫的算法)自动浏览或抓取网络中的信息,通过 Python 可以很轻松地编写爬…

二叉搜索树+二叉进阶oj

索引二叉搜索树1.二叉搜索树概念与性能分析2.二叉树的应用3.二叉树的实现细节4.类中函数递归调用5.二叉树实现总体代码6.二叉进阶oj7.二叉树三种遍历非递归实现二叉搜索树 1.二叉搜索树概念与性能分析 什么是二叉搜索树 二叉搜索树也被称为二叉排序树,其也可以是一…

热视觉2:使用Python和OpenCV从图像中测量温度

热视觉2:使用Python和OpenCV从图像中测量温度 这篇博客将介绍学习热/中远红外视觉的基础知识,gray8 和 gray16 图像(即最常见的热成像格式)之间的差异,学习如何使用Python和OpenCV从热图像中的每个像素点测量温度,并以不同的调色板显示结果。以及如何实时计算视频流和UV…

2022高频经典前端面试题(vue2+vue3+typescript+nodejs下篇,含答案)

vue2篇 1.vue的生命周期(重点) 2.父子组件的钩子函数顺序 页面初次渲染的时候: 父beforeCreate-> 父created -> 父beforeMount 子beforeCreate-> 子created ->子beforeMount-> 子mounted 父mounted 页面更新的时候&#xff…

大数据之Hive

文章目录前言一、数据仓库介绍(一) 数据仓库的基本概念(二)数据仓库的主要特征(三)数据仓库与数据库的区别二、Hive的概念(一)Hive的介绍(二)Hive的架构总结前…

4种方法!怎么把电脑上的音频传到苹果手机上?

案例分享 我新买了iphone13,想把macbook上下载的音乐传输一份到手机上,怎么把电脑上的音频传到苹果手机上?能否通过网络实现将电脑音乐传输到手机播放?” 很多果粉在刚拿到心爱的苹果手机后,都先把之前收藏的歌曲传到…

Grpc简介

博主在5月份已经从上一家公司辞职了,七月份已经到现在的公司了,能在整个互联网大环境都不好的前提下,还能找到工作,待遇还不错,已经很知足了。grpc是进到公司的第一个项目用到的技术,已经用了很久也总结了&…

三菱FX5U系列PLC内置高速计数器的使用方法示例

三菱FX5U系列PLC内置高速计数器的使用方法示例 三菱FX5U系列PLC内置高速计数器如何使用? 具体的使用方法可参考如下: 如下图所示,打开GX-WORKS3编程软件,在左侧的项目树中找到参数—FX5U—模块参数—高速I/O, 如下图所示,在弹出的右侧窗口中双击高速计数器—详细设置,…

没有十几年的积累,你还真写不出什么好的代码

如标题所说,我不知道大家怎么看待这句话? 拿一个正常的程序员举个例子,18开始上大学学习写代码,22岁大学毕业,一直干到30岁就需要考虑程序员的中年危机。 小编身边很多程序员都不喜欢写代码,感觉写代码没有…

C · 进阶 | 指针的进阶

啊我摔倒了..有没有人扶我起来学习.... 👱个人主页:《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ 💒个人社区:《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

数电学习(六、时序逻辑电路)(一)

文章目录引言概述特点时序电路的一般结构形式与功能描述方法时序电路分类时序电路的分析方法同步时序电路的分析方法状态转换表状态转换图(回顾)在现在的场景下看触发器的动态特性(四个时间)(举例)分析下面…

计算机毕设(附源码)JAVA-SSM佳音大学志愿填报系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

python有哪些编译器

python有哪些编译器 1、Brython把Python转换成Javascript代码。 是一个流行的Python编译器,它可以把Python转换成Javascript代码。该软件支持所有网络浏览器(包括手机网络浏览器)。 它还支持最新的Html5/CSS3标准,可以使用流行的CSS框架,如…

200、无线网桥与无线AP的带机量是多少?一篇文章搞明白

正文: 一个无线ap的带机量是多少?也有朋友提到无线网桥的带机量?这个我们之前有提到过,在了解他们的带机量的话,我们就不得不了解ap的性能指标了,那么本期我们来总结下带机量的问题。 一、选择AP前需要考虑…

用通俗易懂的大白话彻底搞明白mysql的数据类型以及mysql中的int(11),这个11到底是啥?

今天抽时间来讲一下mysql里的知识点,之前有不少人问过我,mysql中的int(11),这个11到底是啥意思?是11位的意思吗?你是否也想过这个问题,是否也有这个疑问? ok,今天就展开来讲一下&am…

深度分析React源码中的合成事件

热身准备 明确几个概念 在React17.0.3版本中: 所有事件都是委托在id root的DOM元素中(网上很多说是在document中,17版本不是了);在应用中所有节点的事件监听其实都是在id root的DOM元素中触发;React自…