数据结构作为计算机专业很多专业课程的先导课程,几乎是所有高校考研必考项目,以及各种面试中必问科目,它的重要性不言而喻。作为没什么研究,准备找工作的研究僧,准备系统的复习下数据结构和算法相关的知识,所以在博客开一个系列文章,记录一下学习过程。
复习用书:《大话数据结构》
下载链接: 百度网盘 请输入提取码 提取码: rgcb
1.基本概念
1.1.数据
谈及数据结构,首先我们得弄清楚什么是数据。书本上对数据是这样定义的。
数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合
但是这样的定义总是不够直观清晰,谈起数据,大家脑海里立马浮现很可能的是一堆数字,那么数据就是数字么。这种想法既对也不对。首先现实生活中的数据,各式各样,远远不止数字这一种形式,图片,视频都可以称作数据,所以说数据并不是数字。但是在计算机视角下,所有这些确实又都是由0和1这样的二进制数字所组成的。可以说互联网时代,你在网络上能浏览到的一切都是数据。
1.2.数据元素和数据项
数据各种各样,我们把描述现实世界中某一实体的一组数据称为数据元素或是记录。打个栗子,我们通常会这么描述一个人,“姓名:张三,年龄:23,身高:180 cm,体重:70 kg ...”,这样一组描述张三这样一个人的数据,我们就可以称之为数据元素或是记录,其中的姓名,年龄,身高等等,就是组成这条记录的数据项。
1.3.数据结构
那什么是数据结构呢? 简单来说就是数据之间的关系。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合
通过我们的观察,发现很多数据并不是杂乱无章的,它们之间存在着一些内在联系,我们可以通过分析它们之间的关系,用一定的方式将它们组织起来,形成一定的结构来更好的管理它们。这就是数据结构存在的意义。
面对相同的数据,人和机器的看法是不同的。在人的视角下,我们通常会去分析数据之间存在的逻辑关系,而在机器的视角下,机器要解决的问题是怎么样更好的去存储并处理这些数据,既然涉及到存储和处理数据,那么就离不开机器的物理性质。因此,数据结构根据视角的不同,可以大体分为两类,逻辑结构和物理结构。
1.3.1.逻辑结构
-
集合结构:集合结构中的数据元素除了同属于一个集合外,它们没有其他关系。
集合结构中集合的概念与数学中集合的概念基本一致。读过三国的同学都知道,刘备,关羽,张飞,同属蜀国这一阵营。在蜀国阵营这一集合中,他们是平等的关系。
-
线性结构:线性结构中的数据元素之间是一对一的关系。
上面例子中,刘关张,尽管都是蜀国人,但他们还具有结义兄弟的关系,长幼有别,怎么去表示他们之间的兄弟关系,兄弟,兄弟,当然兄在前,弟在后,他们之间存在着线性关系。可以通过下图的方法表示他们的关系。
-
树形结构:树形结构的数据元素之间存在一种一对多的层次关系。
还是上面的例子,刘关张尽管亲如兄弟,但从蜀国这个国家的层面,他们之间还存在着上下级的关系,那么用树形结构描述他们的关系再适合不过了。
-
图形结构:图形结构的数据元素间是多对多的关系。
图形结构最简单的例子莫过于地图,我们可以很简单的利用图形结构去衡量,地图上任意两地是否可以互通,他们的距离有多长等等。
通过对上面几种逻辑结构的分析,很清楚看到,逻辑结构针对的是数据之间具体的逻辑关系,是从人的视角去判断的数据结构。
1.3.2.物理结构
谈完数据的逻辑结构,我们继续来看一下数据的物理结构。数据的物理结构,也可说是数据的存储结构,即数据在计算机中以什么样的结构存储的。当然数据的物理结构,必须满足数据的逻辑结构的要求,否则数据乱存一通,毫无意义。
数据元素的存储形式主要有两种:顺序存储,链式存储
-
顺序存储结构:数据元素存放在地址连续的存储单元中,逻辑上相邻的数据元素,物理上也相邻。
-
链式存储结构:数据元素存放在任意的存储单元中,通过指针来指示元素之间的逻辑关系。
以上对顺序结构,链式结构的描述,我们不难看出,顺序结构的优点在于,很清楚将逻辑结构映射到物理结构上,存取十分方便;但是缺点也很明显,需要提前开辟大块连续的存储空间,内存利用率不高。而链式结构恰好相反,可以充分利用内存空间,但是存取元素并不便捷,而且存储指针带来额外的内存消耗。但是不管是顺序存储还是链式存储他的基本目标都是把数据及其逻辑关系存储到计算机内存中。
1.4.抽象数据类型
-
数据类型:是指一组具有相同性质的数据的集合,以及定义在这组集合上一些操作的总称。
现实世界中,我们需要处理的数据是多种多样的,有数字,有字符。我们无法用统一的方式去处理它们。因此,定义不同的数据类型就显得十分必要。一般编程语言支持的数据类型分为两类:原子类型和结构类型。
原子类型:是不可以再分解的基本类型,包括整型、实型、字符型等。
结构类型::由若干个类型组合而成,是可以再分解的。例如,整型数组是由若干整型数据组成的。
-
抽象数据类型(Abstract Data Type, ADT):是指一个数学模型和定义在该数据模型上的一组操作。
这里抽象的意义在于数据类型的数学抽象特性,抽象数据类型的标准定义如下图所示。
2.总结
本篇主要介绍了数据结构的基本概念,如下图所示。
以不同的角度又可将数据结构细分为以下的结构:
通过本篇的介绍相信大家对数据结构能有一个基本的认识,后续文章将针对各个具体的数据结构,逐一的深入介绍,希望大家多多关注,多提宝贵意见。
个人网站:漫索记