(前言 这是在之前容器很多的不知名的名词 想着与其一个个解释不如直接重温一遍数据结构)
一.概念
程序 = 数据结构 +算法 程序的本质
数据结构经常可以说为计算机内功(心法)
而编程能力就是招式(法术)
考研 必考专业课 一共四门专业课 共150分
找工作更不用说:面试主要考核内容
概念上
概念性强,抽象
算法灵活,不易掌握
逻辑性强,算法设计很烧脑CPU
(1)集合结构
数据结构的研究内容
通常用计算机解决一共问题分三步走 1)具体问题抽象为数学模型 2)设计算法 3)编程,调试,运行
1)抽象数据模型->实质(分析问题 提取操作对象 找出操作对象之间的关系 用数学语言描述)->数据结构
类似数组
特点:数据元素间(你可以看java成类的属性)的关系(这个可以看成类似键值对)简单,计算复杂
2)线性结构
计算机更多用来非数值计算
就比如学生信息表
学号,姓名,性别,年龄,专业
操作对象:每位学生的信息(就上面学号那些)
操作对象:查询,插入,修改,删除(数据库基础四大操作)
操作对象之间的关系:线性关系(前面挨着后面 就比如说五子棋那样) 数据结构:线性数据结构,线性表(整体形成一个表)
还有各种管理系统在这方面用的就比较多(简历项目千万别弄各种管理系统)
3)树型结构
就比如 在从下面图中
可以明显看出像个倒过来的树一样
计算机的操作对象:各种学习与否状态,即描述人的学习信息
计算机的算法:行为,即选择学习或者不学习的策略使学习状态发生变化
操作对象之间的关系:非线性关系,树
这种无法理解的话 或者按(java基础001中)JVM JDK JRE三个关系文件夹关系
JDK
开发工具 JRE
javac jar JVM 类库
这同样也是个树 每个子文件夹只属于一个父文件夹
树型结构就是典型的一对多的关系,是一种典型的非线性关系结构->树型结构
4)网状结构
地图导航-找最快路径
这个把每个英文字母看成某个地点
计算机的操作对象:某个城市
计算机的算法:前往某个城市的行为
操作对象之间的关系:非线性关系,图
这种多对多的关系 名字称为网状结构
从A到E 或者 C到E 最近路线
这种问题无法用数学的公司或方程来描述,是一些非数值计算的程序设计问题
描述非数值计算问题的数学模型不是数学方程 而是如表,树,图之类具有逻辑关系的数据
数据结构是一门研究非数值计算的程序设计中计算机的操作对象以及它们之间的关系和操作的学科
5)数据(Data)
是能输入计算机能被计算机处理的各种符号的集合
(数据库中的表,java中数组都可以说是一个数据)
-1 信息的载体
-2 是对客观事务符号化的表示
-3 能够被计算机识别,存储和加工
包括:
数值型的数据:整数,实数等(能运算的 就比如是java中整型浮点型)
非数值型的数据:文字,图像,图形,声音等(就比如java中字符型)
6)数据元素(Data Element)
是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理
(也好比为java中的类 或者说mysql中插入的表中完整一条数据)
简称为元素 或者为记录(表),结点(树)点或顶点(网)
7)数据项(Data Item)
构成数据元素的不可分割的最小单位
(这个可以理解为类的属性或者数据库中的定义的用户名,学号什么的)
数据>数据元素>数据项
8)数据对象(Data Object)
是性质相同的数据元素的集合,是数据的一个子集
就比如整数对象是集合N={......,-2,-1,0,1,2,3,-----}
数据元素和数据
数据元素->组成数据的基本单位
与数据的关系:是集合的个体
(类似数据库中插入表中的数据和表的关系)
数据对象->性质相同的数据元素的集合
与数据的关系是:集合的子集
(这个就是数学基础了 就好比java中数组a=(1,2,3) 这其中数学对象可以是(1,2)数据元素就是1/2/3 这种数 数据就是数组a 理解起来比较抽象 尽量理解)
(排在Java容器后 了解部分java程序后更容易理解了)