数据结构,顾名思义,就是数据之间的结构关系,或者理解成数据元素相互之间存在的一种或多种特定关系的集合。

按照观察角度的不同,我们把数据结构分为逻辑结构和物理结构;

逻辑结构

逻辑结构:是指数据对象中数据元素之间的相互关系。
逻辑结构可以分为以下四种
(1)集合结构中的数据元素都同属于一个集合,它们之间没有其他关系。各个数据元素是“平等”的,它们的共同属性是“同属于一个集合”。数据结构中的集合关系就类似于数学中的集合
常用数据结构及其Java实现 - 图1

(2)线性结构中的数据元素之间是一对一的关系
常用数据结构及其Java实现 - 图2

(3)树形结构中的数据元素之间存在一种一对多的层次关系
常用数据结构及其Java实现 - 图3

(4) 图形结构的数据元素是多对多的关系

常用数据结构及其Java实现 - 图4

物理结构

物理结构:是指数据的逻辑结构在计算机中的存储形式。

(1)顺序存储结构:是把数据元素存放在地址连续存储单元里,其数据间的逻辑关系和物理关系是一致的
常用数据结构及其Java实现 - 图5
(2)链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的也可以是不连续的。
这样的话链式存储结构的数据元素存储关系并不能反映其逻辑关系,因此需要用一个指针存放数据元素的地址,这样子通过地址就可以找到相关数据元素的位置。

常用数据结构及其Java实现 - 图6

顺序存储结构和链式存储结构的区别

打个比方说一下顺序存储结构和链式存储结构的区别:
比如去银行取钱,顺序存储结构就相当于,所有的客户按照先来后到的顺序有序的的坐在大厅的椅子上(注意:是有顺序的坐着)。
而链式存储结构相当于,所有的客户只要一到银行,大堂经理就给他们每人一个号码,然后他们可以随便坐在哪个椅子上(随便坐,不需要按照什么顺序坐),只需要等待工作人员广播叫号即可。
而每个客户手里的号码就相当于指针,当前的指针指向下一个存储空间,这样,所有不连续的空间就可以被有顺序的按照线性连接在一起了。

常用数据结构

栈、队列、链表、二叉树、红黑树、散列表、位图等等。
这里列举了常用数据结构及其优缺点

数据结构 优点 缺点
顶部元素插入取出快 除顶部元素外,存储其他元素都很慢
队列 顶部元素插入和尾部元素取出快 存取其他元素很慢
链表 插入,删除都快 查找慢
二叉树 插入、删除、查找都很快 删除算法复杂
红黑树 插入、删除、查找都很快 算法复杂
散列表 插入、删除、查找都很快 数据散列,对存储空间有浪费

栈及其Java实现

后进先出的线性表
栈核心方法。
push(): 向栈中压入一个数据,先入栈的数据在最下边
pop(): 弹出栈顶数据,即移除栈顶数据
peek();返回当前的栈顶数据

队列及其Java实现

先进先出线性表
队列核心方法
add() 向队列的尾部加入一个元素(入队),先入队的元素在最前边
poll(() 删除队列头部元素
peek() 取出队列头部元素

链表及其Java实现

单向链表,双向链表,循环链表