摘自:易搜社区http://bbs.easysoo.cn/?p=398

这份清单,既是一份有助于对这些题目做深入研究的快速指南和参考,也算是计算机科学课程中不能忘记的基础知识总结,因此并不可能全面覆盖所有内容。它也可以作为 gist 在 Github 上公开,人人都可以编辑和补充。

一、数据结构基础

数组

定义

  • 按顺序连续存储数据元素,通常索引从0开始
  • 以集合论中的元组为基础
  • 数组是最古老,最常用的数据结构

知识要点

  • 索引最优;不利于查找、插入和删除(除非在数组最末进行)
  • 最基础的是线性数组或一维数组

    数组长度固定,意味着声明数组时应指明长度

  • 动态数组与一维数组类似,但为额外添加的元素预留了空间

    如果动态数组已满,则把每一元素复制到更大的数组中

  • 类似网格或嵌套数组,二维数组有 x 和 y 索引

时间复杂度

  • O(1)索引:一维数组:O(1),动态数组:O(1)
  • O(n)查找:一维数组:O(n),动态数组:O(n)
  • O(log n)最优查找:一维数组:O(log n),动态数组:O(log n)
  • O(n)插入:一维数组:n/a,动态数组:O(n)

链表

定义

  • 结点存储数据,并指向下一结点

    最基础的结点包含一个数据和一个指针(指向另一结点)

    • 链表靠结点中指向下一结点的指针连接成链

要点

  • 为优化插入和删除而设计,但不利于索引和查找
  • 双向链表包含指向前一结点的指针
  • 循环链表是一种终端结点指针域指向头结点的简单链表
  • 堆栈通常由链表实现,不过也可以利用数组实现

    堆栈是“后进先出”(LIFO)的数据结构

    • 由链表实现时,只有头结点处可以进行插入或删除操作
  • 同样地,队列也可以通过链表或数组实现

    队列是“先进先出”(FIFO)的数据结构

    • 由双向链表实现时,只能在头部删除,在末端插入

时间复杂度

  • O(n)索引:链表:O(n)
  • O(n)查找:链表:O(n)
  • Linked Lists: O(n)最优查找:链表:O(n)
  • O(1)插入:链表:O(1)

哈希表或哈希图

定义

  • 通过键值对进行储存
  • 哈希函数接受一个关键字,并返回该关键字唯一对应的输出值

    这一过程称为散列(hashing),是输入与输出一一对应的概念

    • 哈希函数为该数据返回在内存中唯一的存储地址
要点
  • 为查找、插入和删除而设计
  • 哈希冲突是指哈希函数对两个不同的数据项产生了相同的输出值

    所有的哈希函数都存在这个问题

    • 用一个非常大的哈希表,可以有效缓解这一问题
    • 哈希表对于关联数组和数据库检索十分重要

时间复杂度

  • O(1)索引:哈希表:O(1)
  • O(1)查找:哈希表:O(1)
  • O(1)插入:哈希表:O(1)

二叉树

定义

  • 一种树形的数据结构,每一结点最多有两个子树

    • 子结点又分为左子结点和右子结点

要点

  • 为优化查找和排序而设计
  • 退化树是一种不平衡的树,如果完全只有一边,其本质就是一个链表
  • 相比于其他数据结构,二叉树较为容易实现
  • 可用于实现二叉查找树
    • 由于上述原因,二叉查找树通常被用作一种数据结构,而不是二叉树
    • 重复的结点可省略
    • 右子树有比双亲结点更大的键值
    • 左子树有比双亲结点更小的键值
    • 二叉树利用可比较的键值来确定子结点的方向

时间复杂度

  • 索引:二叉查找树:O(log n)
  • 查找:二叉查找树:O(log n)
  • 插入:二叉查找树:O(log n)
  • >>>未完,浏览下节     >>>未完,浏览下节

