现实中的问题往往涉及到不同复杂个体和其相互之间的复杂关系联系,计算机为了解决生活中实际的问题,所以必然要在程序中抽象描述出这种个体和他们在现实生活中的各种关系,而数据结构就是为此而诞生的。
想象一下:
在一般生活中的问题,比如期末考试结束后,全校的成绩要排名这个问题。
我们拿到的就是一堆复杂难懂的数据,比如:“12334572,张三,16,邓玉兰,99,88,96,99,100”等等原始数据,我们如何将一个成绩和一个学生对应起来?那些同学是一个班级的,哪个人是班级第一?一个学生的老师是谁?一个老师本学期的教学质量?等等............
我们不难发现,一堆数字和字符,如果不了解实际问题根本无法知道这些数据是什么意思,而如果不用数据结构进行整理,解析结构,根本不能表示出这些数据之间的相互关系,更不用说让计算机处理了。
数据结构化后:“学号,学生姓名,年龄,班级,任课老师,各科成绩”,数据就清晰明了起来,其关系也被表示出来了,计算机可以解读程序进行工作了。
一个著名的程序公式:
程序=数据结构+算法
数据结构就是研究非数值计算程序问题中的操作对象以及它们之间的关系。
关键概念
1.数据:程序操作的对象,用于描述客观事物
数据的特点:
可以输入到计算机
可以被计算机程序处理
数据是一个抽象的概念,将其进行分类后可以得到程序设计语言中的类型。如int,float,char等。
2.数据元素:组成数据的基本单位
3.数据项:一个数据元素由若干数据项组成
4.数据对象:性质相同的数据元素的集合
数据元素之间不是独立的,存在特定的关系,这些关系就是结构。数据结构指数据对象中实际元素之间的关系。
编写程序之前,必须分析问题中各个对象的特性,以及对象之间的各种关系。
逻辑结构
1.集合结构:数据元素之间没有关系,仅属于同一个集合。
2.线性结构:数据元素之间是一对一的关系。典型如数组。
3.树形结构:一对多的层次关系。
4.图形结构:多对多的关系。
特别注意:树形结构和图形结构,这是高级计算机编程中运用的最多的结构。尤其是图(QQ等聊天软件,推荐朋友系统,是不是很神奇,它怎么知道我们是朋友?就是因为它将每个人作为一个节点,人与人之间的关系就抽象表示出来,你朋友的朋友也可能是你的朋友,从而形成了一个人际关系网,说的高级点,就是Facebook的社群网络。)
物理结构(就是逻辑结构实际在计算机中是如何存储的)
1.顺序存储:将数据存储在地址连续的存储单元。
2.链式存储:将数据存储在任意的存储单元中,通过保存的地址的方式来找到相关联的数据元素。