概念整理_1

数据结构: 数据结构是信息的组成方式。它主要用来反映一个数据的内部构成,即一个数据由哪些成分数据构成,以什么方式构成,呈什么结构。

数据结构分为逻辑上的数据结构(反映成分数据之间的逻辑关系)和物理上的数据结构(反映成分数据在计算机内部的存储安排)。

从学科角度来讲,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及他们之间的关系和操作的学科。它的研究内容即是三个方面:数据的逻辑结构;数据的物理存储结构;对数据的操作(即算法)。

通常算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。良好的数据结构可以提高算法的效率,一般一种数据结构会与一组算法的集合相对应,通过这组算法集合对数据结构中的数据进行操作,称之为该数据结构的基本操作(如建立,删除数据结构等)。数据结构的研究不仅涉及计算机硬件的研究,如存储装置和存取方法,而且是解决编译原理,操作系统,数据库系统的数据元素在存储器中的分配问题的重要基础。

抽象数据类型ADT(Abstract Data Type):简称数据类型,既是一个数学模型以及定义在该模型上的一组操作,之所以称为抽象,是因为它实现了信息的隐蔽和局部化,提供一个定义的接口为在数据结构上提供一个抽象的数据实现并隐蔽处理的细节,它把数据结构及数据结构的所有基本操作看成一个整体(模块model),数据结构的逻辑结构被表示为私有成员,基本操作被表示为公共方法。因此它与物理结构无关,使软件系统建立在数据之上,类似于面向对象语言中类的概念。

数据:数据是个集合的概念,是能够被输入到计算机中并被计算机处理的客观符号的总称。数据项是数据不可分割的最小单位数据项组成数据元素数据元素是数据的基本单位,是数据中的“个体”,又称为“记录”或“表目”;相同性质的数据元素组成数据对象;而数据对象组成数据。数据结构即是一种或多种特定关系的数据元素的集合。


数据的逻辑结构:
1. 集合(sets): 数据元素之间除了同属于一个集合的关系外别无其它关系。
2. 线性(lists): 数据元素存在一对一的前趋后继关系。
特点:有且仅有一个元素无前趋元素。
有且仅有一个元素无后继元素。
其余任何一个元素均有且仅有一个前趋和一个后继元素。
3. 树(trees):数据元素存在一对多的关系。
特点:任何一个元素最多有一个前趋,零个或多个后继,是典型的非线性结构。
4. 图(graphs):数据元素存在多对多的关系。
特点:任何一个元素都可以有多个前趋或多个后继,是一种多对多的前趋后继关系。

表和树是最常用的两种高效数据结构,许多高效的算法都可以用这两种数据结构来设计实现。

表是线性结构(全序关系),数(偏序或层次关系)和图(弱序或局部有序weak/local orders)是非线性结构。

数据结构的物理结构是逻辑结构在计算机中的表示(又称存储映像image).


四种基本映射模型: 顺序(sequential),连接(linked),索引(indexed),散列(hashing)。


由于每种逻辑结构的数据都可以通过四种不同的物理结构来存储,因此数据结构便有4*4种可能。但并不是所有可能的组合都是合理的。


而任何定义在数据结构上的操作在改变数据元素(节点)或节点的域时都必须保持数据结构原来的逻辑和物理结构。

如何判断好的和坏的数据结构: 如果一个DS可以通过某种“线性规则”被转化为线性的DS(如线性表),则称其为好的DS。好的DS通常对应于好的(高效的)算法。这是由计算机的计算能力决定的,因为计算机本质上只能存取逻辑连续的内存单元,因此如果没有线性化的结构逻辑上是不可计算的。。比如对一个图进行操作,要访问图的所有节点,则必须按照某种顺序来一次访问所有节点(要形成一个偏序),必须通过某种方式将图固有的非线性结构转化为线性结构才能对图进行操作。


便是一种好的DS,它有非常简单而高效的线性化规则,因此可以利用树设计出许多非常高效的算法。树的实现和使用都很简单,但却可以解决大量特殊的复杂问题,因此树是实际编成中最重要和最有用的一种数据结构。树的结构本质上有递归的性质,即每一个叶节点可以被一棵子树所替代,反之亦然。实际上,每一种递归的结构都可以被转化为(或等价于)数形结构。


递归: 若在一个函数,过程或数据结构定义内部又直接或间接出现有定义本身的应用,则称它们是递归的,或递归定义的。

递归设计的实质: 当一个复杂的问题可以分解成若干子问题来解决时,其中某些子问题与原问题有相同的特征属性,则可利用原问题相同的分析处理方法;反之,子问题解决了,原问题也就迎刃而解了。


递归函数的设计用的是归纳思维的方法,则在设计递归函数时应该注意以下几点:
1. 首先应书写函数的首部和规格说明,严格定义函数的功能接口(递归调用的界面),对求精函数中所得的和原问题性质相同的子函数,只要接口一致,就可以进行递归调用。
2. 对函数中的每一个递归都看成只是一个简单的操作,只要接口一致,必能实现规格说明中定义的功能 ,切忌想得太深太远。

迭代: 就是高潮迭起的“迭”和变量代换的“代”。概念上,就是有某个变量,它的值被一次又一次地代换成新的数值,而每次代换之后都作同样的动作。通常程序语言提供三种迭代的语法:for循环,while循环,和do...while循环。迭代的概念首次出现在Babbage和Ada在设计机械型计算机的时候,这是写一个电脑程序最最基本,可能也是最最原始的技巧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值