[001数据结构与算法]-数据结构与算法前瞻

文章目录

    • 数据结构与算法定义
      • 数据结构
      • 算法
      • 数据结构与算法的关系
    • 为啥要学
    • 数据结构与算法前瞻
      • 常见数据结构
        • 列表
        • 队列
        • 哈希表(散列表/Map)
      • 常见算法
      • 学习方法
      • 总结

数据结构与算法定义

数据结构

    很容易理解的一个词组,也不需要抽象的定义,我的理解是:
数据(组织/摆放/存储)结构

如,我们有一些整数(3,6,3,2,9)需要存放。
那么可以像撒豆子一样丢出去,落在哪就是哪(表一)。
或者按线性存放一列(表二)。
很明显,这种简单数据第二种方案更节省空间,也方便查找,但也都是合理的数据组织结构。

索引 0 1
0 2 6
1 3
2 3 9
索引 0 1 2 3 4
3 6 3 2 9

算法

    提供一些方法,用于操作保存的元素

简单来说就是数据保存不是目的,还要能够对它们再进行业务操作,比如提供一些增/删/改/查的方法。
但这个方法没有规范,要与具体业务结合,比如列表也可以只提供增加-查找的方法。

数据结构与算法的关系

    数据结构可以理解为原料,算法才是让数据结构升华变的有意义的东西。
如果只有数据结构,没有算法,那结构编织的再漂亮也无意义;
如果没有数据结构,只有算法,那么。。。这是不可能的。

为啥要学

    如果只是想来编程这行玩个票,随便混几年,那别学了,会用类库提供的
数据结构就够了,平时主要也就是写写业务代码,CRUD。你走吧!

    如果想进阶,那别多说,继续学,反正要学,找理由干啥!

数据结构与算法前瞻

    进入正题了,首先要知道学点啥。

常见数据结构

列表

    很简单,排成一列就妥了!但在此基础上会有一些拓展:

  • 数据可以有索引(位置编号,序号,叫啥都行),用于快速找到对应位置数据;
  • 数据可以是链在一起的,即每个人知道自己前后是谁(这种叫双向链表),这个时候就不需要编号了,此结构无法快速随机查找某个位置上的元素。但很方便循环,还有增加删除元素。增加的时候只要改一下我后面是谁就可以了;

    栈是个是后进先出的特殊列表,Last In First Out,简称LIFO。可以想象是弹夹,装子弹的时候只能从
上面压子弹,射击的时候也是上面的子弹先被发射出去。在栈的定义中,我们通常把“上面”称作栈顶。

    为什么要有栈,列表不够用,不香吗?

  • 栈的效率更高。因为它只从栈顶进出,无需考虑其他位置,肯定效率高,少了查询等操作。
  • 在某些业务场景,栈结构的存储更有意义,比如加减乘除的计算,程序调用栈等,后面详解。
队列

    队列是一种与栈相反的结构,先进先出,First In First Out,简称FIFO。其实就是我们平常的排队,谁先来,
谁先办理业务。

哈希表(散列表/Map)

    简单说,就是键值对(Key-Value),可以根据key,找到对应value。这个太有用了,以后细说,这里还有hash算法的问题。

    树,就是树!这个结构名称定义的太直观了,树有主干,然后有一些枝杈,在末端有叶子。“树”就是这样。但是!又没这么简单,树其实是个大类。在其扩展上又有以下类目:

  • 二叉树
  • 平衡二叉树
  • 平衡查找树之 AVL 树
  • 平衡二叉树之红黑树
  • B 树
  • B + 树
  • B * 树
  • Trie 树

太多了,不一一举了,泪目。。。

    更复杂的树,简单说,树枝是不相交的。但在图里,这棵“树”的枝又连接在了一起。嗯,很杂乱。稍后再表。

常见算法

    大类无非以下:

  • 排序
    • 冒泡排序
    • 选择排序
    • 插入排序
    • 希尔排序
    • 归并排序
    • 快速排序
    • 堆排序
    • 计数排序
    • 桶排序
    • 基数排序
  • 查找
    • 顺序查找
    • 二分查找
    • 插值查找
    • 斐波那契查找
    • 分块查找
    • 哈希查找
    • 二叉树查找
    • 平衡树查找
    • 。。。
  • 图算法
    • 最短路径
    • 。。。

    其实还有很多,列表和树的排序又不同,算法多种多样,效率不同。先简单列几个,以后一一细表。

学习方法

  1. 学习基础数据结构描述,并自行用代码实现
  2. 深入学习理解Java中各数据结构的实现
  3. 学习算法,探究算法原理,会尽量结合数学
  4. 探究算法的应用,包括常见面试题目与结合力扣精典题目
  5. 分析算法在实际编码中的可用性

总结

    很庞大的系列题目,边学边写,贵在坚持吧。

你可能感兴趣的:(数据结构与算法,算法,数据结构,java,链表,二叉树)