❤️《数据结构与算法》系列(一)❤️认识数据结构

❤️开新坑了,这次是数据结构与算法专题,保证不鸽!!!

关于数据结构算法的重要性,不言而喻,做开发的都懂。

但是,能学的好,用的好的寥寥无几。

除了基础不牢靠外,还有一个原因就是可以供Java程序员学习的教程并不多。

目前市面上更多的是C语言,C++版的数据结构和算法,极少有关于Java数据结构和算法的课程,所以Java程序员往往需要跨语言学习,难度和效率大打折扣!

今天开始总结分享一些关于数据结构与算法的知识点,系统化深度的学习数据结构和算法,让你对结构化数据有新的认识😎

数据结构和算法


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

Ø 误区

1、认为学习数据结构和算法需要很扎实的数学和编程功底,学起来并不容易;

2、数据结构和算法在平时开发过程中的应用并不多,而且都有现成的类库接口让我们调用,没必要花太多时间去研究。  

Ø 疑问

为什么数据结构和算法使用率这么低,这些大公司面试还必问呢?

这是因为数据结构和算法真的很重要,而且他们的使用率并不低,所有的程序中都有数据结构和算法的身影,他们默默的为程序服务,只是你没重视他们罢了。

Ø 列举我们为什么要学好数据结构和算法原因

  • 提升代码性能,结省空间复杂度和时间复杂度;

  • 算法锻炼自己的逻辑思维;

  • 你会不自觉的考虑你写的代码处理的数据量级是多少,会考虑你的代码是否能处理大量数据的情况

  • 更好的理解应用软件和框架,很多知名软件和框架中都大量用了数据结构算法,比如mysql的索引用了b+树,redis的list底层用了跳跃表,理解这些数据结构能更好的帮助我们理解使用这些软件。

  • 掌握了数据结构与算法,你看待问题的深度,解决问题的角度就会完全不一样。

  • 一流的程序员搞算法,二流的程序员搞架构,三流的程序员搞业务;

2. 数据结构和算法介绍

Ø 算法

案例1:

有一个背包,背包容量是M=150。有7个物品,物品可以分割成任意大小。

要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。 

案例2:

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第4个月后,每个月又生一对兔子,假如兔子不死,问每个月的兔子总数为多少?

是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。

如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。  

算法是独立存在的一种解决问题的方法和思想。

对于算法而言,实现的语言并不重要,重要的是思想。

算法可以有不同的语言描述实现版本(如C描述、C++描述、Python描述等)

Ø 数据结构

数据结构就是把数据组织起来,为了更方便地使用数据我们为了解决问题,需要将数据保存下来,然后根据数据的存储方式来设计算法实现进行处理,那么数据的存储方式不同就会导致需要不同的算法进行处理。

我们希望算法解决问题的效率越快越好,于是我们就需要考虑数据究竟如何保存的问题,这就是数据结构。

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。

3. 数据结构和算法关系

程序 = 数据结构 + 算法

数据结构是算法的基础。

图书馆储藏书籍你肯定见过吧?为了方便查找,图书管理员一般会将书籍分门别类进行“存储”。按照一定规律编号,就是书籍这种“数据”的存储结构。

那我们如何来查找一本书呢?有很多种办法,你当然可以一本一本地找,也可以先根据书籍类别的编号,是人文,还是科学、计算机,来定位书架,然后再依次查找。笼统地说,这些查找方法都是算法。

数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。

因此,我们无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构。

4. 线性结构和非线性结构

Ø 线性结构

  • 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。

  • 线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表)。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的。

  • 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素结点存放数据元素以及相邻元素的地址信息。

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

image.png

Ø 非线性结构

二维数组,多维数组,广义表,树结构,图结构。

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛仔码农@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值