数据结构
简单的讲就是数据在计算机中的存储方式。
常用的数据存储方式有两种:顺序存储,非顺序存储。顺序存储就是把数据存储在一块联系的存储介质(硬盘或内存等)中。反之就是非顺序存储咯。Java中的数组就是典型的顺序存储,链表就是非顺序存储。数组存储数据时会开辟出一块联系内存,按顺序存储。链表先不会开辟出一块内存来,而是只需要知道下一个节点存储的位置,就能把所以的数据连起来了。所以单向链表的最后一个节点是指向Null的。
Array - 数组
特点:
- 数据在数组中是连续的。
- 查找快速,插入删除繁琐。
- 查询Access:O(1)。
- 插入Insert:平均O(n)。
- 删除Delete:平均O(n)。
Linked List - 链表
特点:
- 数据在链表中是连续的,但是数据的存放位置是不连续的。
- 链表有指针指向上一个,下一个,头部或者尾部。
- 查找慢,插入删除快速。
- 查询Access:O(n)。
- 插入Insert:O(1),头部插入prepend:O(1),尾部插入append:O(1)。
- 删除Delete:O(1)。
- 链表有单链表,双链表。
在java中创建链表的过程和创建数组的过程不同,不会先划出一块连续的内存。因为链表中的数据并不是连续的,链表在存储数据的内存中有两块区域,一块区域用来存储数据,一块区域用来记录下一个数据保存在哪里(指向下一个数据的指针)。当有数据进入链表时候,会根据指针找到下一个存储数据的位置,然后把数据保存起来,然后再指向下一个存储数据的位置。这样链表就把一些碎片空间利用起来了,虽然链表是线性表,但是并不会按线性的顺序存储数据。
数据结构包括:线性结构和非线性结构。
线性结构
1)线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。
2)线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的。
3)链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息。
4)线性结构常见的有:数组、队列、链表和栈,后面我们会详细讲解。
非线性结构
非线性结构包括:二维数组,多维数组,广义表,树结构,图结构。