介绍学习刷透近200道数据结构与算法 。成功加冕“题王” 。挤进梦中的字节牛掰!“基本-中级-高级”java程序员面试集结 。看完献出我的膝盖
文章插图
01 前言学习算法 。咱们不需要死记硬背那些冗长复杂的背景知识、底层原理、指令语法……需要做的是领悟算法思想、理解算法对内存空间和性能的影响 。以及开动脑筋去寻求解决问题的最佳方案 。相比编程领域的其他技术 。算法更纯粹 。更接近数学 。也更具有趣味性 。
本文将回顾数据结构与算法的基本知识 。学习日常所触碰场景中的一些算法和策略 。以及这些算法的原理和他背后的思想 。最后会动手写代码 。用java里的数据结构来实现这些算法 。如何去做?
【数据结构与算法的关系 算法和架构有什么区别】02 基本概念回顾2.1 什么是数据结构?1)概述数据结构是计算机存放、组织数据的方式 。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合 。通常情况下 。精心选择的数据结构可以带来更高的运行或者存放效率 。
2)划分从关注的维度看 。数据结构可以划分为数据的逻辑结构和物理结构 。同一逻辑结构可以对应不同的存放结构 。逻辑结构反映的是数据元素之间的逻辑关系 。逻辑关系是指数据元素之间的前后间以什么形式相互关联 。这与他们在计算机中的存放位置无关 。逻辑结构包括:集合:只是扎堆凑在一起 。没有互相之间的关联线性结构:一对一关联 。队形树形结构:一对多关联 。树形图形结构:多对多关联 。网状数据物理结构指的是逻辑结构在计算机存放空间中的存放形式(也称为存放结构) 。一般来探讨 。一种数据结构的逻辑结构根据需要可以表示成多种存放结构 。常用的存放结构有顺序存放、链式存放、索引存放和哈希存放等 。顺序存放:用一组地址连续的存放单元依次存放集合的各个数据元素 。可随机存取 。但增删需要大批移动链式存放:不要求连续 。每个节点都由数据域和指针域组成 。占据额外空间 。增删快 。查找慢需要遍历索引存放:除建立存放结点信息外 。还建立附加的索引表来标识结点的地址 。检索快 。空间占用大哈希存放:将数据元素的存放位置与关键码之间建立确定对应关系 。检索快 。存在映射函数碰撞问题
3)程序中经常可以看见的数据结构数组(Array):连续存放 。线性结构 。可根据偏移量随机读取 。扩容困难栈( Stack):线性存放 。只允许一端操作 。先进后出 。差不多水桶队列(Queue):差不多栈 。可以双端操作 。先进先出 。差不多水管链表( LinkedList):链式存放 。装载前后节点的指针 。可以是双向的树( Tree):典型的非线性结构 。从唯一的根节点开始 。子节点单向执行前驱(父节点)图(Graph):另一种非线性结构 。由节点和关系组成 。没有根的概念 。互相之间存在关联堆(Heap):特殊的树 。特点是根结点的值是所有结点中最小的或者最大的 。且子树也是堆散列表(Hash):源自于散列函数 。将值做一个函数式映射 。映射的输出作为存放的地址
2.2 什么是算法算法指的是基于存放结构下 。对数据如何有效的操作 。选用什么方式可以更有效的处理数据 。提升数据运算效率 。数据的运算是定义在数据的逻辑结构上 。但运算的具体实现要在存放结构上进行 。一般涉及的操作有以下几种:检索:在数据结构里查找满足一定条件的节点 。插入:往数据结构中增加新的节点 。一般有一点位置上的要求 。删除:把指定的结点从数据结构中去掉 。本身可能隐含有检索的要求 。更新:改变指定节点的一个或多个字段的值 。一样隐含检索 。排序:把节点里的数据 。按某种指定的顺序重新排列 。例如递增或递减 。
03 数据结构基本3.1 数组 数组对应的英文是array 。是有限个相同类型的变量所组成的有序集合 。数组中的每一个变量被称为元素 。数组是最为简单、最为常用的数据结构 。
文章插图
数组的另一个特点 。是在内存中顺序存放 。因此可以很好地实现逻辑上的顺序表 。
内存是由一个个连续的内存单元组成的 。每一个内存单元都有自己的地址 。在这些内存单元中 。有那么一些被其他数据占用了 。有那么一些是空闲的 。数组中的每一个元素 。都存放在小小的内存单元中 。并且元素之间紧密排列 。既不能打乱元素的存放顺序 。也不能跳过某个存放单元进行存放 。
推荐阅读
- 三岁小孩可以吃草莓吗?
- 二合一笔记本实用吗?
- 孩子发烧但不想喝药,有哪些治发烧的草莓味的药值得推荐?
- flv的视频用什么软件剪辑 mp4怎么转换成flv格式
- 华为MateBook E二合一怎么样,你会选择吗?
- 发烧吃什么?
- cad格式转换软件使用操作 手机cad转换器怎么用
- 选择二合一笔记本电脑好还是笔记本电脑好?
- 宝宝发烧吃什么饭好?