标签:用两个 数字 高效 表达式 调试 长度 不可 聚合 abstract
数据结构是计算机存储和组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。一般情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
想要对大型复杂程序的构造进行系统而科学的研究,必须首先对这些程序中所包含的数据结构进行深入的研究。
数据的逻辑结构是从数据元素的逻辑关系上抽象描述数据,通常是从求解问题中提炼出来的。数据的逻辑结构与数据的存储无关,是独立于计算机的,因此数据的逻辑结构可以被看作是从具体问题中抽象出来的数据模型。
数据元素之间的逻辑结构是多种多样的,根据数据元素之间的不同关系特性,通常可将数据逻辑结构分为4类,即集合、线性结构、树形结构和图状(或网状)结构,具体如图:
数据的存储结构是指数据在计算机中的表示方法(表示又可以称之为映像),是数据的逻辑结构在计算机中的存储实现,因此在存储是应包含两方面的内容——数据元素本身及数据元素之间的关系。数据存储到计算机中既要求存储各节点的数值,又要存储节点与节点之间的逻辑关系。在实际应用中,数据有各种各样的存储方法,大致可以分为4类(顺序存储结构、链式存储结构、索引存储结构、哈希(或散列)存储结构)。
顺序存储结构是采用一组物理上连续的存储单元来一次存放所有的数据元素,元素之间的逻辑关系有存储单元地址间的关系隐含表示。
优点:节省存储空间,只需要存储数据结点,并不需要存储结点的逻辑关系。
缺点:不便于修改,插入和删除某个结点需要修改一系列的结点。
2.链式存储结构:
链式存储结构给每个结点增加指针字段,用于存放临近结点的存储地址,每个结点占用两个连续的存储单元,一个存放数据,一个存放临近结点(前驱/后继结点)的地址。
优点:便于修改,修改时只需要修改结点的指针字段,不需要移动其他结点。
缺点:占用存储空间,因为需要存储结点之间的逻辑关系。因为结点之间不一定相邻,因此不能对结点进行随机访问。
3.索引存储结构:
索引存储结构即在存储结点的同事,增加索引表,索引表的索引项为:(关键字,地址),关键字标识结点,地址为结点的指针。各结点的地址在索引表中是一次排列的。
优点:可以快速查找,可以随机访问,方便修改。
缺点:建立索引表增加了时间和空间的开销。
4.哈希(或散列)存储结构:
哈希存储结构是根据结点的值确定结点的存储地址。以结点作为自变量,通过散列函数算出结果i,再把i作为结点的存储地址。
优点:查找速度快,适用于快速查找和插入的场景。
缺点:只存放结点数据,不存结点之间的关系。
数据类型是和数据结构密切相关的一个概念,它最早出现在高级程序语言中,用以刻画(程序)操作对象的特性。在用高级程序语言编写的程序中,每个变量、常量或表达式都有一个它所属的确定的数据类型。按“值”的不同特性,高级语言中的数据类型可以分为两类:一类是非结构的原子类型,一类是结构类型。
原子类型的值是不可以分解的,例如C语言中的基本类型(整型、实型、字符型、枚举类型)、指针类型和空类型。
结构类型的值是由若干成分按某种结构组成的,因此是可以分解的,并且它的结构可以是非结构的,也可以是结构的。
抽象数据类型(abstract data type简称ADT)是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关,即不论求其内部结构如何变化,只要它的数学特性不变,都不影响其外部的使用。
抽象数据类型和数据类型实际上是一个概念。例如,各个计算机都拥有的“整数”类型是一个抽象数据类型,尽管它们在不同的处理器上实现的方法可以不同,但由于其定义的数学特性相同,在用户看来都是相同的。因此,“抽象”的意义在于数据的数学抽象特性。
属原子类型的变量的值是不可以分解的。这类抽象数据类型较少,因为一般情况下,已有的固有数据类型足以满足需求。但有时也有必要定义新的原子数据类型,例如数位为100的整数。
属该类型的变量,其值由确定数目的成分按某种结构组成。例如,复数是由两个实数依确定的次序关系构成。
和固定聚合类型相比较,构成可变聚合类型“值”的成分的数目不确定。例如,可定义一个“有序证书序列”的抽象数据类型,其中序列的长度是可变的。
多形数据类型是指其值的成分不确定的数据类型。从抽象数据类型的角度看,具有相同的数学抽象特性,故称之为多形数据类型。
算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作;此外,一个算法还具有五个重要特性:有穷性、确定性、可行性、输入、输出。
算法执行的时间依据运行时所消耗的时间来度量,而度量一个程序的执行时间通常有两种方法:
(1)事后统计的方法:
因为很多计算机内部有计时功能,不同算法的程序可以通过一组或若干组相同的统计数据以分辨优劣。但是这个方法有两种缺点:一是必须先运行依据算法编制的程序;二是所得的时间统计计量依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优劣。
(2)事前分析估算的方法:
-1:渐近时间复杂度:本质就是算法的执行时间,也就是算法中所有语句的频度之和。
-2:语句频度:就是语句的执行次数,它与算法求解问题的大小规模有关。
一个算法的存储量包括形参所占空间和临时变量所占空间。在对算法进行存储空间分析时,只考察临时变量所占空间。
标签:用两个 数字 高效 表达式 调试 长度 不可 聚合 abstract
原文地址:https://www.cnblogs.com/yachao30/p/12165073.html