初识数据结构与算法(一)
[ 2020年7月5号]
Hello,大家好!这是我第一次写博客,这学期也是开始学习数据结构与算法这么课程,所以特地开此博客与大家分享学习心得,以及日后更好的复习!这篇博客我不会一次写完我需要分多次修改和补充后面的内容。
本专栏博客全部都是参考《大话-数据与结构》-程杰 著
一.什么是数据结构
1. 基本概念
如果我们想更好的理解数据结构,那么就要先理解几个有关数据结构的基本术语!
-
数据
定义:数据是描述客观事实的符号,是计算机可以操作的对象,是能被计算机识别并且输入给计算机的符号集合。
是不是可能会不理解什么是计算机可以操作的对象,有过一些编程基础的读者应该知道在计算机中有整型,浮点型等这些我们统称为数值类型。
有数值类型,那么可定就有非数值类型,像平时我们的看到的字符,图像,视频都可以算作是非数值类型。对于字符类型数据,我们就需要进行非数值的处理,而声音、图像、视频等其实可以通过编码的手段变成字符数据来处理 -
数据元素
定义:数据元素是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。
其实说白了数据是由多个数据元素组成的,我们举个简单的例子:在哺乳动物就是一个数据,而哺乳动物又是由人类、狗、猫咪、海豚等数据元素构成! -
数据项
与数据相同,数据元素也有自己的组成元素,一个数据元素就是由多个数据项组成的
例如人这样的数据元素,可以有眼睛、鼻子、嘴巴等这些数据项,也可以有姓名、年龄、性别、出生年月这些数据项。 -
数据对象
定义:数据对象是性质相同的数据元素的集合,是数据的子集。
有的同学就会问了,什么叫性质相同?其实就是指数据元素具有相同数量和类型的数据项,还是刚才的例子,人都有姓名、生日、性别等具有相同的数据项。 -
数据结构
铺垫了这么多,终于等到主角的登场了!
结构,简单的理解就是关系,比如分子结构,其实就是组成分子的原子之间的排列关系。数据结果也大同小异,先给出定义:数据结构是不同数据相互之间存在一种或多种特定关系的数据元素的集合。
那么什么是一种或多种的特定关系呢?将在下面的章节继续介绍!
2. 逻辑结构
定义:逻辑结构指的是数据对象中数据元素之间的相互关系。逻辑结构可以分为以下四种:
-
集合结构
集合结构中的数据元素,除了属于同一个集合以外,他们之间没有任何关系。“人人平等“在这里体现的淋漓尽致!就类似与数学中的集合。 -
线性结构
线性结构中的数据元素具有一对一的关系,谁的胳膊肘都别想往外拐,好一副当代爱情故事的景象!
- 树形结构
树形结构中的数据元素存在着一对多的关系,这才是妥妥的渣男渣女呀!
- 图形结构
至于图形结构,我怀疑它在搞多人运动,可惜我没有证据!!!!
3. 物理结构
物理结构又称存储结构,其实就是指逻辑结构在计算机中的存储形式。存储器主要针对内存而言,像硬盘、软盘、光盘等外部存储器的数据组织通常用文件结构来描述。存储结构大致可以分为一下两种:
-
顺序存储
顺序存储就是把数据元素放在一段地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。说白了就是排队占位,大家都按顺序排好,各占一段小空间 -
顺序存储的优缺点
由于顺序存储结构的特性,所以顺序存储在查找元素方面有着天然的优势,但是在插入,删除等操作就显得有些力不从心。由于大家都是顺序存储的,所以再插入或者删除时有时需要移动大量的元素来实现插入或删除操作,这样时间效率就会大打折扣。 -
链式存储
链式存储就是把数据放在任意的存储单元里,这里的存储单元可以是连续的也可以是不连续的,但光光有数据是不行的,要如何表示数据元素之间的关系呢?我们就需要添加一个指针域用来存放数据元素的地址。通过地址来找到相关联的数据元素。 -
链式存储的优缺点
由于链式存储是任意的存储单元,所以在查找元素上每次都需要进行从头到该查找元素的遍历,如果这个元素在最后一个,那么则需要进行从头到尾的遍历操作。有缺点就会有优点,链式存储由于指针域的加入,使得在插入、删除操作的时候,只需要更改相对应的指针域就可以实现对应操作。
4. 抽象数据类型
-
数据类型
要想直到什么是抽象数据类型,那么首先就要了解什么是数据类型。数据类型简单来说就是数据对象+对应的操作。数据类型按照值的不同进行划分,而类型就是用来说明变量,或者表达式的取值范围和所能进行的操作。
在C语言中,按照取值的不同,数据类型可以分为两大类: -
原子类型:不可再分解的基本类型,包括整型、实型、字符型等
-
结构类型:有若干个类型组合而成,是可再分解的。例如,C语言中的结构体等。
为什么需要对数据进行分类呢?在计算机中,内存肯定不是无限大的,比如我们要算一个简单的加减乘除法,显然不需要开辟很大的内存空间,所以我们需要对数据进行分类,分出多种数据类型。 -
抽象数据类型
抽象是指去取出事物具有的普遍的性质。就像用C语言编写类一样的。而抽象数据类型就是指一个数学模型及定义在该模型上的一组操作。像我们日常使用的各种电子设备,它都有一个数据类型叫整型,那么整型其实就是一种抽象数据类型,在不同的电子设备中实现方法可能不一样,但是定义数学特性还是相同的,所以在编程者看来,他们都是相同的。
以下给出了描述抽象数据类型的标准格式:
ADT 抽象数据类型名称
DATA
数据元素之间逻辑关系的定义
Operation
操作1
操作2
操作3
......
endADT
好了,这就是今天学习的内容,希望大家可以给出改正的意见和建议(如果有人看的话,哈哈),希望这个专栏的博客对你的初步学习有一定的帮助!欢迎大家一起留言交流,相互学习!