唯一可以确定的是,明天会使我们所有人大吃一惊!
从今天开始,小沐将进行数据结构的学习,会坚持将文章发布,目前的打算是用两个月左右的时间完成这部分的学习,有一起学习的铁子可以留言一起学习哦,话不多说,正文走着
一.什么是数据结构?
一般来说,用计算机来解决问题时,首先要抽象出合适的数学模型,然后设计一个解此数学模型的算法,最终编出程序,进行测试、调整直至解决问题。
抽象出的数学模型要是为数值计算类型的,我们可以建立适当的数学方程来加以解决,可更多的,我们遇到的大多数问题是非数值计算的,这就不得不提数据结构了,下面举个例子:
图书馆的书目检索系统:当你想借阅一本参考书但不知道书库中是否有的时候,通常可通过计算机检索来完成,计算机根据书名,作者,分类号,出版单位,出版时间等建立了按顺序排列的索引表,这样我们便可直接查询。实际上这是一种线性的数据结构,在以后的学习中还会遇到树状和图状结构。
总而言之,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及他们之间的关系和操作的学科;我们要学的是如何用程序代码把现实世界的问题信息化,如何用计算机高效的处理信息从而创造价值 。
二.基本概念
1.数据
对计算机来说,数据是对客观事物的符号表示,是计算机加工程序的“原料”。文字,声音,图像都可以通过编码而归之于数据的范畴,而在计算机内部,数据实际上全是二进制的0和1组成。
2.数据元素与数据项
数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。
数据项是数据的不可分割的最小单位,一个数据元素可由若干个数据项组成。
例如:
姓名 | 年龄 | 班级 | 成绩 |
张三 | 19 | 一班 | 99 |
李四 | 20 | 一班 | 100 |
例如一个人是一个数据元素,张三,李四都是数据元素,而他们的年龄,班级及其成绩属于数据项!
3.数据对象
数据对象是性质相同的数据元素的集合,是数据的一个子集。
同样以上述例子说明:
姓名 | 年龄 | 班级 | 成绩 |
张三 | 19 | 一班 | 99 |
李四 | 20 | 一班 | 100 |
小沐 | 21 | 二班 | 59 |
假如小沐是二班的一名学生,那么相对于张三和李四来说,他们都有年龄、班级、成绩的性质,换言之,这个学习的所有学生是一个数据对象,另一个学校的所以学生也是数据对象。
4.数据结构
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。(重点是有关系的数据元素的集合)。
常见的数据有集合、线性结构、树形结构、图状/网状结构四种类型,由于集合较为简单,所以后边的学习中将主要学习后三种结构。
三、数据结构三要素
1.逻辑结构
①集合
②线性结构:一对一的关系,第一个数据元素有唯一后继无前驱,最后一个有唯一前驱无前驱。
③树形结构:一对多的关系
④图状结构:多对多的关系
2.物理/存储结构(用计算机表示数据元素的逻辑关系)
①顺序存储:逻辑上相邻的两个元素,在计算机即物理存储上也相邻。
②链式存储:借助指针来表示元素间的逻辑关系,逻辑上相邻,物理上不相邻。
③索引存储:建立索引表。
④散列/哈希存储:根据元素关键字计算元素地址
值得注意的是,数据元素在计算机中的存储结构的不同影响存储空间分配的方便程度和数据运算的速度(即为下次要总结的时间复杂度与空间复杂度,大家可以关注),从而影响程序的执行效率。
3.数据的运算
当我们有了数据之后,对他进行加工运算是必然的。而一般我们处理问题时先定义数据的逻辑结构,然后根据逻辑结构定义相关运算,最后由存储结构来实现运算。
记住两点即可:
运算的定义针对逻辑结构
运算的实现针对存储结构
四.数据类型
1.定义
数据类型是一个值的集合和定义在这个值集上的一组操作的总称。我们以前学过的int bool ···都是一种数据类型,int为整数集合,可进行加减乘除等运算。
2. 分类
①原子类型:原子类型中的值是不可分解的,如C语言中的基本类型(整型、字符型、枚举类型)以及指针类型和空类型。
②结构类型:结构类型的值由若干成分组成,可分解。他的成分可以是结构的也可以是非结构的,如数组的值由若干分量组成,他的分量可以是整型,也可以是数组。
再如:
struct date {
int month;
int day;
int year;
char weather;
};
结构体date由三个int型分量和一个char型分量组成。
3.抽象数据类型(ADT)
是指一个数学模型以及定义在该模型上的一组操作。至于它是如何表示,如何实现的?我们暂且不去深究。有需要的铁子可以看看相关资料学习。
关于基本概念的学习大家不用去深究,随着学习的深入,大家自然而然就都懂了。现在,大家只需对这些概念有个印象即可。由于笔者正在学习过程中,可能会出现一些错误,希望大家指正!欢迎大家关注交流,早日秃头,冲起来!!!