一、数据结构定义
计算机存储与组织数据的方式,一种或多种特定关系的数据元素的集合。
二、数据结构的作用
提升程序的运行效率,节省系统内存资源。不同的数据结构有不同的应用场景。
三、常见的数据结构
数组(array)
连续存储,线性结构,方便查找,方便修改(o(1))
不方便插入,不方便删除(o(n))
特点:
- 在内存中开辟一块连续的空间
- 一个数组可以拆分为多个数组,多个数组也可以合并为一个数组
- 通常情况下,一个数组中的每个元素都是同一个类型的,这也决定了数组的类型
- 数组可以是一维、二维、多维
链表(linkedlist)
在物理上非连续、非顺序的数据结构,是由若干个节点组成的
单链表
每个节点包含两个部分,分别是当前节点的数据和下一个节点的指针
双链表
每个节点包含三个部分,分别是上一个节点的指针和当前节点的数据和下一个节点的指针
循环链表
拥有双链表的基本特点,并且最后一个节点的下一个指针指向的是第一个元素,第一个元素的上一个指针指向的是最后一个元素
特点:
- 不需要初始化容量,可以任意添加和删除元素
- 查询效率低,插入和删除效率高,因为每个元素都要存储其它节点的指针,因此占用空间大
堆栈(stack)
栈
是一种线性结构,先进后出
支持两个基本操作:
- push用于将元素压入栈
- pop用于删除栈顶元素
跟数组的区别是:
数组取出元素时,数组中的数据还在;
从栈顶取出元素时,是直接将元素吐出来,栈中不再存储该元素
队列(queue)
是一种线性结构,先进先出,只允许在一端进行插入,在另一端进行取出,队列中没有元素时,称之为空队列
哈希表(hash)
又称散列表,根据键值(k/v)进行直接存储或访问的数据结构
优点
- 对于一些大数据多数据,哈希表处理起来比较轻松
- 能够快速的进行增删改查等操作
- 代码简单
缺点
- 在哈希函数处理某些元素的时候,不免出现下标重复相同的情况,这种情况可以称作为冲突
- 哈希表中的数据都是没有顺序的
二叉树(tree)
每个节点至多有两个子节点