要理解一个数据结构,我们可以将数据结构抽象出一个层面
由三部分来组成,数据的逻辑结构,数据的存储结构和数据的运算
数据结构的分类
1,线性结构
线性结构是非空集
线性结构有且仅有一个开始节点和终端节点
线性结构的所有节点最多只有一个直接前驱节点和一个直接后继节点
比如:栈,队列
2,非线性结构
非线性结构是非空集
非线性结构的一个节点可能有多个直接前驱节点和直接后继节点
比如:树(有且仅有一个前驱节点,可以有多个后继节点),图
数据结构的存储方式:
顺序存储,物理上在一块连续的存储空间一个接一个存放数据
链式存储,不要求逻辑上相邻的节点在物理上也相邻,节点间的逻辑关系由附加的引用字段来表示,引用字段指向下一个节点的存放位置。
索引存储,采用附加的索引表来存储节点信息的一种存储方式
散列存储,根据节点的关键字进行运算后,计算出该节点的存储位置的一种存储方式
他们三者的关系:
1,逻辑结构与存储结构的关系
比如,同一个逻辑结构采用不同的存储结构,就会变成不同的数据结构
举个例子,线性表如果采用顺序存储,那么这种数据结构就是顺序表
如果采用链式方式存储,那么就是链表
如果采用散列方式存储,那么就是散列表
2,逻辑结构与数据运算的关系
如将线性表的插入运算限制在表的一端,而删除操作限制在表的另一端,那么就是队列
如果将线性表的插入和删除都限制在表的一端,那么就是栈。
不知道,你有点感觉了没有?
常用的数据结构有哪些?
数组Array,栈Stack,队列Queue,链表LinkedList,树Tree,图Graph
堆Heap
堆是一种特殊的树,一般指二叉堆,堆的特点是其根节点的值是所有节点中最小的或者最大的,并且根节点的两个子树也是一个堆结构
散列表Hash
数据结构在什么地方发挥作用?
计算机的运算主要分为两类,数值计算和非数值计算。
而数据结构主要是在非数值计算发挥较大的作用。
比如在一堆的数据信息中,寻找符合我们要求的数据,就这就是一种非数值的计算。