✔前言:
- 👻这门课程是讲什么?
一、数据结构的基本概念
二、线性表
三、栈和队列
四、串
五、数组和广义表
六、图
七、查找技术
八、排序技术
- 👻怎样才能学好这门课?
勤于思考、多做练习、多上机
不放弃!!!
目录
1.1数据结构的研究内容
首先,分析问题、提取操作对象,然后找出操作对象之间的关系,用数学语言加以描述,建立相应的数学方程。
eg1:学生信息表 线性表
操作对象:每位学生的信息(学号、姓名、性别、籍贯、专业...)
操作算法:查询、插入、修改、删除等
操作对象之间的关系:线性关系
数据结构:线性数据结构、线性表。
类似还有图书管理系统、人事管理系统、通讯录...,这些系统的操作对象就是若干数据结构。
eg2:人机对弈问题
操作对象:各种棋局关系,即描述棋盘的格局信息。
操作对象之间的关系:非线性关系、树。
例如:磁盘根目录下有很多目录及文件,每个子目录里又可以包含多个子目录及文件,但每个子目录只有一个父目录。
综上所述:
- 这些问题的共性是都无法用数学的公式或方程来描述,是一些“非数值计算”的程序设计问题。
- 描述非数值计算问题的数学模型不是数学方程,而是诸如表、数和图之类的具有逻辑关系的数据.
- 数据结构是一门研究非数值计算的程序设计中计算机的操作对象以及他们之间的关系和操作的学科。
1.2基本概念和术语
正所谓"巧妇难为无米之炊'\再强大的计算机,也是要有"米'下锅才可以的,否则就是 堆破铜烂铁 这个"米"就是数据。
1. 数据
是能输入计算机且能被计算机处理的各种符号的集合
信息的载体、是对客观事物符号化的表示、能够被计算机识别、存储和加工
数据包括:数值型的数据(整数、实数等)、非数值型的数据(文字、图像、图形、声音等)
2. 数据元素
是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
也简称为元素,或称为记录、结点或顶点。
- 一个数据元素可有若干个数据项组成
3.数据项:
构成数据元素的不可分割最小单位
数据、数据元素、数据项三者之间的关系:数据>数据元素>数据项
例如
4.数据对象
- 是性质相同的数据元素的集合,是数据的一个子集
例如:
数据元素与数据对象:
1.2.2数据结构
- 数据元素不是孤立的,他们之间存在着某种关系,数据元素相互之间的关系称为结构
- 数据结构是指相互之间存在一种或多种特定关系的数据元素集合或者说数据结构是带结构的数据元素的集合。
- 形式定义:二元组(D,S)其中D是数据元素的有限集,S是D上关系的有限集。
- 数据结构包括以下三个方面的内容:
逻辑结构
数据元素之间的逻辑关系
划分方法:
物理结构(存储结构)
是逻辑结构到存储器的一个映射
顺序存储结构:用一组连续的存储单元一次存储数据元素,数据元素之间的逻辑关系由元素的存储位置来表示。【C语言中用数组来实现顺序存储结构】
链式存储结构:
现在如银行、医院等地方,设置了排队系统,也就是每个人丢了,先领 个号,
等着叫号,叫到时去办理业务或者病。在等待的时候,你爱在哪在哪,可以坐着、站
着或者走动,甚至出去逛一圈,只要及时回来就行 你关注的是前 个号有没有被叫
到,叫到了,下 个就轮到了。
是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的 数据元素的存储关系并不能反映其逻辑关系,因此需要用 指针 存放数据元素的地址,这样通过地址就可以找到相关联数据元素的位置
1.3数据类型和抽象数据类型
1. 数据类型
在使用高级程序语言编写程序时,必须对程序中出现的每个变量、常量或表达式,明确说明他们所属的数据类型。
一些基本的数据结构可以用数据类型来实现,如数组、字符串等;而另一些常用的数据结构,如栈、队列、树、图等,不能直接用数据类型来表示。
高级语言中的数据类型明显地或隐含地规定了在程序执行期间变量和表达的所有可能的取值范围,以及在这些数值范围上所允许进行的操作。
定义:数据类型时一组性质相同的值的集合以及定义与这个集合上的一组操作的总称。
数据类型=值的集合+值集合上的一组操作
2. 抽象数据类型(Abstract Data Type)
定义:是指基于一个数据类型的数据模型以及定义在该模型上的一组操作。每一个操作由它的输入和输出定义。
形式定义:
定义格式:
其中:数据对象、数据关系的定义用伪代码描述
基本操作的定义格式:
基本操作定义格式说明:
参数表:赋值参数只为操作提供输入值
引用型参数以&开头,除可以提供输入输出外,还将返回操作结果
初始条件:描述操作执行之前数据结构和参数应满足的条件,若不满足,则操作失败,并返回相应出错信息。若初始条件为空,则省略之。
操作结果:说明操作正常完成之后,数据结构的变化状况和应返回的结果。
三元组Triple的定义
ADT Triple{
数据对象:D={e1,e2,e3属于ElemType(定义了关系运算的某个集合)}
数据关系:R={<e1,e2>,<e2,e3>}
基本操作:
抽象数据类型的实现
到这里就结束啦~之后会更新相应的源码😉