| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> (一)数据结构绪论 -> 正文阅读 |
|
[数据结构与算法](一)数据结构绪论 |
专栏:数据结构与算法分析 下一篇:(二)算法分析 文章目录什么是数据结构(Data Structures)??随着计算机运行速度的不断提高和存储容量的持续增长,计算机的功能日益强大,从而处理数据和解决问题的规模和复杂程度与日俱增。这不仅带来了需要认真研究的新课题,而且突出了原有数据结构和算法效率低下的缺点。为了解决这方面的问题,发展出了 “数据结构” 这一门学科。
?? 一、数据结构的基本概念和数据??数据结构主要研究的是计算机组织和存储大量数据的方式,那数据是什么呢? 1. 数据(data)??数据 是指所有能输入到计算机中并被计算机程序处理的信息的总称。一切能被编码的信息都可以称之为数据,如声音、图像等可以以某种方式编码成二进制数值后输入到计算机中进行处理。 2. 数据相关的基本概念2.1 数据元素(data element)??数据元素 是组成数据的,有一定意义的基本单位。数据元素在计算机程序中通常作为一个整体进行考虑和处理。 2.2 数据项(data item)??一个数据元素可由多个数据项组成。例如一本书的书目信息为一个数据元素,书目信息中的每一项(如书名、作者名、出版社等)为一个数据项。数据项是数据的不可分割的最小单位。 2.3 数据对象(data object)
?性质相同是指数据元素具有相同数量和类型的数据项。 2.4 数据结构(data structure)
??在计算机中,数据元素并不是孤立、杂乱无序的,而是具有内在联系的数据集合。数据元素之间存在一种或多种特定关系,这种数据元素相互之间的关系称之为结构(structure),通常有4类基本结构(逻辑结构):① 集合 ② 线性结构 ③ 树形结构 ④ 图状结构 。 二、数据的逻辑机构和物理结构
1. 逻辑结构
??在具有相同特征的元素集合中,各个数据元素之间存在着某种关系。这种关系反映了该集合中数据元素所固有的一种结构,我们称之为 逻辑结构。 ??逻辑结构分为以下四种:
1.1 集合??集合 中的数据元素除了同属于一个集合外,它们之间没有关系。如同数学中的集合。 1.2 线性结构??线性结构 中的数据元素之间存在着一对一的线性关系。(关系表示中的箭头未画出,线性结构箭头指向为从左到右,即一存在关系的两个数据元素,左边为前件,右边为后件)
1.3 树形结构??树形结构中的数据元素之间存在着一种一对多的层次关系。数据元素之间有明显的层次关系,并且每一层上的数据元素可能和下一层中的多个元素相关,但只能和上一层中的一个元素相关。
1.4 图状结构??图状结构 的数据元素是多对多的关系。数据元素之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。
2. 存储结构??数据结构在计算机中的表示称为存储结构 ,又称 物理结构。 物理结构包含数据元素的表示和逻辑关系的表示。
2.1 顺序存储 和非顺序存储??这些存储结构分为两类,一种是顺序存储,一种是非顺序存储。 ??在顺序存储中,数据元素按一定的顺序连续地存储在存储器中,这些元素的相对位置是固定的,只需要知道数据元素之间的逻辑关系和其中一个数据元素的存储位置,直接就能计算出全部数据元素的位置。
2.2 四种存储结构??数据元素的存储结构一般来说有四种: 顺序存储 、 链式存储、索引存储 和 散列存储。
??链式存储、索引存储和散列存储属于非顺序存储,因为这几种存储结构都需要提供额外位置信息才能知道数据元素的位置,并且数据元素的存储位置并不要求连续。
2.2.1 顺序存储结构??顺序存储结构是把数据元素存放在地址连续的存储单元中,并按照某种固定的位置对应关系表示数据元素之间的逻辑关系。 ??例如逻辑关系为线性结构的几个数据元素,以顺序存储的方式,将会被存储在一组地址连续的存储单元中,并且,假设每个元素需要占用 l l l个存储单元元素存储位置关系满足第 i + 1 i+1 i+1 个元素与第 i i i个元素存储位置相差为 l l l。 ??一般来说,如果第 i i i 个元素的存储位置为 A i A_{i} Ai?,那么第 i + 1 i+1 i+1个元素的存储位置为 A i + l A_{i} + l Ai?+l。
??对于逻辑关系为树形结构的数据元素来说,我们可以按固定顺序给数据元素编号,然后按编号顺序存储在连续的存储单元中。
2.2.2 链式存储结构??链式存储结构为非顺序存储结构,元素在存储器上存储位置允许不连续,可以按任意顺序存放。与元素有逻辑关系的元素的存放位置,由额外的位置信息确定。在链式存储结构中,通常将数据元素和与其有逻辑关系的元素的位置信息一同存储,称为结点。 ??在链式存储中,与某一个元素有逻辑关系的其它元素的位置,需要读取该元素对应结点的位置信息。如果想按顺序访问所有元素,需要从第一个结点开始逐个读取才能依次找到下一个元素的位置,直至访问完所有元素。
2.2.3 索引存储结构??索引存储结构是将原来一个集合中的数据元素分成多个子集,各个子集的元素分别存储,再额外创建一个索引结构来保存子集所存储的位置信息。
??索引存储结构的优势在于,既有非顺序存储结构可不连续存储的优势,同时又不像链式存储结构那样查找元素需要依次访问结点,减少了访问次数。对外部存储器这种慢速设备进行搜索时,索引存储结构就很有优势。只需将小空间的索引表(树)读取到内存中,搜索完成后再去小范围查找对应文件,减少对外存的访问次数,提高查找效率。 2.2.4 散列存储结构??散列存储结构是建立一个由元素关键字直接对应到存储位置的映射关系,然后由元素关键字来确定元素存储位置的一种存储结构。这个映射关系称为散列函数,散列的英文是 Hash,所以又音译为哈希函数。
??散列存储结构最重要的是如果构建出合适的散列函数。如果函数映射出的位置过于分散,那么会造成过多的内存空间浪费。同时,不同元素的关键字通过散列函数映射得到的存储位置可能一致,此时又会有冲突问题,可以创建一个子表来存储冲突的元素,也可以通过再次计算等方式来重新安排元素的存储位置。 专栏:数据结构与算法分析 下一篇:(二)算法分析 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:41:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |