数据结构基本概念

本文深入解析数据结构核心概念,涵盖数据、数据元素、关键字、主关键字等基础定义,阐述数据结构、存储结构与数据操作三要素,探讨线性、树、图结构特性,以及顺序、链式存储方式,为高效软件设计奠定坚实基础。

为什么要学数据结构

直接引用瑞士Niklaus Wirth教授的一句经典名言:

数据结构+算法=程序设计

两个字回答:

效率

程序员在软件(程序)设计考虑的首要问题就是数据的表示、组织和处理方法,因为这直接关系到软件的工程化程度和软件的运行效率。而我们学习数据结构的目的也正是要掌握处理数据和编写高效率软件的基本方法。

什么是数据结构

  1. 在了解数据结构之前,先来了解几个基础概念:
  • 数据
    数据(Data)是描述客观事物的数字、字符以及所有能输入到计算机中并能被计算机接受的各种符号集合的统称。数据是信息的符号表示,是计算机程序的处理对象。除了数值数据外,计算机能够处理的数据还有字符串等非数值数据,以及图形、图像、音频、视频等多媒体数据。
  • 数据元素
    表示一个事物的一组数据称作一个数据元素(Data Element),数据元素是数据的基本单位。一个数据元素可以是一个不可分割的原子项,也可以由多个数据项组成。
  • 数据项
    数据项(Data Item)是数据元素中有独立含义的、不可分割的最小标识单位。例如,一个整数、一个字符都是原子项;一个学生数据元素由学号、姓名、性别和出生日期等多个数据项组成。
  • 关键字
    一个数据元素中,能够识别该元素的一个或多个数据项称为关键字(Keyword)。
  • 主关键字
    能够唯一识别数据元素的关键字称为主关键字(Primary Keyword)。
  1. 数据结构概念包含三方面:
  • 数据的逻辑结构
  • 数据的存储结构
  • 对数据的操作
数据的逻辑结构

数据的逻辑结构是指数据元素之间的逻辑关系,用一个数据元素的集合和定义在此集合上的若干关系来表示,常被简称为数据结构。
根据数据元素之间逻辑关系的不同数学特性,数据结构分为三种:

  • 线性结构
  • 树结构

其中树和图是非线性结构。以图示法表示数据的逻辑结构下图所示,一个圆表示一个数据元素,圆中的字符表示数据元素的标记或取值,连线表示数据元素之间的关系。
在这里插入图片描述
(1)线性结构
线性结构是数据元素之间具有线性关系的数据结构。线性表(a0,a1,…,an-1)是由 n(≥0)个类型相同的数据元素a0,a1,…,an-1组成的有限序列,若n=0,为空表;若n>0,ai(0<i<n-1)有且仅有一个前驱元素ai-1和一个后继元素ai+1,a0没有前驱元素,an-1没有后继元素。采用序号(Index)确定数据元素在线性结构中的逻辑次序。 数据元素可以是一个数、字符、字符串或其他复杂形式的数据。例如,整数序列{1,2,3,4,5},字母序列{‘A’,‘B’,‘C’,…,‘Z’},下表所示的学生序列都是线性表,数据元素之间具有顺序关系。
在这里插入图片描述
上表中,学生数据元素由“学号”、“姓名”、“年龄”等多个数据项组成,“姓名”可以作为标识一个学生的关键字;“学号”是能够唯一标识一个学生的主关键字。

(2)树结构
树结构是数据元素之间具有层次关系的一种非线性结构,树中数据元素通常称为结点。树结构的层次关系是指,根(最顶层)结点没有前驱结点(称为父母结点),除根之外的其他结点有且仅有一个父母结点,所有结点可有零到多个后继结点(称为孩子结点)。在文章第一幅图中,A是树的根结点,B结点有一个父母结点A,有3个孩子结点E、F和G。家谱、Windows文件系统的组织方式、淘汰赛的比赛结果等都是树结构。淘汰赛的比赛结果是一棵满二叉树,如下图所示,其中数据是2010年南非世界杯足球赛淘汰赛的比赛结果。
在这里插入图片描述
(3)图
图也是非线性结构,每个数据元素可有多个前驱元素和多个后继元素。例如,交通道路图、飞机航班路线图等都具有图结构。下图是从南京飞往昆明的航班路线图,有直飞航班,也有经停重庆或长沙的航班,边上的数值表示两地间的千米数。
在这里插入图片描述

数据的存储结构

数据元素及其关系在计算机中的存储表示或实现称为数据的存储结构,也称为物理结构。软件系统不仅要存储所有数据,还要正确地表示出数据元素之间的逻辑关系。
数据的逻辑结构从逻辑关系角度观察数据,它与数据的存储无关,是独立于计算机的。而数据的存储结构是逻辑结构在计算机内存中的实现,它是依赖于计算机的。
数据存储结构的基本形式有两种:

  • 顺序存储结构
  • 链式存储结构

(1)顺序存储结构
顺序存储结构使用一组连续的内存单元依次存放数据元素,数据元素在内存中的物理存储次序与它们的逻辑次序相同,即每个元素ai与其前驱元素ai-1及后继元素ai+1的存储位置相邻。这样,数据元素的物理存储次序体现它们之间的逻辑关系。
通常,使用程序设计语言中的数组实现顺序存储结构。
(2)链式存储结构
链式存储结构使用若干地址分散的存储单元存储数据元素,逻辑上相邻的数据元素在物理位置上不一定相邻,数据元素间的关系需要采用附加信息特别指定。通常,采用指针变量记载前驱或后继元素的存储地址,由数据域和地址域组成的一个结点表示一个数据元素,通过地址域将相互直接关联的结点链接起来,结点间的链接关系体现数据元素间的逻辑关系。
线性表可采用上述两种存储结构。线性表(a0,a1,…,an-1)的两种存储结构如图下所示。
在这里插入图片描述
① 采用顺序存储结构存储线性表(a0,a1,…,an-1),数据元素占用所有存储空间,各元素ai连续存储,逻辑上相邻的数据元素ai-1、ai和ai+1在存储位置上也相邻,数据的存储结构体现数据的逻辑结构。
② 采用链式存储结构存储线性表(a0,a1,…,an-1),各元素ai分散存储,每个元素ai占用一个结点(Node)存储单元,结点结构如下:
在这里插入图片描述
其中,数据域存储数据元素ai,地址域存储元素ai的前驱和(或)后继结点的地址。结点间的链接关系体现数据的逻辑结构。一条链式存储的线性表必须使用一个地址域(称为头指针)记住元素a0的结点地址。
如果一个数据元素由多个数据项组成,则数据域有多个。例如,学生信息线性表的顺序和链式存储结构如图下图所示。
在这里插入图片描述
顺序存储结构和链式存储结构是两种最基本、最常用的存储结构。除此之外,将顺序存储结构和链式存储结构进行组合,还可以构造出一些更复杂的存储结构。

对数据的操作

每种数据结构都需要一组对其数据元素实现特定功能的操作(运算或处理),包含以下一些基本操作,此外根据其自身特点,还需要一些特定操作。

  • ① 初始化。
  • ② 判断是否空状态。
  • ③ 存取,指获得、设置指定元素值。
  • ④ 统计数据元素个数。
  • ⑤ 遍历(Traverse),指按照某种次序访问一个数据结构中的所有元素,并且每个数据元素只被访问一次。遍历一个数据结构,将得到一个所有数据元素的线性序列。
  • ⑥ 插入(Insert)、删除(Remove)指定元素。
  • ⑦ 查找(Search),指在数据结构中寻找满足给定条件的数据元素。
  • ⑧ 排序(Sort),指将数据元素按照指定关键字值的大小递增(或递减)次序重新排列。

对数据的操作定义在数据的逻辑结构上,实现对数据的操作依赖于数据的存储结构。例如,线性表包含上述一组对数据的操作,采用顺序存储结构或链式存储结构,都可实现这些操作。

后记

相信上面的内容已经很好的诠释了数据结构的基本概念,一定要明确:

  • 数据的逻辑结构
  • 数据的存储结构
  • 对数据的操作

分别包含什么内容,只有这样才能进行下一步的研究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SunnyRivers

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值