做个决定,从今天开始,每天一题,把自己每天学的东西写出来,也算是个学习笔记。
驽马十驾,功在不舍
何谓数据结构?
数据结构反映数据的内部构成,即一个数据由哪些成分数据组成,以什么样的形式组成,呈现什么样的结构。数据结构包括逻辑上的数据结构和物理上的数据结构。逻辑上的数据结构指的是成分数据之间的逻辑关系,物理上的数据结构指的是成分数据的物理存储形式。
数据类型
数据类型根据数据结构进行划分,在高级程序设计语言中,数据类型用来说明一个数据在数据分类中的归属。它 是数据的属性,这种属性限定了数据的取值范围。
最常用的数据结构是:数组结构和记录结构。
数组结构的特点:
1.成分数据的个数固定。它们之间的逻辑结构是由成分数据的序号(也即数组的下标)来体现。这些成分数据按照序号的先后顺序一个接一个地排列起来。
2.每一个成分数据具有相同的数据结构(可以是简单的数据结构,也可以是复杂的数据结构),因而属于同样的数据类型(可以是简单的数据类型,也可以示复杂的数据类型)。
3.所有成分数据被依序安排在一片连续的存储区域中。
概括起来,数组结构是线性的,均匀的,其成分数据可随机访问的结构。
记录结构的特点:
1.同数组结构一样,成分数据的个数是固定的。但是它们之间没有自然序,它们之间处于平等地位。每个成分数据都是一个域并被赋予一个域名。不同的域有不同的域名。
2.不同的域允许有不同的结构,因而属于不同的数据类型。
3.与数组结构一样,它们可以随机访问,访问的方式是按域名访问。
**********************************算 法****************************************
算法:描述解决问题的步骤。是一个运算序列。
该运算序列具备四个特征:
1.有限性
序列的项数有限,且每一项都可在有限的时间内完成。
2.确定性
序列的每一项运算都有确定性,没有二义性。
3.可以没有输入项,但一定要有输出项。
4.可行性
对于任意合法的输入都能得到正确的输出。
这些特征可用来判别一个确定的序列是不是一个算法。
作为运算序列的算法,有三个要素:
数据,运算,控制
即:
1.作为运算序列中各种运算对象和运算结果的数据
2.运算序列中的各种运算
3.运算序列中的控制转移。
数据:
简单最基本有布尔值数据、字符数据、整数和实数数据等;
稍复杂的有向量、矩阵、记录等数据;更复杂的有集合、树和图,还有声音、图形、图像等数据
运算:
最基本最初等的有赋值运算、算术运算、逻辑运算和关系运算等;
稍复杂的有算术表达式和逻辑表达 式等;
更复杂的有函数值计算、向量运算、矩阵运算、集合运算,以及表、栈、队列、树 和图上的运算等:此外,
还可能有以上列举的运算的复合和嵌套。
控制:
控制相对单纯,在串行计算中,它只有顺序、分支、循环、递归和无条件转 移等几种。
************************************抽象数据类型********************************************** 虽然写到这里,有点不想写了,可是,不提抽象数据类型,实在是对不起这员大将。
根据自顶向下的步骤,在考虑算法设计时,应该分两层进行考虑。
首先考虑算法的顶层运算步骤,然后考虑底层的运算步骤。
顶层的运算步骤,是在数据模型级上的运算步骤。
涉及的数据是数据模型中的一个变量,暂不考虑数据结构。
涉及的运算时数据模型上的运算。即以数据模型上的变量为数据对象或数据结果,或二者兼之。
底层的运算步骤就是顶层步骤的具体实现。包括两部分:
一、数据模型的具体表示,即数据结构
二、定义在数据模型上的数据运算的具体实现。
底层设计是顶层实现的具体实现,底层实现为顶层实现服务。为了将顶层和底层实现隔离,使在实现时不会互相牵制、互相影响,必须对两者的接口进行一次抽象。让底层只通过这个接口为顶层服务,顶层也只能通过这个接口调用底层运算。这个接口就是抽象数据模型。即:Abstract Data Types.
要用计算机解决一个复杂的问题,要经过以下几个步骤:
1.将实际问题数学化。
即把一个实际问题抽象成一个一般的数学问题。这一步要引入数学概念,精确地阐述数学问题,弄清问题的已知条件,所要求的结果,并且找出两者之间的显式或隐式的关系。
2.对于确定的数学问题,找出其解决方法,即算法设计。
这一步要建立求解模型。即确定问题的数据模型并定义该模型上的一组运算,然后借助对这组运算的调用和控制,从问题的已知条件出发,导向所要求的结果。形成算法并用自然语言来表达。这种语言不是程序设计语言,不能被计算机所接受。
3.在计算机上用程序设计语言实现算法。
4.在计算机编译,调试和测试所编制的程序,直到输出所要的结果。
抽象数据类型是算法设计和程序设计中的重要概念。
严格的定义是一个数据模型和定义在该数据模型上的,作为算法设计组件的一组运算。
抽象数据类型把数据模型和数据运算紧密地结合在一起。
为了提高算法的效率,必须认真考虑数据模型。设计良好的数据模型提高运算效率。
>*_*<
长舒一口气,今日到此结束。休息休息!