Heycm

Heycm

常见数据结构(一)

2022-04-30

线性表(Liner List)

线性表是最基本的一种数据结构,是 n 个具有相同特征的数据元素的有限序列。

从逻辑上称(不考虑物理存储),表中元素是相邻的,相邻元素之间存在序偶关系,表头有且仅有一个直接后继,表尾有且仅有一个直接前驱,其他元素有且仅有一个直接后继和一个直接前驱。
image.png

从物理存储考虑,线性表区分顺序存储和链式存储,链式存储又可以细分为单向链表、双向链表、循环链表等。

线性表
|----- 顺序存储
|----- 链式存储
|--------- 单项链表
|--------- 双向链表
|--------- 循环链表
|--------- 其他

顺序存储

用一组地址连续的存储单元依次存储表中的数据元素,元素之间的物理位置相邻。

链式存储

链表由一个或多个节点组合而成,节点由两部分构成(数据域和指针域),一般物理存储单元并非连续,而是由指针域(存储下一个节点的地址)将多个节点连接,是逻辑上的线性表。

image.png


栈(Stack)

栈是限定仅在表尾执行插入或删除的线性表。对于栈来说,表尾是栈顶,表头是栈底,因为只能在栈顶进行插入或删除,也称 后进先出(LIFO) 线性表。
image.png

JVM 内存模型中,有一个 虚拟机栈 ,其数据结构如此,描述着 Java 方法执行的内存模型。当线程执行到每个方法时,都会创建一个栈帧压栈,每个方法从调用到执行完成的过程,都对应着一个栈帧从入栈到出栈的过程,而栈顶即对应着当前正在执行的方法。

队列(Queue)

队列是限定仅在表尾执行插入、表头执行删除的线性表。对于队列来说,表尾是队尾,表头是队头,因为只能在表尾插入、表头删除,也称 先进先出(FIFO) 线性表。

image.png

数组

区别于编程语言中的具体数据类型,数组与顺序表、链表、栈、队列一页,是一种用来存储具有“一对一”逻辑关系的线性存储结构。不仅如此,数组和其他线性存储结构不同,数组既可以存储不可再分的数据元素,同时也可以用来存储像顺序表、链表这样的数据结构。

比如,数组可以直接存储多个顺序表,又因为顺序表底层的实现还是数组,因此等价于数组中继续存储数组。

因此,一维数组结构是线性存储结构的基本表现形式,而多维数组是对线性存储结构的一种扩展。

一维数组
image.png

二维数组
image.png

image.png