程序猿之华丽转身:必备技术面试手册相关推荐

  1. 程序猿之华丽转身:必杀之八技

    摘自:易搜社区http://bbs.easysoo.cn/?p=101 既然你选择了程序员这一条路,就说明了你接受这工作给你带来的酸甜苦辣,无论如何,勿忘初心. 1.技术只是工具而非解决问题之本 当我 ...

  2. GitHub 标星 44k!史上最全技术面试手册!

    大家好,我是为前端娱乐圈操碎了心的小迷妹,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标. 每天上班必须做的一件事情,就是打开 ...

  3. GitHub 3W 星,冲击热榜!超实用技术面试手册,看这篇就够了

    安妮 发自 凹非寺 量子位 出品 | 公众号 QbitAI 技术人员求职面试,单刷leetcode上的大厂题库可能还不够. 简历怎么写才能吸引HR的眼光,可能会被技术老大问到哪些常见问题,拿到Offe ...

  4. 面试 | 阿里P7级别程序猿亲身告知,不会面试,还想进大厂?做梦吧

    Hi!我是小小,今天是本周的第四篇,在这篇中,将会着重的讲解关于面试的一些内容. 一般来说,将会考察一些以下需要的技术点:看看聪明的你能答出几道来. Java基础知识面试题 Java概述 何为编程? ...

  5. 值得程序猿收藏的这些顶级技术网站,你都知道几个?

    版权声明:本文为 ABC实验室 原创文章,版权所有, 侵权必究! 编者语 今天是信息爆炸的时代,我们每天被各种各样的媒体资讯轰炸着,各种网站.各种APP.各种公众号,信息像雪片一样铺天盖地的向我们扑来 ...

  6. GitHub 标星 3.2w!史上最全技术面试手册!

    点击上方"码农突围",马上关注,每天早上8:50准时推送 真爱,请置顶或星标 本文转自量子位,作者安妮,编辑 GitHubDaily 技术人员求职面试,单刷 LeetCode 上的 ...

  7. Java程序员必看,java技术面试评语及录用建议

    前言 最近一段时间发现经常看到很多人,对Spring源码比较感兴趣,日常开发中,无论你做什么什么项目,大部分都离不开Spring生态的那一套东西,所以很多人对Spring底层源码实现很感兴趣,但是有些 ...

  8. 给新手程序猿的16个必备小妙招

    写在前面: 这个文章核心并不是程序优化的具体技巧,而是拿到一个问题如何思考和利用工具的通用方法.比如即使我们不知道 profiler 这个东西,通过搜索"代码 每一行 时间"也可以 ...

  9. 程序猿应该了解的密码技术

    目录 1. 概述 2. 加密与解密技术 2.1 对称密码 几种典型的对称密码介绍 对称密码的选择 分组密码的模式 2.2 公钥密码 公钥密码算法RSA 其他公钥密码 2.3 混合密码系统 加密过程 3 ...

最新文章

  1. 希望和等待:目标,欲望和意志
  2. linux centos7 设置 grub2
  3. 百度李彦宏携三人赴港二次上市,网站推广之下百度的未来愈加可期
  4. 深入理解pts,dts,time_base
  5. 让你了解什么是内存屏障
  6. JavaScript中对象的构造方法
  7. 蓝桥杯2015初赛-加法变乘法-枚举
  8. 微信 网页开发 获取地理位置 高德地图显示
  9. Office web app server2013详细的安装和部署
  10. Maven知识点整理
  11. 配置centos7下的Apache服务
  12. java带圈数字,小1,小2
  13. iTerm2使用zmodem协议上传下载文件
  14. 下载安装php详细教程(在安装配置apache之后)
  15. R语言基本用法(主要为时间序列分析方面)
  16. 考研英语近义词与反义词·一
  17. 零和博弈思维模式:选择即博弈,无法逃脱的思想牢笼
  18. 王选-“从Dijkstra谈帅才的洞察力”[转]
  19. linux中使用U盘拷贝
  20. jenkins svn publisher插件使用手册

热门文章

  1. CSS实现图片自适应缩放,填满容器
  2. 微软认证:微软认证介绍
  3. 高清电子警察和高清卡口的区别
  4. 离散数学学习笔记——集合运算的基本等式
  5. 前端技术分享之3/8女神节抽奖活动
  6. Unity Tag标签
  7. @所有人,官网下载的微信小程序开发工具安装后黑屏咋办?
  8. 特斯拉音乐线圈周围的电场信号
  9. 2023年2月浙江省中小企业协会与各专委会大事记
  10. tm是什么域名_tm域名是什么