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