数据结构 面试题

1.数组

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

思路:升序排序之后,输出第二个数字

1.2 找到数组中第一个不重复出现的整数
1.3合并两个有序数组
def merge_sort(a, b):
ret = []
i = j = 0
while len(a) >= i + 1 and len(b) >= j + 1:
    if a[i] <= b[j]:
        ret.append(a[i])
        i += 1
    else:
        ret.append(b[j])
        j += 1
if len(a) > i:
    ret += a[i:]
if len(b) > j:
    ret += b[j:]
return ret

if __name__ == '__main__':
a = [1,3,4,6,7,78,97,190]
b = [2,5,6,8,10,12,14,16,18]
print(merge_sort(a, b))
1.4 重新排列数组中的正值和负值

2.栈

2.1 前缀表达式,中缀表达式,后缀表达式
2.1.1 中缀表达式转化为后缀表达式

中缀表达式转后缀表达式的规则:

  • 1.遇到操作数,直接输出;
  • 2.栈为空时,遇到运算符,入栈;
  • 3.遇到左括号,将其入栈;
  • 4.遇到右括号,执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出;
  • 5.遇到其他运算符’+”-”*”/’时,弹出所有优先级大于或等于该运算符的栈顶元素,然后将该运算符入栈;
  • 6.最终将栈中的元素依次出栈,输出。
    经过上面的步骤,得到的输出既是转换得到的后缀表达式。
2.1.2 中缀表达式转化为前缀表达式
2.2使用栈计算后缀表达式
2.3对栈的元素进行排序
2.4判断表达式是否括号平衡

3.队列

3.1 使用队列表示栈
3.2 对队列的前k个元素倒序
3.3 使用队列生成从1到n的二进制数

4.链表

4.1 反转链表
4.2检测链表中的循环
4.3返回链表倒数第N个节点
4.4删除链表中的重复项

5.树

5.1 求二叉树的高度
5.2 在二叉搜索树中查找第k个最大值
5.3 查找与根节点距离k的节点
5.4 在二叉树中查找给定节点的祖先节点

6.图

6.1 实现广度和深度优先搜索
6.2检查图是否为树
6.3计算图的边数
6.4找到两个顶点之间的最短路径

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

7.1 计算字典树中的总单词数
7.2 打印存储在字典树中的所有单词
7.3 使用字典树对数组的元素进行排序
7.4 使用字典树从字典中形成单词
7.5 构建T9字典(字典树+ DFS )

8.散列表(哈希表)

8.1 在数组中查找对称键值对
8.2 追踪遍历的完整路径
8.3 查找数组是否是另一个数组的子集
8.4 检查给定的数组是否不相交

参考:
(1) https://baijiahao.baidu.com/s?id=1609200503642486098&wfr=spider&for=pc - (应对程序员面试,你必须知道的八大数据结构)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值