数据结构面试必问题

算法+数据结构=编程

数据结构是以某种特定的布局方式存储数据的容器

数组

一维数组、多维数组

基操

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

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

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

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

问题

栈(后进先出)

基操

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

问题

  • 使用栈计算后缀表达式

  • 对栈的元素进行排序

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

队列(先进先出)

基操

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

问题

  • 使用队列表示栈

  • 对队列的前k个元素倒序

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

链表

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

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

单链表(单向)、双向链表(双向)

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

问题

  • 反转链表

  • 检测链表中的循环

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

  • 删除链表中的重复项

一组以网络形式相互连接的节点

权重/成本,显示从顶点x到y所需的成本

无向图、有向图

邻接矩阵、邻接表

遍历算法:广度优先搜索、深度优先搜索

问题

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

  • 检查图是否为树

  • 计算图的边数

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

层级式

由顶点(节点)和连接它们的边组成,不存在环路

问题

  • 求二叉树的高度

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

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

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

字典树(前缀树)

快速检索,用于搜索字典中的单词,在搜索引擎中自动提供建议

问题

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

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

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

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

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

问题

  • 求二叉树的高度

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

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

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

哈希表

用于唯一标识对象并将每个对象存储在一些预先计算的唯一索引(称为“键(key)”)中的过程。键值对

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

问题

  • 在数组中查找对称键值对

  • 追踪遍历的完整路径

  • 查找数组是否是另一个数组的子集

  • 检查给定的数组是否不相交

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值