Java基础:37 数据结构和算法内容介绍

1、数据结构和算法的重要性

  • 算法是程序的灵魂,优秀的程序可以在海量数据计算时,依然保持高速计算
  • 一般来讲 程序会使用了内存计算框架(比如Spark)和缓存技术(比如Redis等)来优化程序,再深入的思考一下,这些计算框架和缓存技术, 它的核心功能是哪个部分
  • 拿实际工作经历来说, 在Unix下开发服务器程序,功能是要支持上千万人同时在线, 在上线前,做内测,一切OK,可上线后,服务器就支撑不住了,,公司的CTO对代码进行优化,再次上线,坚如磐石。你就能感受到程序是有灵魂的,就是算法。
  • 目前程序员面试的门槛越来越高,很多一线IT公司(大厂),都会有数据结构和算法面试题(负责的告诉你,肯定有的)
  • 如果你不想永远都是代码工人,那就花时间来研究下数据结构和算法

2、数据结构和算法的关系

  • 数据data结构(structure)是一门研究组织数据方式的学科,有了编程语言也就有了数据结构。学好数据结构可以编写出更加漂亮,更加有效率的代码。
  • 要学习好数据结构就要多多考虑如何将生活中遇到的问题,用程序去实现解决。
  • 程序 = 数据结构 + 算法
  • 数据结构是算法的基础, 换言之,想要学好算法,需要把数据结构学到位。

3、基本概念和术语

  1. 数据(data):所有能输入到计算机中去的描述客观事物的符号。
    数值型数据
    非数值型数据(多媒体信息处理)
  2. 数据元素(data element):数据的基本单位,也称结点(node)或记录(record)。
  3. 数据项(data item):有独立含义的数据最小单位,也称域(field)。
    三者之间的关系:data(数据) > data element(数据元素) > data item(数据项)
  4. 数据对象(Data Object):相同特性数据元素的集合,是数据的一个子集。
    整数数据对象 N = { 0, ±1, ±2, … }
  5. 数据结构(Data Structure)是相互之间存在一种或多种特定关系的数据元素的集合。
    数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。

4、数据逻辑结构

数据元素间抽象化的相互关系,与数据的存储无关,独立于计算机,它是从具体问题抽象出来的数学模型。

划分方法1:
(1)线性结构

  1. 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。
  2. 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的。
  3. 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息
  4. 线性结构常见的有:数组、队列、链表和栈。

(2)非线性结构,包括:二维数组,多维数组,广义表,树结构,图结构。

划分方法2:

  • 集合:数据元素间除“同属于一个集合”外,无其它关系,如:树、图
  • 线性结构:一个对一个,如线性表、栈、队列
  • 树形结构:一个对多个,如树
  • 图形结构:多个对多个,如图

5、数据存储结构

存储结构(物理结构):数据元素及其关系在计算机存储器中的存储方式。

  • 顺序存储结构:借助元素在存储器中的相对位置来表示数据元素间的逻辑关系
  • 链式存储结构:借助指示元素存储地址的指针表示数据元素间的 逻辑关系

6、常见的数据结构

数据结构分为线性和非线性。

  1. 数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构;
    线性结构包括:数组,链表,队列,栈;
  2. 非线性结构包括:树,图,表
  3. 这几种结构优缺点如下:

Java基础:37 数据结构和算法内容介绍