数据结构和算法的图解和实现

2021-04-18 01:26

阅读:656

标签:卡尔   暴力   分治算法   顺序存储   归并   查找   分治   哈希表   连续   

为什么要学习数据结构和算法

很多人在实际工作中,并不会直接实现数据结构和写一个算法来解决实际问题,因为这些都在类库或者框架内部实现了,只需要调用类库或框架提供的 api。这些 api 极大的帮助了我们快速实现业务需求,开发出符合要求的产品。这样的 api 调用对程序猿(媛)来说不是那么的困难,导致现在越来越多的人开始步入这个高薪行业。做开发的人越来越多,为了提高门槛,很多企业开始注重候选人的基本功那就是数据结构和算法。

我们平时所用的技术都是基于数据结构和算法在上层做了封装,想要用好这些技术就得去了解,去熟悉这些技术所用的数据结构或者算法。当程序调用出错时,熟悉数据结构和算法对于阅读底层的源码会有很大的帮助。程序的性能瓶颈往往都跟数据结构和算法有关系的,每种数据结构有各种的优缺点,每种算法有不同的时间复杂度和空间复杂度,当你了解这些,你就能够使用合适的数据结构和算法让程序获得更优越的性能。

有些算法是用来解决一类问题,了解算法的思想,就能使用算法来解决同类问题。更高级一点讲,如果你对现有的技术不满意,就可以自己在数据结构和算法的基础上加以改进。

什么是数据结构

数据结构是计算机存储和组织数据的方式。数据结构是用来保存数据的集合。当数据以某种特定的关系联系起来,就需要选择对应的数据结构来存储,选择不同的数据结构对运行速度和存储效率都会有影响。

什么是算法

算法是解决问题的代码,是描述解决问题的过程。对于符合规定的输入,获得符合预期的输出。使用不同的算法解决相同的问题所花费的时间是不同的。空间复杂度和时间复杂度是用来衡量一个算法的优劣。

数据结构和算法的关系

数据结构是底层,为算法提供服务。算法总是要依赖种数据结构来解决问题。简而言之,程序就等于数据结构 + 算法。

数据结构分类

数据结构包括线性结构和非线性结构。

线性结构

线性结构是最常用的数据结构,特点是数据元素之间存在一对一的关系。线性结构有两种存储方式,一种是顺序存储叫做顺序表,其存储的元素在内存中是连续的,另外一种叫做链表,其存储的元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息。

常见的线性结构有数组、队列、链表和栈。

非线性结构

非线性结构的一个结点元素可能有多个直接前驱和多个直接后继结点。非线性结构包括二维数组、多维数组、广义表、树和图。

常用数据结构

稀疏数组

队列

链表

哈希表

算法

递归

  • 迷宫回溯

  • 八皇后

排序

  • 冒泡排序
  • 选择排序
  • 插入排序
  • 快速排序
  • 希尔排序
  • 归并排序
  • 基数排序
  • 堆排序

查找

  • 线性查找
  • 二分法查找
  • 二分法查找(非递归)
  • 插值查找
  • 斐波那契查找

分治算法

  • 汉诺塔

KMP算法

  • 暴力匹配
  • KMP匹配

贪心算法

普里姆(Prim)算法

克鲁斯卡尔算法

马踏棋盘算法

数据结构和算法的图解和实现

标签:卡尔   暴力   分治算法   顺序存储   归并   查找   分治   哈希表   连续   

原文地址:https://blog.51cto.com/codemcx/2510476


评论


亲,登录后才可以留言!