数据结构的概念
计算机存储及组织数据的方式,不同的数据结构方式运行的效率存在比较大的差异。
数据的逻辑结构
线性结构
线性表是线性结构的基本表现
线性表常见的两种存储结构
顺序存储结构顺序表
开辟连续的空间,顺序的将内容存储进去,每一个存储单元只存储数据内容,类似于一维数组存储方式,但是数组元素从0开始计数,顺序表中元素从1开始计数。
链式存储结构链表
链表的存储开辟的空间不一定是连续的,有可能是多段不连续的空间,将每个存储单元一部分存储数据一部分存储指针,指针指向下一个存储空间,以此形成链。
链表头节点
链表分为带头节点的链表和不带头节点的链表,如果没有头节点即头节点中存放第一个元素,那么此时这个元素的处理方式会与其他节点中元素的处理方式有所不同;引入头节点即头节点后的节点中存放第一个元素,此时可以将链表中所有节点的操作方式变成一致的。
单链表
单链表只有一套单向指针,从head开始指到末尾,每次查询其中的某个元素都需要定位到head,从头开始查询。
单链表删除节点
单链表插入节点
循环链表
循环链表只有一套单向指针,是在单链表的基础上将末尾连接到头部,在循环链表中想要查询某个元素不需要定位到头部再开始查询,可以直接开始查询。
双向链表
双向链表中,每个存储单元有两个指针,分别指向下一个存储单元和上一个存储单元。
顺序存储和链式存储比较
空间性能 | 顺序存储 | 链式存储 | 备注 |
存储密度 | =1(即100%)更优 | <1 (不到100%) | 顺序存储中,开辟出的每一块空间都存储了数据元素,完全利用了空间 链式存储中,开辟出的每一块空间并不完全存储数据元素,还有一部分存储指针,所以并未完全利用空间 |
容量分配 | 事先确定 | 动态分配 更优 | 顺序存储中,分配的空间是连续的,因此需要事先确定需要多少空间,然后系统进行一次性分配 链式存储中,分配的空间并不是连续的,所以不需要事先固定需要多少空间,可以随时申请随时分配,只需要指针指向新分配的地址形成链即可 |
时间性能 | 顺序存储 | 链式存储 | 备注 |
查找运算 | 数据无序时相同 数据有序时更优 | 数据无序时相同 数据有序时更差 | 数据无序 顺序存储中、链式存储中进行查找都是从头到尾依次查找因此数据无序时二者耗时相同 数据有序 在有序数据中如果设计二分法查找等此时顺序存储耗时更短 |
读运算 | 更优 | 最好的情况是在第一位置直接找到;最差是在最后位置找到 | 读运算是指读取指定的元素 顺序存储中可以直接去读取元素 链式存储中不能直接读取,而是需要定位到头部,然后根据指针一步一步指向指定的元素。 |
插入运算 | 最好的情况是在末尾直接插入;最差是在头部插入所有元素全部后移 | 更优 | 顺序存储中想要在中间插入元素,需要从插入位置起到顺序存储末尾,所有元素都后移一位 链式存储中想要在中间插入元素只需要改动与插入位置两个相邻的指针的指向即可 |
删除运算 | 最好的情况是删除末尾元素;最差是删除头部元素,全部元素前移 | 更优 | 顺序存储中想要在中间删除元素,需要从删除位置起到顺序存储末尾,所有元素都前移一位 链式存储中想要在中间删除元素只需要改动与删除位置两个相邻的指针的指向即可 |
非线性结构
树
树结构内部不存在环路
图
图结构里面存在环路
图结构可以包含树结构,树结构可以包含线性结构