抽象数据类型:ADT可以定义为独立于任何特定实现而精确指定的一组数据值和关联的操作。因此,抽象数据类型是信息的有组织的集合以及用于管理该信息的一组操作。这组操作定义了ADT的接口。只要ADT满足接口的条件,ADT的实现方式就没有关系。由于在ADT中,数据值和运算是以数学精度定义的,而不是作为一种计算机语言的实现而定义的,因此我们可能会推断出运算的效果,与其他抽象数据类型的关系(程序是否实现了数据类型等)。
抽象数据类型(ADT)与具体数据类型之间的基本区别在于,后者允许我们查看具体表示形式,而前者则对我们隐藏了表示形式。ADT可以是纯ADT或可更新ADT。纯ADT是其中所有操作均为纯函数的ADT。这意味着操作没有副作用。特别是,它们不会在此处修改或更新输入参数。他们只是使用这些参数来生成输出,这些输出是ADT(或其他类型)的新值。大多数混凝土类型是纯净的。例如,对整数的任何运算实际上都不会修改整数。相反,所有的操作(如“ +”)都会产生新的输出。
一种可更新的ADT是其中某些操作实际上会更改ADT值的一种。例如,假设我们有一个名为“ pop”的操作,该操作将堆栈作为参数并对其进行了修改。(“就地”,“破坏性”),方法是删除优先级最高的项目。该操作将被认为是不纯的,然后整个ADT也将是不纯的。ADT可以是用户定义的ADT。
我们知道,抽象数据类型是满足以下两个条件的数据类型:
类型和操作的表示或定义包含在单个语法单元中。
对于使用该类型的程序单元,该类型的对象的表示是隐藏的,因此,在这些对象上可能进行的直接操作才是类型定义中提供的操作。
用户定义的抽象数据类型应提供:
类型定义,允许程序单元声明该类型的变量,但隐藏这些变量的表示形式。
一组用于操作类型对象的操作。
用户定义的抽象数据类型的一个示例是structure。“ C”提供了四种基本类型:int,char,float和double。但是,“ C”还使程序员能够定义自己的类型。结构就是这样一个例子。结构是不同部分的集合,其中每个部分都是某种现有类型。
struct abc
{int x;
float y;
};
上面的结构定义不创建任何变量,而是创建一个新类型。可以用类似于内置类型的变量的方式来创建此类型的变量。
struct abc a;
typedef关键字允许我们为新类型创建新的类型名称。
例如:
typedef struct abc AB;
其中AB是一个新的类型名称,现在可以用来创建新的类型。
AB b;
数据结构:以下是数据结构的特征:
它包含组件数据项,这些数据项可以是原子数据结构,也可以是其他数据结构(仍然是域)。
对一个或多个组件项目的一组操作。
定义有关组件之间如何相互关联以及与整个结构(断言)相关的规则。
数据结构:
数据结构可以是静态的也可以是动态的。静态数据结构具有固定大小。此含义不同于静态修饰符的含义。数组是静态的;一旦定义了可以容纳的元素数量,该数量就不会改变。动态数据结构根据其内容的需要在执行时增长和收缩。动态数据结构是使用链接实现的。
数据结构可以进一步分类为线性数据结构和非线性数据结构。在线性数据结构中,除第一个元素和最后一个元素外,每个组件都有唯一的前任和后继元素,而在非线性数据结构的情况下,则没有这种限制,因为元素可以任何期望的方式排列,这受我们习惯于代表这种类型。