八大数据结构及常见面试题

article/2025/10/16 3:54:41

几乎所有的问题都需要面试者对数据结构有深刻的理解。无论你是初入职场的新兵(刚从大学或者编程培训班毕业),还是拥有几十年经验的职场老鸟。

即便是对于一些非常基础的工作来说,学习数据结构也是必须的。那么,就让我们先从一些基本概念开始入手。

程序员面试:八大数据结构及常见面试题

什么是数据结构?

简单地说,数据结构是以某种特定的布局方式存储数据的容器。这种“布局方式”决定了数据结构对于某些操作是高效的,而对于其他操作则是低效的。首先我们需要理解各种数据结构,才能在处理实际问题时选取最合适的数据结构。

为什么我们需要数据结构?

数据是计算机科学当中最关键的实体,而数据结构则可以将数据以某种组织形式存储,因此,数据结构的价值不言而喻。

无论你以何种方式解决何种问题,你都需要处理数据——无论是涉及员工薪水、股票价格、购物清单,还是只是简单的电话簿问题。

数据需要根据不同的场景,按照特定的格式进行存储。有很多数据结构能够满足以不同格式存储数据的需求。

常见的数据结构

首先列出一些最常见的数据结构,我们将逐一说明:

  • 数组
  • 队列
  • 链表
  • 字典树(这是一种高效的树形结构,但值得单独说明)
  • 散列表(哈希表)

程序员面试:八大数据结构及常见面试题

数组

数组是最简单、也是使用最广泛的数据结构。栈、队列等其他数据结构均由数组演变而来。

每个数据元素都关联一个正数值,我们称之为索引,它表明数组中每个元素所在的位置。大部分语言将初始索引定义为零。

以下是数组的两种类型:

  • 一维数组(如上所示)
  • 多维数组(数组的数组)

数组的基本操作

  • Insert——在指定索引位置插入一个元素
  • Get——返回指定索引位置的元素
  • Delete——删除指定索引位置的元素
  • Size——得到数组所有元素的数量

面试中关于数组的常见问题

  • 寻找数组中第二小的元素
  • 找到数组中第一个不重复出现的整数
  • 合并两个有序数组
  • 重新排列数组中的正值和负值

著名的撤销操作几乎遍布任意一个应用。但你有没有思考过它是如何工作的呢?这个问题的解决思路是按照将最后的状态排列在先的顺序,在内存中存储历史工作状态。这没办法用数组实现。但有了栈,这就变得非常方便了。

可以把栈想象成一列垂直堆放的书。为了拿到中间的书,你需要移除放置在这上面的所有书。这就是LIFO(后进先出)的工作原理。

栈的基本操作

  • Push——在顶部插入一个元素
  • Pop——返回并移除栈顶元素
  • isEmpty——如果栈为空,则返回true
  • Top——返回顶部元素,但并不移除它

面试中关于栈的常见问题

  • 使用栈计算后缀表达式
  • 对栈的元素进行排序
  • 判断表达式是否括号平衡

队列

与栈相似,队列是另一种顺序存储元素的线性数据结构。栈与队列的最大差别在于栈是LIFO(后进先出),而队列是FIFO,即先进先出。

队列的基本操作

  • Enqueue()?——?在队列尾部插入元素
  • Dequeue()?——移除队列头部的元素
  •  isEmpty()——如果队列为空,则返回true
  • Top()?——返回队列的第一个元素

面试中关于队列的常见问题

  • 使用队列表示栈
  • 对队列的前k个元素倒序
  • 使用队列生成从1到n的二进制数

链表

链表是另一个重要的线性数据结构,乍一看可能有点像数组,但在内存分配、内部结构以及数据插入和删除的基本操作方面均有所不同。

链表就像一个节点链,其中每个节点包含着数据和指向后续节点的指针。 链表还包含一个头指针,它指向链表的第一个元素,但当列表为空时,它指向null或无具体内容。

链表一般用于实现文件系统、哈希表和邻接表。

链表内部结构

程序员面试:八大数据结构及常见面试题

程序员面试:八大数据结构及常见面试题

链表包括以下类型:

  • 单链表(单向)
  • 双向链表(双向)

链表的基本操作:

  • InsertAtEnd - 在链表的末尾插入指定元素
  • InsertAtHead - 在链接列表的开头/头部插入指定元素
  • Delete - 从链接列表中删除指定元素
  • DeleteAtHead - 删除链接列表的第一个元素
  • Search - 从链表中返回指定元素
  • isEmpty - 如果链表为空,则返回true

面试中关于链表的常见问题

  • 反转链表
  • 检测链表中的循环
  • 返回链表倒数第N个节点
  • 删除链表中的重复项

