数据结构与程序的关系_详解什么是数据结构? 如何学习数据结构

一、相关概念

正式了解数据结构之前,先来了解一些相关概念。

①数据:所有能够输入到计算机中,且能被计算机处理的符号的集合。

②数据元素:是数据(集合)中的一个“个体”,它是数据的基本单位,如二维表中一行记录。

③数据项:数据项是用来描述数据元素的,它是数据的最小单位,如二维表中一行记录的任一属性值。

④数据对象:具有相同性质的若干个数据元素的集合,如整数数据对象是所有整数的集合。默认情况下,数据结构中讨论的数据都是数据对象。

⑤结构化数据,即行数据,存储在数据库中,可以用二维表结构来逻辑表达实现的数据。数据结构中主要讨论结构化数据。

⑥数据的逻辑结构:数据元素之间的逻辑关系。

⑦数据的存储结构:数据元素及其关系在计算机存储器中的存储方式。

⑧数据运算:施加在该数据上的操作。

二、认识数据结构

数据结构:是指带结构的数据对象,如下图所示。

e52447830bc4b37a106c6b19ee1c6318.png

数据结构中讨论的数据元素关系主要是指相邻关系或邻接关系,如下图所示。

db6c5445f1cbb5d3ce7b9da82ed7d133.png

一个数据结构具体可以分解为逻辑结构、存储结构和数据运算三部分。

(1)逻辑结构

各种各样的数据呈现出不同的逻辑结构,归纳为4种。

① 集合

元素之间关系:无。

特点:数据元素之间除了“属于同一个集合”的关系外,别无其他逻辑关系。是最松散的,不受任何制约的关系。

f3aa28e4b34cd7a16908f22212eebf65.png ② 线性结构

元素之间关系:一对一。

特点:开始元素和终端元素都是唯一的,除此之外,其余元素都有且仅有一个前驱元素和一个后继元素。

71b4707486763bf63272e81c54473470.png ③ 树形结构

元素之间关系:一对多。

特点:开始元素唯一,终端元素不唯一。除终端元素以外,每个元素有一个或多个后续元素;除开始元素外,每个元素有且仅有一个前驱元素。

fb80bb4d0afd9e4d78ac95a455ead2da.png ④ 图形结构

元素之间关系:多对多。

特点:所有元素都可能有多个前驱元素和多个后继元素。

699a0884b8cd9d694e931c2f1865ef28.png

知道了逻辑结构的类型后,那么这些数据的逻辑结构又该如何表示和描述呢?表示方法主要有如下几种:

① 表格 9a971776abea2a9cab24f4136bf0bef0.png ② 二元组 一个二元组表示为:B=(D,R)

其中,B是一种数据结构,它由数据元素的集合D和D上二元关系的集合R所组成。D={ di | 1≤i≤n,n≥0}:数据元素的集合;

R={ rj  | 1≤j≤m,m≥0}:关系的集合。

每个关系rj用若干个序偶来表示:序偶(x,y∈D)

其中,x为y的前驱元素,y为x的后继元素。若某个元素没有前驱元素,则称该元素为开始元素;若某个元素没有后继元素,则称该元素为终端元素。序偶表示x、y是有向的,序偶(x,y)表示x、y是无向的。

像上表用二元组表示:D={20001,21026,20146,20078,20465,19035,20099},R={<20001,21026>,<21026,20146>,<20146,20078>,<20078,20465>,<20465,19035>,<19035,20099>}。

③ 图形 71b4707486763bf63272e81c54473470.png ④ 括号表示法

(20001,21026,20146,20078,20465,19035,20099)

(2)存储结构

数据在计算机存储器中的存储方式就是存储结构。它是面向程序员的。将逻辑结构映射成存储结构,应满足两个要求:存储所有元素;存储数据元素间的关系。在软件开发中,人们设计了各种存储结构,归纳为4种基本的存储结构:顺序存储结构、链式存储结构、索引存储结构、哈希(散列)存储结构。

① 顺序存储结构

顺序存储结构采用数组形式进行存储,又因为数据元素由多个数据项组成,最后采用结构体数组进行,如下图所示。这种存储结构的特征:所有元素占用一整块内存空间;逻辑上相邻的元素,物理上也相邻;具有数组的随机存取特性。

2ae6c4281f9e913df0b5a0517e4b71c5.png ② 链表存储结构

链式存储结构采用链表的形式进行存储,依旧因为数据元素由多个数据项组成,将数据元素定义为结构体来存储每个数据项,如下图所示。这种存储结构的特点:一个数据元素用一个结点(结构体)存储,每个结点单独分配存储空间,所有结点的地址不一定是连续的;用指针将各个结点按逻辑关系(即邻接关系)链接起来。

f117aa5136998f397e6214bec598599f.png

(3)数据运算

数据运算是对数据的操作。分为两个层次:运算描述(用语言描述要做什么操作和运算,如查找性别为“女”的学生记录)和运算实现(程序代码具体实现)。

三、数据结构作用

在C、Java等高级程序语言中提供了多种数据类型。数据类型是一个值的集合和定义在此集合上的一组操作的总称。最直观表现:不同数据类型的变量,其所能取的值的范围不同,所能进行的操作不同。那么数据类型和数据结构有什么关系呢?数据类型就是已经实现了的数据结构。由此及彼,我们来看一下抽象数据类型。

抽象数据类型(ADT)指的是从求解问题的数学模型中抽象出来的数据逻辑结构(涵盖了数据对象和数据关系)和运算(抽象运算),而不考虑计算机的具体实现。还记得前边说过“一个数据结构具体可以分解为逻辑结构、存储结构和数据运算三部分”吗?这样使用数据结构求解问题的过程就有了。

1a50b3e00b0d7aa7ff1619feacb3b8e1.png

四、精讲之地

从事IT的人都了解,数据结构是异常重要和基础的,不容置疑。 我们,哪怕不是为了提高自己的编程能力,就是为了找份好工作或者考研成功,也要学好它,因为太多像阿里、腾讯、百度这样的互联网企业招聘技术岗的笔试题,还有高校的计算机或相近专业的考研专业课是对数据结构能力的考察。 微信公众号算法简堂:动图演示算法执行过程+可下载运行的源码,逐章讲解数据结构。下面是一些已发文章样例:01

算法分析 

1.1  算法时间复杂度分析 1.2 算法空间复杂度分析02 线性表 2.1 顺序存储结构 2.2 单链表 2.3 双链表03 3.1 顺序栈(公众号里回复 004 进行基本运算的源码下载) 3.2  链栈04 队列

     4.1 顺序队列

     4.2 环形队列

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页