《数据结构与算法 C语言版》—— 1.2数据结构的发展概况

简介:

本节书摘来自华章出版社《数据结构与算法 C语言版》一 书中的第1章,第1.3节,作者:徐凤生,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.3基本概念与术语

计算机科学是研究信息表示和处理的科学,信息在计算机内是用数据表示的。直观地说,数据是用于描述客观事物的数值、字符以及一切可以输入到计算机中并由计算机程序加以处理的符号的集合,是计算机操作的对象的总称。
数据元素是数据的基本单位,它是数据中的一个“个体”,如整数“5”、字符“N”等。有时,一个数据元素可由若干数据项组成,例如,描述一个学生的信息为一个数据元素,学生信息中的每一项(如姓名、学号等)为一个数据项。数据项是数据的不可分割的最小单位。
数据对象是具有相同性质的数据元素的集合,是数据的一个子集。数据元素是数据对象的实例。例如,整数数据对象是集合{0,±1,±2,±3,…}。
数据结构是指相互之间存在一种或多种关系的特性相同的数据元素的集合。根据数据元素之间关系的不同,数据通常有以下四类基本的结构。
1)集合结构:在集合结构中,数据元素之间的关系是“属于同一个集合”。集合是元素关系极为松散的一种结构。
2)线性结构:该结构中的数据元素之间存在着一对一的关系。
3)树形结构:该结构中的数据元素之间存在着一对多的关系。
4)图形结构:该结构中的数据元素之间存在着多对多的关系。由于集合结构是数据元素之间关系极为松散的一种结构,因此也可用其他结构来表示它。图13为上述四类基本结构的关系图。
screenshot

由数据结构的概念可知,数据结构有三个要素:一是数据元素的集合,二是数据元素之间关系的集合,三是定义在其上的操作。在形式上,数据结构可定义为一个二元组:

Data_Structures=(D,S)

其中:D是数据元素的有限集,S是D上关系的有限集。
数据结构包括数据的逻辑结构和物理结构。数据的逻辑结构是对数据元素之间的逻辑关系的描述,它可以用一个数据元素的集合和定义在此集合上的若干关系来表示,与数据的存储无关;数据的物理结构是逻辑结构在计算机中的表示和实现,故又称“存储结构”。
数据结构在计算机中的表示,包括数据元素的表示和关系的表示。在计算机中表示信息的最小单位是二进制的一位,叫做位(bit)。在计算机中,可以用由若干位组合起来的一个位串表示一个数据元素(如用一个字长的位串表示一个整数,用8位二进制数表示一个字符等)。
数据元素之间的关系在计算机中有四种不同的表示方法,下面分别介绍。
(1)顺序存储方法
该方法把逻辑上相邻的元素存储在物理位置上相邻的存储单元里,结点之间的逻辑关系由存储单元的邻接关系来体现。由此得到的存储表示称为顺序存储结构,该结构通常是借助于计算机程序设计语言(例如C、C++)的数组来描述的。
顺序存储方法的主要优点是节省存储空间,因为分配给数据的存储单元完全用于存放数据(不考虑C、C++语言中数组需指定最大存储空间大小的情况),结点之间的逻辑关系不占用额外的存储空间。采用这种方法,可实现对数据的随机存储。但顺序存储方法的主要缺点是不便于修改,对数据进行插入、删除操作时,可能要移动一系列数据。
(2)链式存储方法
该方法不要求逻辑上相邻的元素在物理位置上也相邻,元素之间的逻辑关系是由附加的指针字段表示的。由此得到的存储表示称为链式存储结构,该结构通常是借助于计算机程序设计语言(例如C、C++)的指针类型来描述的。
链式存储方法的主要优点是便于修改,在进行插入、删除操作时,仅需要修改指向相应数据元素的指针,而不必移动数据元素。但与顺序存储方法相比,其主要缺点是存储空间的利用率较低,因为分配给数据的存储单元有一部分用来存储数据元素之间的逻辑关系了。另外,由于逻辑上相邻的数据元素在存储空间上不一定相邻,所以不能对其进行随机存取。
(3)索引存储方法
该方法通常在存储数据元素的同时,还建立附加的索引表。索引表中的每一项称为索引项,索引项的一般形式是:(关键字,地址),关键字唯一标识一个数据元素,地址作为指向该数据元素的指针。这种带有索引表的存储结构可大大提高数据查找的速度。
线性结构中采用索引存储方法后,可对数据元素进行随机存取。在进行插入、删除操作时,只需移动存储在索引表中对应数据元素的存储地址,而不必移动数据元素本身,所以仍能保持较高的数据修改运算效率。索引存储方法的缺点是增加了索引表,降低了存储空间的利用率。
(4)哈希(或散列)存储方法
该方法的基本思想是根据数据元素的关键字,通过哈希函数直接计算出一个值,并将这个值作为该数据元素的存储地址。
哈希存储方法的优点是查找速度快,只要给出待查找数据元素的关键字,就可以立即计算出该数据元素的存储地址。但与前三种存储方法不同的是,哈希存储方法只存储数据元素,不存储数据元素之间的逻辑关系。哈希存储方法一般只适合要求对数据进行快速查找和插入的场合。
上述四种存储方法既可以单独使用,也可以组合起来使用。

相关文章
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
1565 6
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
714 1
|
存储 算法 搜索推荐
【趣学C语言和数据结构100例】91-95
本文涵盖多个经典算法问题的C语言实现,包括堆排序、归并排序、从长整型变量中提取偶数位数、工人信息排序及无向图是否为树的判断。通过这些问题,读者可以深入了解排序算法、数据处理方法和图论基础知识,提升编程能力和算法理解。
228 4
|
9月前
|
存储 监控 安全
企业上网监控系统中红黑树数据结构的 Python 算法实现与应用研究
企业上网监控系统需高效处理海量数据,传统数据结构存在性能瓶颈。红黑树通过自平衡机制,确保查找、插入、删除操作的时间复杂度稳定在 O(log n),适用于网络记录存储、设备信息维护及安全事件排序等场景。本文分析红黑树的理论基础、应用场景及 Python 实现,并探讨其在企业监控系统中的实践价值,提升系统性能与稳定性。
530 1
|
9月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
235 0
|
存储 算法 Java
算法系列之数据结构-二叉树
树是一种重要的非线性数据结构,广泛应用于各种算法和应用中。本文介绍了树的基本概念、常见类型(如二叉树、满二叉树、完全二叉树、平衡二叉树、B树等)及其在Java中的实现。通过递归方法实现了二叉树的前序、中序、后序和层次遍历,并展示了具体的代码示例和运行结果。掌握树结构有助于提高编程能力,优化算法设计。
402 10
 算法系列之数据结构-二叉树
|
算法 Java
算法系列之数据结构-Huffman树
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
388 3
 算法系列之数据结构-Huffman树
|
算法 Java
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
546 22
|
存储 机器学习/深度学习 算法
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
502 30
|
存储 算法 C语言
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
726 25

热门文章

最新文章