图是一组以网络形式相互连接的节点。节点也称为顶点。 一对节点(x,y)称为边(edge),表示顶点x连接到顶点y。边可以包含权重/成本,显示从顶点x到y所需的成本。

图的类型

  • 无向图
  • 有向图

在程序语言中,图可以用两种形式表示:

  • 邻接矩阵
  • 邻接表

常见图遍历算法

  • 广度优先搜索
  • 深度优先搜索

面试中关于图的常见问题

  • 实现广度和深度优先搜索
  • 检查图是否为树
  • 计算图的边数
  • 找到两个顶点之间的最短路径

树形结构是一种层级式的数据结构,由顶点(节点)和连接它们的边组成。 树类似于图,但区分树和图的重要特征是树中不存在环路。

树形结构被广泛应用于人工智能和复杂算法,它可以提供解决问题的有效存储机制。

树数据结构中使用的基本术语

  • Root - 根节点
  • Parent - 父节点
  • Child - 子节点
  •  Leaf - 叶子节点
  • Sibling - 兄弟节点

以下是树形结构的主要类型

  • N元树
  • 平衡树
  • 二叉树
  • 二叉搜索树
  • AVL树
  • 红黑树
  • 2-3树

其中,二叉树和二叉搜索树是最常用的树。

  • 面试中关于树结构的常见问题
  • 求二叉树的高度
  • 在二叉搜索树中查找第k个最大值
  • 查找与根节点距离k的节点
  • 在二叉树中查找给定节点的祖先节点

字典树

字典树,也称为“前缀树”,是一种特殊的树状数据结构,对于解决字符串相关问题非常有效。它能够提供快速检索,主要用于搜索字典中的单词,在搜索引擎中自动提供建议,甚至被用于IP的路由。

面试中关于字典树的常见问题

  • 计算字典树中的总单词数
  • 打印存储在字典树中的所有单词
  • 使用字典树对数组的元素进行排序
  • 使用字典树从字典中形成单词
  • 构建T9字典(字典树+ DFS )

哈希表

哈希法(Hashing)是一个用于唯一标识对象并将每个对象存储在一些预先计算的唯一索引(称为“键(key)”)中的过程。因此,对象以键值对的形式存储,这些键值对的集合被称为“字典”。可以使用键搜索每个对象。基于哈希法有很多不同的数据结构,但最常用的数据结构是哈希表。哈希表通常使用数组实现。

散列数据结构的性能取决于以下三个因素

  • 哈希函数
  • 哈希表的大小
  • 碰撞处理方法

面试中关于哈希结构的常见问题

  • 在数组中查找对称键值对
  • 追踪遍历的完整路径
  • 查找数组是否是另一个数组的子集
  • 检查给定的数组是否不相交
li

http://chatgpt.dhexx.cn/article/oVyqycMy.shtml

相关文章

数据结构面试、数据结构考研复试——常见问题以及回答

说明:这些是自己整理回答的答案 可以借鉴 也可能存在错误 欢迎指正 文章目录 逻辑结构与物理结构的区别算法常见的数据结构链表存储结构和顺序存储结构的区别数组和链表的区别头指针和头结点的区别线性链表判断整个链表是否有环,如何找到这个环单链表和…

架构设计分布式数据结构与算法面试题(2020最新版)

Java面试总结(2021优化版)已发布在个人微信公众号【技术人成长之路】,优化版首先修正了读者反馈的部分答案存在的错误,同时根据最新面试总结,删除了低频问题,添加了一些常见面试题,对文章进行了…

数据结构面试题以及答案整理

参考网络整理的一些问题 一、什么是数据结构? 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。结构包括逻辑结构和物理结构。 数据的逻辑结构包括4种 (1)集合:数据元素之间除了有相同的数据类…

数据结构面试常见问题总结

数据结构面试常见问题总结 写在前面 本文记录了一些数据结构面试常见问题,本意用于考研复试,以下面试题为网上整理的问题以及自己加入的一些问题,答案仅供参考! Q:数据结构三要素 A:逻辑结构、物理结构、…

mysql 驱动包 mysql-connect-java

mysql的驱动包 mysql-connect-java 内部封装了jdbc: jdbc(java database connectivity):本身是由一组接口组成 , 可以使得Java编译来访问各种数据库无需自己实现接口,这些接口的实现类由第三方数据库厂商实现 jdbc的核心 接口或类作用DriverManager类创建数据库的连接Conne…

Mysql 驱动包mysql-connector-java-8.0.25.jar下载

安装地址 https://downloads.mysql.com/archives/c-net/ 按需选择所需版本,点击Download即可下载; 网盘下载地址: 需要的小伙伴,请关注微信公众号: Transkai, 或者扫描下方公众号二维码,回复关键字:mysql驱…

