title: 数据结构概述总览
categories:
- 数据结构算法
tags: - 数据结构
- 概览
数据结构要搞清楚的三个问题
主要内容:数据的逻辑结构、数据的存储在计算机中的存储结构、定义在数据集合上的运算
1.数据的逻辑结构
1.1线性结构
定义:只有一个开始结点和一个终端结点,其余的结点都有且仅有一个前驱结点和一个后继结点
1.2树型结构
定义:有一个开始结点,多个终端结点,除开始结点外,每个结点都有且只有一个前驱结点。像一个根节点出发,不断分叉的树一样。
1.3图形结构
定义:每个结点都可以有多个前驱和后继。像错综复杂的旅游景点路线
2.数据的存储结构
2.1顺序存储
逻辑上连续的数据,在物理存储使用连续的空间存储
典型的采用顺序存储是数组
2.2链接存储
给每个结点添加一个指针段,指向后继结点的存储地址,逻辑上相邻的结点可以存储在不相邻的物理空间上
典型的采用链接存储是单链表
2.3索引存储
索引存储中每一个结点都有一个唯一的索引号,根据结点的索引号确定该结点的存储地址。建立一个索引表,里面存储的是索引号和对应的存储地址,就像书的目录一样,前面是章节索引号,后面的页码就是对应的地址。
2.4散列存储(Hash存储)
散列存储的思想是构造一个从集合K到存储区域M的函数h,该函数的定义域为K,值域为M,其中K为从每个结点中提取的关键字,通过H该结点的存储地址由好h(K)确定。散列存储是通过关键字K来查找的,数据是离散无序的分布的。
3.索引和散列的区别
一直以来我对索引和散列的区别不是很清晰,我现在的理解如下:
它和索引的区别是,索引存储要先通过索引号查找索引表再找到对应地址,而散列只需要通过关键字key,通过函数就可以直接得到地址。表述也许不清楚,举个例子说明吧
索引就像是两个学生都在找寝室,学生A记住了整个学校寝室表内容
(寝室号——寝室地址),而学生B记住了学校寝室号与寝室地址对应的函数关系,那么同样找寝室号为1S508的寝室,学生A,根据1S508在脑子里搜索自己记忆的学校寝室表,找到表中1S508对应的是1栋南5楼8号寝室,而学生B,根据知道的寝室号与地址的对应规则(函数关系),通过1S508从脑子里计算出地址为1栋南5楼8号寝室。
3.数据的运算集合
内容:数据的运算集合定义在数据的逻辑结构上,依赖数据在计算机中的存储结构来实现。
常用的运算包括插入、删除、增加等