第一天----数据结构面试题

WeChat–数据结构笔面试总结

1、队列的基本操作

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

2、链表按方向分包括以下类型:单链表(单向),双向链表(双向)

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

3、一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。

最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,
然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。

还有一种利用递归的方法。这种方法的基本思想是在反转当前节点之前先调用递归函数反转后续节点。

4、N1->N2->N3->N4->N5->N2就是一个有环的链表,环的开始结点是N5

设置两个指针p1,p2。每次循环p1向前走一步,p2向前走两步。
直到p2碰到NULL指针或者两个指针相等结束循环。
如果两个指针相等则说明存在环。

5、返回链表倒数第N个节点

思路很简单,只有两种出现的情况:
1、链表的长度刚刚好等于n,也就是说删除表头节点,
2、链表长度大于n,那么我们先定义两个表头,一个后移n位,然后两个链表同时后移,这时当后面的节点到达尾部时,前面的节点就是删除的节点的前一个节点。

6、求二叉树的高度

算法一:采用后序遍历二叉树,结点最大栈长即为二叉树的高度;
算法二:层次遍历二叉树,最大层次即为二叉树的高度;
算法三:采用递归算法,求二叉树的高度

7、堆和栈的区别?

答:空间分配,栈是自动分配,堆是需要手动申请,数据类型先进后出的线性结构,树形结构。

8、最小生成树的prim和kruskal?

答:prim每次连接顶点与树之间的最小距离(选最短的顶点,需要优先级队列),
kruskal每次给顶点加最小权重的边只要不构成环(选最短的边,使用并查集主要利用递归实现路径压缩以及头目合并)。

9、如何快速找出两个队列中相同的元素,假设队列的长度非常大?

答:1、直接hash,对一个队列元素经过hash进行存储,用另外一个队列计算hash值然后对比!(空间消耗大)
2、布隆过滤器,创建位图只有0/1,生成多个hash函数每个函数计算一个值进行映射到k个位置记为1,
然后一直这样处理即可如果映射到的值已经全是1了那就是重复的,
但是会有误判的,不是重复的那么一定不是重复的是重复的可能实际上不重复(hash碰撞)!(堆空间进行优化)。

WeChat–数据结构相关面试问题

10、栈结构与队列的区别?

栈(stack):限定只能在表的一端进行插入和删除操作的线性表。
队列(queue):限定只能在表的一端插入和在另一端进行删除操作的线性表。
1)队列先进先出,栈先进后出。
2)对插入和删除操作的“限定”不同。
3)遍历数据速度不同。队列遍历数据的速度要快得多。

11、判断一个整数是否是2的整数次幂:(n&(n-1))

12、数组中只有一个数出现了两次,求这个数,并使得空间效率最优(用位图bitmap,比O(n)的线性空间更优)

位运算
利用异或的特性,xyx=yxx=y

WeChat–面试篇之数据结构与算法概述

13、时间复杂度耗时:O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n³)<O(2ⁿ)<O(n!)

WeChat–Java 程序员必须掌握的 8 道数据结构面试题(附答案),你会几道?

14、数组的基本操作

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

15、栈的基本操作

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

16、队列的基本操作,移除先入队的元素、插入新元素

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

17、链表的基本操作:

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

18、图的类型:无向图、有向图

在程序语言中,图可以用两种形式表示:邻接矩阵、邻接表
常见图遍历算法:广度优先搜索、深度优先搜索

19、树形结构的主要类型:N元树、平衡树、二叉树、二叉搜索树、AVL树、红黑树、2-3树

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

因此,对象以键值对的形式存储,这些键值对的集合被称为“字典”。
可以使用键搜索每个对象。基于哈希法有很多不同的数据结构,但最常用的数据结构是哈希表。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值