后端面试---(面试官:请介绍一种你熟悉的数据结构?)

       

目录

一,什么是数据结构?

二,常见的数据结构

2.1数组

2.2栈

2.3队列

2.4链表

2.5图

2.6树

2.7字典树


今天上午面试的时候,面试管问我40里面你觉得你哪个科目学的比较好,我说数据结构和操作系统吧,然后他让我挑一个比较熟悉的数据结构讲一下。当时居然一时僵住了,脑子里只想到了链表和二叉树这两种数据结构(什么队列、数组、栈。。。。)都没想到!可能是没按套路出牌,一下子蒙住了,之前准备的很多Java基础、数据库、spring框架之类的面试题基本上都没有问道,我在给他将二叉树的时候,现在回想讲的乱七八糟,后面我有说可能有的东西忘了,要不我给你讲一下八种排序算法吧,然后再认真的给他介绍了一下八种排序算法的特点和性质并且主要介绍了快速排序的实现过程。尴尬。。。。

        所以我觉得有必要再梳理一下几个比较常见的数据结构!

一,什么是数据结构?

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

二,常见的数据结构

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

• 数组

• 栈

• 队列

• 链表

• 树 • 图

• 字典树(这是一种高效的树形结构,但值得单独说明)

• 散列表(哈希表)

2.1数组

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

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

以下是数组的两种类型:

• 一维数组

• 多维数组

数组的基本操作

• Insert——在指定索引位置插入一个元素

• Get——返回指定索引位置的元素

• Delete——删除指定索引位置的元素

• Size——得到数组所有元素的数量

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

• 寻找数组中第二小的元素

• 找到数组中第一个不重复出现的整数

• 合并两个有序数组

• 重新排列数组中的正值和负值

2.2栈

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

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

栈的基本操作

• Push——在顶部插入一个元素

• Pop——返回并移除栈顶元素

• isEmpty——如果栈为空,则返回true

• Top——返回顶部元素,但并不移除它

面试中关于栈的常见问题

• 使用栈计算后缀表达式

• 对栈的元素进行排序

• 判断表达式是否括号平衡

2.3队列

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

队列的基本操作

• Enqueue() —— 在队列尾部插入元素

• Dequeue() ——移除队列头部的元素

• isEmpty()——如果队列为空,则返回true

• Top() ——返回队列的第一个元素

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

• 使用队列表示栈 • 对队列的前k个元素倒序

• 使用队列生成从1到n的二进制数

2.4链表

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

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

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

链表内部结构

链表包括以下类型:

• 单链表(单向)

• 双向链表(双向)

链表的基本操作:

• InsertAtEnd - 在链表的末尾插入指定元素

• InsertAtHead - 在链接列表的开头/头部插入指定元素

• Delete  - 从链接列表中删除指定元素

• DeleteAtHead - 删除链接列表的第一个元素

• Search  - 从链表中返回指定元素

• isEmpty - 如果链表为空,则返回true

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

• 反转链表

• 检测链表中的循环

• 返回链表倒数第N个节点

• 删除链表中的重复项

2.5图

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

图的类型

• 无向图

• 有向图

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

• 邻接矩阵

• 邻接表

常见图遍历算法

• 广度优先搜索

• 深度优先搜索

面试中关于图的常见问题

• 实现广度和深度优先搜索

• 检查图是否为树

• 计算图的边数

• 找到两个顶点之间的最短路径

2.6树

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

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

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

• Root - 根节点

• Parent - 父节点

• Child - 子节点

• Leaf - 叶子节点

• Sibling - 兄弟节点

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

• N元树

• 平衡树

• 二叉树

• 二叉搜索树

• AVL树

• 红黑树

• 2-3树

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

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

• 求二叉树的高度

• 在二叉搜索树中查找第k个最大值

• 查找与根节点距离k的节点

• 在二叉树中查找给定节点的祖先节点

2.7字典树

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

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

• 计算字典树中的总单词数

• 打印存储在字典树中的所有单词

• 使用字典树对数组的元素进行排序

• 使用字典树从字典中形成单词

• 构建T9字典(字典树+ DFS )

2.8哈希表

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

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

• 哈希函数

• 哈希表的大小

• 碰撞处理方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值