数据结构
指相互之间存在一种或多种特定关系的数据元素的集合,即对象间逻辑关系。
数据存储结构
用来描述数据在计算机中的存储方式;
常用的数据存储方式就两种:
顺序存储 -- Array、ArrayList、Queue
非顺序存储 -- 链表、Tree
常见数据结构
-
数组
数组是使用一块连续的内存空间保存数据,数组的容量在分配内存时就已经确定。
数组的查找操作时间复杂度是O(1),但是删除和插入的复杂度是O(n),且如果两者操作的不是在尾部,则会导致数组元素的移动。
删除数值3:
-
链表
1.单链表
链表是在非连续的内存单元中保存数据,并且通过指针将各个内存单元链接在一起,最后一个节点的指针指向 NULL 。
链表不需要提前分配固定大小存储空间,当需要存储数据的时候分配一块内存并将这块内存插入链表中。
在链表中查找第 n 个数据以及查找指定的数据的时间复杂度是 O(N) ,但是插入和删除数据的时间复杂度是 O(1) ,因为只需要调整指针就可以:
插入元素:
2.双链表
双链表,就是节点中包含指向下一个节点的指针和指向上一个节点的指针
3.循环链表
即双向链表的头尾相接
4.优点
(1)使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。
(2)数据的存取往往要在不同的排列顺序中转换,而链表是一种自我指示数据类型,因为它包含指向另一个相同类型的数据的指针(链接)。链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。
5.缺点
失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。
-
队列(FIFO)
1.概念定义
一般队列只允许在队尾添加数据,在队头删除数据。
- 队列的方法
add(E e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException。返回boolean。
element() 获取不移除此队列的头,如果此队列为空,则抛出NoSuchElementException,返回泛型E。
offer(E e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。返回boolean。
peek() 获取不移除此队列的头,如果此队列为空,则返回 null。返回泛型E。
poll() 获取并移除此队列的头,如果此队列为空,则返回 null。返回泛型E。
remove() 获取并移除此队列的头。返回泛型E。
1.优点
(1)保证数据的有序性,先到先处理。
(2)插入数据快速
2.缺点
(1)遍历数据较为缓慢