下载MySQL驱动程序

下载步骤: 第一步:进入MySQL官方网站,并选择DOWNLOADS和Community。 第二步:选择MySQL Connectors 第三步:选择Connector/J 第四步:进入下面界面,找到下面的Generally available (GA)…

【java】Java连接mysql数据库及mysql驱动jar包下载和使用

文章目录 JDBCJDBC本质:JDBC作用:跟数据库建立连接发送 SQL 语句返回处理结果 操作流程和具体的连接步骤如下:操作步骤:需要导入驱动jar包 mysql-connector-java-8.0.22.jar注册驱动获取数据库连接对象 Connection定义sql获取执行…

Mysql-connector-java驱动包(最新版下载详细教程)

步骤如下: 1.进入下载官网 https://dev.mysql.com/downloads/ 2.点击Connector/J 3.选platform Independent选项 4.选zip 5.选择不登陆进行下载 6.自己选择下载到哪个文件夹即可下载成功

Java连接MySQL mysql-connector-java-bin.jar驱动包的下载与安装

eclipse在连接mysql数据库的时候要通过mysql驱动包进行连接 首先进入官网中----官网地址:https://dev.mysql.com/ 进入官网中选择DOWNLOADS(下载) 2. 选择下载中的mysql-connectors 3. 选择connector/J J指的是Java 4.接下在选择操作系统…

Java连接mysql数据库及mysql驱动jar包下载和使用(详细记录)

JDBC 基本概念:java 数据库连接,简称:( java DataBase Connectivity ),java语言操作数据库。 JDBC本质: 其实是官方(SUN公司)定义的一套操作所有关系型数据库的规则&…

记录下载com.mysql.jdbc.Driver驱动包过程

一、网上找了好多要么收费要么没有资源,所以只好去官网上找了 二、官网地址 https://dev.mysql.com/downloads/ 三、下载过程 1、点击官网进去点击downloads 2、点击MySQL Community (GPL) Downloads 进去 3、点击MySQL Community Downloads下的Connector/J 4、在这…

1.MySql驱动的jar包下载

文章目录 1.下载MySql驱动的jar包 1.下载MySql驱动的jar包 1)官网:http://dev.mysql.com/downloads/connector/ 2)点击右边的Connetor/J 3)点击Archives 4)Product Version为MySql驱动版本,可以根据需要…

如何下载mysql-java驱动jar包

1、首先打开网址https://dev.mysql.com/downloads/connector/j/ 选择Archives 2、在Product Version中选择mysql的版本 我选择的是5.1版本的,选择之后点击下面第二个下载按钮,第一个下载的是在linux中使用的 3、下载完成之后解压进入文件夹,…

ajax传递数据

原生ajax <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <input type"text" name"user" id"a1">用户 <in…

Ajax 数组传参

$.ajax({type: post,url: url,traditional: true,data:{roleId: row.id,mIds: mIdArr//数组},//contentType: application/json;charsetutf-8,dataType: json,success:function(data){}ajax 传递数组时要加 traditional: true属性 作用&#xff1a;traditional 为true阻止深度序…

ajax传值无法加载响应数据

在做一个小查询功能的时候使用了layui自带jquery的ajax向后端传值接收数据&#xff0c;但莫名奇妙的接收不到信息&#xff0c;查看控制台发现无法加载响应数据&#xff0c;甚至连状态码都没有 直接在url或apipost中访问却可以&#xff0c;由此感觉是前端方面出现问题&#xff0…

ajax 传递请求参数

传统表单提交 Get请求方式 Post请求方式 请求报文 传统表单提交 在Ajax 中&#xff0c;我们需要自己拼接请求参数 GET 请求方式 POST 请求方式 1. GET 请求 应用&#xff1a;ajax 进行表单提交&#xff0c;服务器端获取请求参数 在客户端&#xff0c;我们要把 姓名和年龄 拼接…

原生JS的ajax,原生ajax传递参数格式,ajax参数传递,ajax传递参数

有点坑爹的是参数的格式组装的问题,看图 js中json对象和字符串的转换 JSON.parse() : 字符串–>json对象 //手动组装json对象var configData ={ "projectDir":weiXinConfig[key].projectDir,"appid":weiXinConfig[key].appid,"projectnam…

AJAX()请求参数

$.ajax()方法详解 jquery中的ajax方法参数总是记不住&#xff0c;这里记录一下。 1.url: 要求为String类型的参数&#xff0c;&#xff08;默认为当前页地址&#xff09;发送请求的地址。 2.type: 要求为String类型的参数&#xff0c;请求方式&#xff08;post或get&#xff…