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

article/2025/10/16 3:59:50

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

写在前面

本文记录了一些数据结构面试常见问题,本意用于考研复试,以下面试题为网上整理的问题以及自己加入的一些问题,答案仅供参考!


Q:数据结构三要素

A:逻辑结构、物理结构、数据运算

Q:数组与链表有什么区别?

A:

  • 数组静态分配内存,链表动态分配内存
  • 数组在内存中连续,链表不连续
  • 数组利用下标定位,时间复杂度为 O (1),链表定位元素时间复杂度 O (n)
  • 数组插入或删除元素的时间复杂度 O (n),链表的时间复杂度 O (1)

Q: 线性表的存储结构?

A:顺序存储(内存连续)、链式存储(内存不连续)

Q:头指针和头结点的区别?

A:

  • 头指针:是指向第一个节点存储位置的指针
  • 头结点:是放在第一个元素节点之前,便于在第一个元素节点之前进行插入和删除的操作

Q:栈和队列的区别

A:栈和队列都是操作受限的线性表

  • 栈:只能在栈尾入栈、出栈,是先进后出
  • 队列:队尾进,队首出,是先进先出

Q:度为 2 的树与二叉树有什么区别

A:

  1. 度为 2 的树至少有 3 个结点,而二叉树可以为空
  2. 二叉树有左右子树之分

Q:唯一确定一棵二叉树

A:中序 + 先序/后序/层序

Q:二叉排序树

A:若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;它的左、右子树也分别为二叉排序树。

Q: 最小生成树有几种方法?

A:

  • Prim(普里姆)算法:在图中取任意顶点 v 作为起始顶点,并加入集合 V;之后遍历与 V 中顶点相邻的边,选择权值最小且顶点未加入集合 V 的边,把其加入集合 V,直到集合 V 包含所有顶点结束
    时间复杂度:O (N2)
  • Kruskal(克鲁斯卡尔)算法:在含有 n 个顶点的图中始终选择权值最小且不会产生回路的边,一直进行此步骤直到选择 n-1 条边为止
    时间复杂度:O(e*loge),e 为边数

Q:图的存储方式有哪些?每一种方式优缺点

A:邻接矩阵、邻接表、十字链表、邻接多重表

  • 无向图:邻接矩阵、邻接表、邻接多重表

  • 有向图:邻接矩阵、邻接表、十字链表

    • 邻接矩阵:适合稠密图,确定边数总数花费时间代价大,边较少时造成空间浪费
    • 邻接表:适合稀疏图,节省空间,容易找出邻边,确定两个顶点间是否存在边花费时间代价大

Q:树的存储结构

A:双亲表示法、孩子表示法、孩子兄弟表示法

Q: 图的遍历和树的遍历有哪些

A:

  • 图的遍历:广度优先遍历(BFS)、深度优先遍历(DFS)
  • 树的遍历:先根遍历、后根遍历

Q: 图的遍历与树的遍历有什么区别?

A:图的遍历可能会出现循环遍历的情况,要设置标记数组。而树的遍历则不会出现这种情况。其次,图可能存在不连通的情况,而树不存在,所以图的遍历要对所有的顶点都循环一遍。

Q:解决哈希冲突的方法

A:

  1. 线性探测法
  2. 平方探测法
  3. 伪随机探测法
  4. 拉链法

Q:什么是稳定的算法?

A:不乱动已经排序好的数字,这样算法稳定一些

  • 稳定的排序算法:冒泡排序、插入排序、归并排序、基数排序
  • 不稳定的排序算法:选择排序、快速排序、希尔排序、堆排序

Q:快排的操作流程

A:选取一个基准,一趟排序确定两个区间,一个区间全部比基准值小,另一个区间全部比基准值大,接着再选取一个基准值来进行排序,以此类推,最后得到一个有序的数列

Q:关键路径和关键活动

A:关键路径是项目中时间最长的活动顺序,决定着可能的项目最短工期,可能有 1 条或多条

Q:关键路径是用什么数据结构实现的

A:有向无环图

Q:排序算法的介绍

A:

  • 冒泡排序:从左到右依次比较相邻的两个元素,如果前一个元素比较大,就把前一个元素和后一个交换位置,重复地进行直到没有再需要交换
  • 选择排序:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕
  • 插入排序:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
  • 希尔排序:将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序
  • 归并排序:在排序的过程中,把原来的数组变成左右两个数组,然后分别进行排序,当左右的子数组排序完毕之后,再合并这两个子数组形成一个新的排序数组
  • 快速排序:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序
  • 堆排序:把整个数组变成一个最大堆,然后每次从堆顶取出最大的元素,这样依次取出的最大元素就形成了一个排序的数组
  • 基数排序:按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位

排序算法


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

相关文章

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…

ajax参数该怎么传递?ajax参数传递

对于前端开发的小伙伴们而言&#xff0c;一定离不开ajax这个小东西的&#xff0c;它可以帮助你传输你想要的参数&#xff0c;还可以实现局部刷新&#xff0c;那你们知道如何才能在ajax中传递参数吗&#xff1f;今天就和大家说说如何在ajax中传递参数。 ajax参数该怎么传递&…

ajax与后端互相传值与处理(各种类型)

ajax与后端互相传值与处理(各种类型) 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 ajax与后端互相传值与处理(各种类…

Ajax传值 简述方法(前后端传值)

Ajax传值的过程 提示&#xff1a;我是个小白&#xff0c;写博客只是为了保存自己总结的东西&#xff0c;若有错误请指正&#xff0c;共同学习&#xff01;&#xff01;感谢&#xff01;&#xff01;&#xff01; 文章目录 前言一、使用前提1. 必须要先在前端引入jQuery。2.Ajax…

js中如何判断{},[]

2019独角兽企业重金招聘Python工程师标准>>> 所以这个时候需要如下处理 if((Array.isArray(变量) && 变量.length 0) || (Object.prototype.isPrototypeOf(变量) && Object.keys(变量).length 0)){ alert(该方法判断了{}花括号这…