开通VIP,畅享免费电子书等14项超值服
首页
好书
留言交流
下载APP
联系客服
2024.04.26陕西
函数是为了解决大量同类型问题所设计的,函数是一个工具
程序=数据结构+算法
操作对象与操作对象之间的关系叫做数据结构
研究的主要是计算方法
数据与数据成一对多的关系,是一种典型的非线性关系结构------树形结构
描述非数值计算问题的数学模型不是数学方程,而是诸如表,树和图之类的具有逻辑关系的数据
数据结构是一门研究非数值计算的程序设计中计算机的操作对象以及它们之间的关系和操作的学科
数据就是能输入计算机且能被计算机处理的各种符号的集合.
且数据分为两类:
一:数值型数据:整数,实数等
二:非数值型数据:文字,图像,图形,声音等
数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理
也简称为元素,或称为记录,结点或顶点
一个数据元素可由若干个数据项组成
数据项:是构成数据元素的不可分割的最小单位\
是性质相同的数据元素的集合,是数据的一个子集.
数据元素相互之间的关系称为结构
是指相互之间存在一种或多种特定关系的数据元素集合
或者说,数据结构是带结构的数据元素的集合
数据结构包括三方面的内容:
一:数据元素之间的逻辑关系,也成为逻辑结构
二:数据元素及其关系在计算机内存中的表示(又称为映像),称为数据的物理结构或数据的存储结构
三:数据的运算和实现,及对数据元素可以施加的操作以及这些操作在相应的存储结构上的实现
数据元素及其关系在计算机内存中的表示(又称为映像)
1)数据结构分两个层次.
2)分为逻辑结构和物理结构(也可以称为存储结构)
其中逻辑结构:一:是描述数据元素之间的逻辑关系
二:与数据的存储无关,独立于计算机
三:是从具体问题抽象出来的数学模型
其中物理结构(也就是存储结构):一:数据元素及其关系在计算机存储器中的结构(存储方式)
二:是数据结构在计算机中的表示
3)逻辑结构与存储结构的关系:
存储结构是逻辑关系的映像与元素本身的映像
逻辑结构是数据结构的抽象,存储结构是数据结构的实现
二者综合起来建立了数据元素之间的结构关系
划分方法一:
分为线性结构和非线性结构
1)线性结构
有且仅有一个开始和一个终端结点,并且所有的结点都最多只有一个直接前趋和一个直接后继
比如:线性表,栈,队列,串(小卓的理解就是元素也就是结点之间是不是一对一的关系)
2)非线性结构
一个结点可能有多个直接前趋和直接后继
比如:树和图(小卓的理解就是元素也就是结点之间是不是一对N的关系)
划分方法二:
分为四种基本逻辑结构:集合结构线性结构树形结构图状结构(或者称为网状结构)
1)集合结构:结构中的数据元素之间除了同属于一个集合的关系外,无任何其它关系
2)线性结构:结构中的数据元素之间存在着一对一的线性关系
3)树形结构:结构中的数据元素之间存在着一对多的层次关系
4)图状结构或网状结构:结构中的数据元素之间存在着多对多的任意关系
四种基本的存储结构:
1)顺序存储结构
2)链式存储结构
3)索引存储结构
4)散列存储结构
C语言中用数组来是实现顺序存储结构
用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示
C语言中用指针(也叫做地址)来实现链式存储结构
在存储结点信息的同时,还建立附加的索引表
就这个东东里面的例如:首字母排序的这个就是索引表哈
索引表中的每一项称为一个索引项
索引项的一般形式是:关键字和地址
关键字是能唯一标识一个结点的那些数据项
若每个结点在索引表中都有一个索引项,则该索引表称之为稠密索引(即DenseIndex).若一组结点在索引表中只对应一个索引项,则该索引表称之为稀疏索引(SparseIndex)
根据结点的关键字直接计算出该结点的存储地址.
一些常用的数据结构,如栈,队列,树,图等,不能直接用数据类型来表示
高级语言中的数据类型明显的或者隐含的规定了在程序执行期间变量和表达的所有可能的取值范围,以及在这些数据范围上所允许进行的操作
数据类型的作用:
1)约束变量或者常量的取值范围
2)约束变量或者常量的操作
定义:数据类型是一组性质相同的值的集合以及定义域这个值集合上的一组操作的总称
抽象数据类型指的是从具体问题当中抽象出来的一个数学模型以及对这个数学模型的一组操作
由用户定义,从问题抽象出数据模型(逻辑结构)
抽象数据类型不考虑计算机内的具体存储结构与运算的具体实现算法
简介且严谨的文字描述称之为形式定义
伪代码:是用介于自然语言和计算机语言之间的文字和符号(包括数学符号)来描述算法
抽象数据类型可用(D,S,P)三元组表示,其中:D是数据对象S是D上的关系集P是对D的基本操作集
一个抽象数据类型定义格式如下:
ADT抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}ADT抽象数据类型名
其中数据对象,数据关系的定义用伪代码描述
基本操作的定义格式为:
基本操作名(参数表)
初始条件:<初始条件描述>
操作结果:<操作结果描述>
基本操作定义格式的说明(即表示):
参数表:赋值参数只为操作提供输入值.引用参数以&打头,除可提供输入值外,还将返回操作结果
初始条件:描述操作执行之前数据结构和参数应满足的条件,若不满足,则操作失败.并返回相应出错信息.若初始条件为空,则省略之
操作结果:说明操作正常完成之后,数据结构的变化状况和返回的结果
在C语言实现抽象数据类型:
用已有数据类型定义描述它的存储结构
用函数定义描述它的操作
然后才可以在程序中使用
抽象数据类型可以通过固有的数据类型(如整型,实型,字符型等)来表示和实现
即利用处理器中已存在的数据类型来说明新的结构,用已经实现的操作来组合新的操作
类C语言相较于C语言确实语法细节
算法的定义:对特定问题求解方法和步骤的一种描述,它是指令的有限序列,其中每个指令表示一个或多个操作
简而言之:算法就是解决问题的方法和步骤
算法是解决问题的一种方法或一个过程,考虑如何讲输入转换成输出,一个问题可以有多种算法
程序是用某种程序设计语言对算法的具体实现
数据结构通过算法实现操作
算法根据数据结构设计程序
确定性:1.指令的明确性2.相同的输入只能得到相同的输出
可行性:1.可执行的2.算法描述的操作可以通过已经实现的基本操作执行有限次来实现
输入:一个算法有零个或多个输入
输出:一个算法有一个或多个输出
1)正确性(Correctness)
2)可读性(Readabilty)
3)健壮性(Robustness)---说白了就是不会莫名出现错误
程序1.不含语法错误2.对几组数据能够得出满足要求的结果3.程序对精心选择的,典型的,苛刻且带有刁难性的几组输入数据能够得出满足要求的结果4.一切合法的输入数据都能得出满足要求的结果
通常以第三层意义上的为正确性作为衡量一个算法是否合格的标准
一个好的算法前提要具备正确性健壮性可读性在几个满足的情况下:
主要考虑算法的效率,通过算法的效率高低来评判不同算法的优劣程度
2)有两种方法
3)一:事后统计
二:事前分析
对算法所消耗资源的一种估算方法
每条语句的执行次数又可以称为语句频度
次方越大则越不好
比如:10*n的平方(即二次方)与5*n的三次方
order:是数量级的意思
T(n)=O(f(n))
3.执行次数最多
来描述我们要处理的数据量的一个变量
比如:排序:n为记录数
矩阵:n为矩阵的阶数
多项式:n为多项式的项数
集合:n为元素个数
树:n为树的结点个数
图:n为图的顶点数或边数
一般情况下,不必计算所有操作的执行次数,而只考虑算法中基本操作执行的次数,它是问题规模n的某个函数,用T(n)表示
因为小卓自己操作不当后面的笔记直接消失了!!!我心态崩了好气啊----2022-3-1