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

写在前面

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


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:

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

数据结构面试常见问题总结相关推荐

  1. 【数据结构面试常见问题】

    preface 数据结构作为计算机的一门基础学科,它在面试中占有很大的比重,本科阶段,我们也学过数据结构与算法,内容比较多,也比较难,尤其是图的应用以及各类查找和排序算法,这些也都是核心内容.数据结构 ...

  2. python面试常见问题-Python面试常见问题,涉及Python各个方面

    原标题:Python面试常见问题,涉及Python各个方面 爬虫面试常见问题 一.项目问题: 1.你写爬虫的时候都遇到过什么反爬虫措施,你是怎样解决的 2.用的什么框架.为什么选择这个框架 二.框架问 ...

  3. 【面试】Java面试常见问题汇总(不含答案)、面试指导学习笔记

    面试常见问题角度 String是基本数据类型吗? int和Integer有什么区别? HashMap和HashTable的区别,及其实现原理. ArrayList/HashMap的源码.如何实现源码 ...

  4. C++面试常见问题一

    C++面试常见问题一 转自:https://oldpan.me/archives/c-interview-answer-1 原作者:[oldpan][https://oldpan.me/] 前言 这里 ...

  5. 分布式系统面试 - 常见问题

    分布式系统面试 - 常见问题 有一些同学,之前呢主要是做传统行业,或者外包项目,一直是在那种小的公司,技术一直都搞的比较简单.他们有共同的一个问题,就是都没怎么搞过分布式系统,现在互联网公司,一般都是 ...

  6. c++面试常见问题汇总

    c++面试常见问题汇总 1. 指针和引用的区别? 2. 堆栈的区别? 3. new 和 delete 是如何实现的,与 malloc 和 free有什么异同? 4. struct 和 class 的区 ...

  7. 研究生计算机专业知识复试面试常见问题

    研究生计算机专业复试面试常见问题 操作系统 1. 进程和线程区别和联系 2. 常见的调度算法 3. 死锁的产生和解决 4. 虚拟内存,页面置换算法 5. 磁盘调度 数据结构 1. 常见的排序算法过程和 ...

  8. 【基础概念】 Redis简介和面试常见问题

    Redis简介和面试常见问题 简介: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起 ...

  9. html手机端适配怎么调试,html5面试常见问题及答案:移动端布局与适配篇

    原标题:html5面试常见问题及答案:移动端布局与适配篇 1. 移动布局自适应不同屏幕的几种方式 (1)响应式布局 (2)100%布局(弹性布局) (3)等比缩放布局(rem) 2. iscroll安 ...

  10. tcp当主动发出syn_一文读懂TCP四次挥手工作原理及面试常见问题汇总

    简述 本文主要介绍TCP四次挥手的工作原理,以及在面试中常见的问题. 字段含义 seq序号:Sequence Number,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行 ...

最新文章

  1. 计算机等级考试属于什么培训,计算机等级是什么
  2. php中 怎么去除,php如何去掉链接
  3. c盘保护软件_电脑C盘空间越来越小?简单操作这几步,可以释放大量空间
  4. 转载: .net程序员偏向XML开发的面试题
  5. DEDE_5.7星星评分插件首发!
  6. Sql Server 2005跨数据查询
  7. bitnami redmine mysql_linux下bitnami一键安装redmine后无法远程访问mysql的问题
  8. thinkphp生成php文件,thinkphp使用buildHtml生成静态文件的方法
  9. 线性与非线性规划问题求解
  10. 【luogu/字符串】多项式输出(所有情况一起处理)
  11. driver: linux下如何模拟按键输入和模拟鼠标
  12. 原形网络(Prototypical Networks)基于PyTorch的实现
  13. 2020大疆数字IC校招笔试题(3)——CMOS 反相器【CMOS逻辑】【MOS管】【PMOS】【NMOS】
  14. java接入支付宝支付api
  15. PHP 小程序中微信支付
  16. 【CST】-01软件安装及熟悉
  17. ZYNQ之FPGA 片内RAM读写测试实验
  18. css selector什么意思
  19. 【JZOJ3054】祖孙询问【LCA】
  20. 晶振噪声及杂散_晶振频偏主要受什么影响?

热门文章

  1. 企业申请CMMI3-CMMI5必经的六个阶段
  2. CentOS安装达梦(DM7)数据库详解
  3. python版使用tinypng压缩图片大小
  4. 【人话版】WEB3黑暗森林中的隐私博弈
  5. Freepiano如何使用sf2音源,sfark如何转换至sf2?
  6. viper4android安装方法,安卓音效神器ViPER4Android_FX安装教程
  7. uniapp微信支付方案
  8. excel在线_如何设计有趣又实用的在线课程
  9. 账龄分析表excel模板_这种高端表格模板你会做吗?Excel制作带照片的员工信息查询表...
  10. vscode代码对比差异视图窗口切换方法(左右文件位置切换)