zoukankan      html  css  js  c++  java
  • 数据结构

    常见的数据结构链表、队列、栈、二叉树、堆
    使用内置结构实现高级数据结构,比如内置的list/deque实现栈

    链表有单链表、双链表、循环双端链表
    如何使用python来表示链表结构

    实现链表常见操作,比如插入节点,反转链表,合并多个链表

    leetcode练习常见链表题目

    队列是先进先出结构
    实现队列的append和pop操作,如何做到先进先出
    使用python的list或者collections.deque实现队列

    栈是后进先出结构
    实现栈的push和pop操作,如何做到后进先出
    使用python的list或者collections.deque实现队列

    如何使用两个栈实现一个队列
    如何获取最小值的栈MinStack

    python dict/set底层都是哈希表
    哈希表的实现原理,底层是一个数组
    根据哈希函数快速定位一个元素,平均查找O(1),非常快
    不断加入元素会引起哈希表重新开辟空间,拷贝之前元素到新数组

    哈希表如何解决冲突
    链接法和开放寻址法
    元素key冲突之后使用一个链表填充相同key的元素
    开放寻址法是冲突之后根据一种方式(二次探查)寻找下一个可用的槽
    cpython使用的二次探查

    二叉树数据结构
    先序,中序,后序遍历
    先(根)序:先处理根,之后是左子树,然后是右子树
    中(根)序:先处理左子树,然后是根,然后是右子树
    后(根)序:先处理左子树,然后是右子树,最后是根

    树的遍历方式
    先序遍历,其实很简单,递归代码里先处理根就好
    中序遍历,调整下把print(subtree.data)放中间就好

    常考数据结构之堆
    堆其实就是完全二叉树,有最大堆和最小堆
    最大堆:对于每个非叶子节点V,V的值都比它的两个孩子大
    最大堆支持每次pop操作获取最大的元素,最小堆获取最小元素
    常见问题:用堆来完成topk问题,从海量数字中寻找最大的k个

    使用堆解决TOPK问题

    常考数据结构链表
    链表涉及到指针操作较为复杂
    熟悉链表的定义和常见操作
    常考题:删除一个链表节点
    常考题:合并两个有序链表

    数据结构常考题二叉树
    二叉树涉及到递归和指针操作,常结合递归考察
    二叉树的操作很多可以用递归的方式解决,不了解递归会比较吃力
    常考题:二叉树的镜像
    常考题:如何层序遍历二叉树(广度优先)

    常考题栈与队列
    熟练掌握用python的list或者collections.deque()实现栈和队列
    常考题:用栈实现队列
    leetcode implement-queue-using-stacks

    常考题堆
    理解堆的概念,堆是完全二叉树,有最大堆和最小堆
    会使用python内置的heapq模块实现堆的操作
    常考题:合并k个有序链表 leetcode merge-k-sorted-list

    合并两个有序链表
    1.读取所有链表值
    2.构造一个最小堆heapq很容易实现
    3.根据最小堆构造一个链表

    python字符串常考
    python内置了很多字符串操作,比如split,upper,replace等
    常考题:翻转一个字符串
    常考题:判断一个数字是否是回文数

    算法与数据结构练习题
    1.反转链表
    如何反转一个单链表
    能使用循环的方式实现吗?
    能否用递归的方式实现?

  • 相关阅读:
    ForeignKey 的第二个位置参数on_delete
    我们为什么要用springcloud?
    使用springcloud zuul构建接口网关
    分布式环境 限流解决方案
    Spring Cloud限流思路及解决方案
    SpringBoot初始教程之Redis集中式Session管理
    分布式高并发下全局ID生成策略
    分布式日志收集收集系统:Flume(转)
    深入理解Java类加载器(ClassLoader) (转)
    各类排序算法复杂度比较
  • 原文地址:https://www.cnblogs.com/muzinan110/p/11149192.html
Copyright © 2011-2022 走看看