开发者社区> 华章计算机> 正文

《数据结构与算法 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)哈希(或散列)存储方法
该方法的基本思想是根据数据元素的关键字,通过哈希函数直接计算出一个值,并将这个值作为该数据元素的存储地址。
哈希存储方法的优点是查找速度快,只要给出待查找数据元素的关键字,就可以立即计算出该数据元素的存储地址。但与前三种存储方法不同的是,哈希存储方法只存储数据元素,不存储数据元素之间的逻辑关系。哈希存储方法一般只适合要求对数据进行快速查找和插入的场合。
上述四种存储方法既可以单独使用,也可以组合起来使用。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C语言 | 数据结构—约瑟夫环问题
目录 首先什么是约瑟夫环 约瑟夫环实现方式 一、创建结构体变量 二、初始化链表 三、构建循环链表 四、删除链表 五、完整代码及注释讲解 首先什么是约瑟夫环 约瑟夫环是循环链表中的一个经典问题;题目描述:n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1 开始报数,数到 m 的人再出圈,依次类推,直到所有的人都出圈; 假设10个人围成一圈,依次编号1到10,按从小到大顺序报数,报到3的人出局,流程示意图如下 约瑟夫环实现方式 我个人倾向于循环链表; 一、创建结构体变量 typedef struct Node{ int data; //数据域 st
58987 0
c语言数据结构冒泡|选择|插入|希尔
目录 冒泡排序: 选择排序: 插入排序: 希尔排序: 冒泡排序: 原理:基于交换的排序,每一轮将序列中的最大值(最小值)放到数组的尾部。使用循环重复操作,(每轮排序都会少一个最大值或最小值),当最后只剩下一个数据的时候整个序列就已经排好序了。 代码思路:从第一个数开始,每一次在数组中选两个数继续比较,如果前面的数大于后面的数,就将两者交换位置,第一次是1,2两个位置比较,第二次就是2,3两个位置比较,以此类推 //采用两层循环实现的方法 //arr是待排序数组的首地址,n是数组元素个数 void bubblesort1(int* arr, int n) { if (n < 2)
13 0
C语言|数据结构——树的定义、存储与遍历
基本概念 定义: 1.有且只有一个称为根的节点; 2.有若干个互不相交的子树,这些子树本身也是一棵树; 3.由节点和边组组成的; 4.每个节点只有一个父节点,可以有无数个子节点(除了根节点)。 分类: |一般树。任意一个子节点个数不受限制,可以是有序树也可以是无序树。 |二叉树。任意一个节点最大度为2,二叉树是有序树,左右节点不能随意互换。 | 一般二叉树 |满二叉树。每一层节点都是满的。 |完全二叉树。除最后一层外,每一层节点都是满的,最后一层节点一定从左向右连续排列。 |森林。n个互不相交的树的集合,可以是互不相连的几个树 一些专业术语: 父节
25 0
C语言数据结构(队列、循环队列)
C语言数据结构(队列、循环队列)
17 0
C语言实现校运会管理系统(数据结构链表)
C语言实现校运会管理系统(数据结构链表)
38 0
【数据结构】C语言实现顺序栈 && OJ题 —— 有效的括号
【数据结构】C语言实现顺序栈 && OJ题 —— 有效的括号
21 0
【数据结构】动态顺序表(C语言实现)2
【数据结构】动态顺序表(C语言实现)
16 0
【数据结构】动态顺序表(C语言实现)
【数据结构】动态顺序表(C语言实现)
20 0
【数据结构】栈的链式存储:链栈的C语言实现
【数据结构】栈的链式存储:链栈的C语言实现
21 0
【数据结构】顺序栈的C语言实现(通过顺序表实现栈的顺序存储)
【数据结构】顺序栈的C语言实现(通过顺序表实现栈的顺序存储)
14 0
文章
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
Apache Flink 流式应用中状态的数据结构定义升级
立即下载
如何使用Tair增强数据结构构建丰富在线实时场景
立即下载
低代码开发师(初级)实战教程
立即下载