从C语言的角度来解释什么是抽象数据类型?

Python017

从C语言的角度来解释什么是抽象数据类型?,第1张

简单的说一下吧,所谓抽象数据类型ADT,是指 我们在逻辑上定义的 一种 数据类型。

如你所知道的,计算机内,无论是内存还是外存,都只是一组二进制的数位而已。

大多数时候,比如我们所熟知的 Char类型、Int类型等等,都是一组已经定义好的二进制数位。

所谓定义好,是指,在这一组数位中,如Char类型,8位,即一组8个二进制数位,我们如何标识和处理每一位,以及解读每一位所代表的意义。

你学过C,应该知道ASCII码,和二进制计数。 Char的这个数据类型的含义就是说 以二进制计数 算出对应的数值, 再以ASCII码为标准,解读出这8位二进制位中所表示的字母。

事实上,我想说的是,这就是一个基本的抽象数据类型了。

当然,ADT不仅仅是一组数位的定义,他还包括一组定义在这个结构上的一组操作。

struct这个方法,在后来的演变中,成为了C++和其他高等语言中的类(class)。

我知道,这样讲你肯定不是很明白,但关于这个东西,有一门课程叫做《数据结构》,中间详细叙述了所有有关 抽象数据类型的概念 。

其中,有一本 《数据结构C语言版》清华大学出版社 严蔚敏著 的教材,是所有计算机专业学生必修的一门课程。你可以看看。

祝好运!

问题一:数据结构 抽象数据类型是什么? 这两个概念,尤其是第一个都是特别抽象的概念,没什么具体可对应的实体可以给你举例,我就粘贴复制了,说说我的理解吧。

数据埂构呢,我们总是为了完成一个功能或者目的写程序,但不管什么程序、代码实际上都是一些指令的 *** ,说白了就是在描述“怎么做”,而光知道怎么做还只是问题的一半,还要知道“做什么”,也就是刚才那些指令的对象是谁,自然肯定是相关的数据,比如说学生信息管理中,指令是增加学生,那他的对象就是学生信息这种数据,指令是成绩统计,那对象就是学生的成绩数据,而在我们的程序中,数据也必须要有一种很明确的组织表示方式,只要这样我们才能在这种具体明确的实体上编写指令,比如说学生数据可以定义为一个多维的数组,只有这样我们再写增加学生时,才能知道具体增加就是增加一个数组元素并未其赋值。所以数据结构就是相互之间有联系的具有某种组织方式的数据 *** 。

抽象数据类型相比较数据结构要具体一些,我们光有了数据结构还不够,因为数据是各种各样的,对于不同数据,我们能采取的方法也不一样,比如说学生数据可以增减,成绩数据可以进行算数运算,但是为什么说抽象呢,也就说他并不是具体整型还是字符型这种基本类型,而是我们根据我们要解决的实际问题,对应现实世界所描述的一种和现实世界中的实体对应的数据类型,而且这种抽象的数据类型还包括能够对于他实行的操作,比如说我们定义一种数据类型叫“学生”,具体的数据我可以定义一中类似表的结构存储,而且还要定义一些操作,比如说添加学生,删除学生,这两部分就共同组成了“学生”这个抽象的数据类型。

不知你明白没?

问题二:我去!到底什么是抽象数据类型,干啥用的? 抽象数据类型是基于一类逻辑关系的数据类型以及定义在这个类型之上的一组操作。通俗点说就是某个数据结构的定义和对个数据结构的所有操都放在一起,这样看着比较整洁。比如线性表抽象数据类型就是线性表的数学定义,和对线性表的求长度,判断是否为空,插入删除元素,等一系列函数放在一起的一大块东西。你大概理解就行,主要是要把里面每个函数的实现过程搞清楚。

问题三:抽象数据类型有什么用?怎么用? 首相数据类型,泛指除基本数据类型以外的数据类型。什么叫类型?就是一类数据。基本数据类型被人做是最基本地,不可再划分的数据,一般就是整形、浮点型、以及字符型。抽象数据类型是由若干基本数据类型归并之后形成的一种新的数据类型,这种类型由用户定义,功能操作比基本数据类型更多,一般包括结构体和类。其实说白了,抽象数据类型就是把一些有一定关联的基本数据类型打包,然后当做新的数据类型使用。

至于有伐么用,这个用处可大了。比如你要实现对一个人地信息管理,如果你只用基本数据类型那么你需要定义很多数据类型的变量比如名字、性别、出生地、生日之类的,并且操作起来不方便。如果用抽象数据来实现就简单了,直接把这些信息放包装在一个新的数据类型中,然后就可以直接定义这样的一个变量就可以了。

C++中的类更好的实现了封装功能,这就是类。类使得抽象数据类型的可操作性更强了,真正实现了面向对象。至于用法,只要学过C++肯定知道类地用法吧?那就是如何用。也许你现在觉得这样的操作更麻烦了,还不如C语言简洁的好。但是当你有一天真正的进入了公司,你才发现面向对象编程是多么棒的一种编程方式,他可以让你更高效的去开发。

同时告诉你,你对负责操作不是很了解只能证明你的编程数量不够,在编程领域中永远要记住一句话:钢是打出来的。编程仅仅靠看书或是听老师讲解是行不通的,必须亲自躬行才能真正掌握它

问题四:数据结构里抽象数据类型定义有什么用? 编写一个数据类型作为基础类型,这些抽象操作就转换为该类型的成员函数,如果对外的接口就在公有域中,其他在保护或者私有按具体情况

编写该基础类型后,再声明对象,通供对象使用这些操作了

问题五:在数据结构里,什么是抽象数据类型 1、象数据类型(Abstract Data Type 简称ADT)是指一个数学模型以及定义在此数学模型上的一组操作。

2、抽象数据类型需要通过固有数据类型(高级编程语言中已实现的数据类型)来实现。

3、抽象数据类型是与表示无关的数据类型,是一个数据模型及定义在该模型上的一组运算。

4、对一个抽象数据类型进行定义时,必须给出它的名字及各运算的运算符名,即函数名,并且规定这些函数的参数性质。一旦定义了一个抽象数据类型及具体实现,程序设计中就可以像使用基本数据类型那样,十分方便地使用抽象数据类型。

问题六:抽象数据类型与数据结构有什么具体的区别和联系 5分 数据结构、数据类型和抽象数据类型,这三个术语在字面上既不同又相近,反映出它们在含义上既有区别又有联系。

数据结构是在整个计算机科学与技术领域上广泛被使用的术语。它用来反映一个数据的内部构成,即一个数据由哪些成分数据构成,以什么方式构成,呈什么结构。数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系,物理上的数据结构反映成分数据在计算机内的存储安排。数据结构是数据存在的形式。

v数据是按照数据结构分类的,具有相同数据结构的数据属同一类。同一类数据的全体称为一个数据类型。在程序设计高级语言中,数据类型用来说明一个数据在数据分类中的归属。它是数据的一种属性。这个属性限定了该数据的变化范围。为了解题的需要,根据数据结构的种类,高级语言定义了一系列的数据类型。不同的高级语言所定义的数据类型不尽相同。Pascal语言所定义的数据类型的种类如图1-8所示。

其中,简单数据类型对应于简单的数据结构构造数据类型对应于复杂的数据结构在复杂的数据结构里,允许成分数据本身具有复杂的数据结构,因而,构造数据类型允许复合嵌套指针类型对应于数据结构中成分数据之间的关系,表面上属简单数据类型,实际上都指向复杂的成分数据即构造数据类型中的数据,因此这里没有把它划入简单数据类型,也没有划入构造数据类型,而单独划出一类。

数据结构反映数据内部的构成方式,它常常用一个结构图来描述:数据中的每一项成分数据被看作一个结点,并用方框或圆圈表示,成分数据之间的关系用相应的结点之间带箭号的连线表示。如果成分数据本身又有它自身的结构,则结构出现嵌套。这里嵌套还允许是递归的嵌套。

由于指针数据的引入,使构造各种复杂的数据结构成为可能。按数据结构中的成分数据之间的关系,数据结构有线性与非线性之分。在非线性数据结构中又有层次与网状之分。 由于数据类型是按照数据结构划分的,因此,一类数据结构对应着一种数据类型。数据类型按照该类型中的数据所呈现的结构也有线性与非线性之分,层次与网状之分。一个数据变量,在高级语言中的类型说明必须是读变量所具有的数据结构所对应的数据类型。

最常用的数据结构是数组结构和记录结构。数组结构的特点是:

成分数据的个数固定,它们之间的逻辑关系由成分数据的序号(或叫数组的下标)来体现。这些成分数据按照序号的先后顺序一个挨一个地排列起来。

每一个成分数据具有相同的结构(可以是简单结构,也可以是复杂结构),因而属于同一个数据类型(相应地是简单数据类型或构造数据类型)。这种同一的数据类型称为基类型。

所有的成分数据被依序安排在一片连续的存储单元中。

概括起来,数组结构是一个线性的、均匀的、其成分数据可随机访问的结构。由于这种结构有这些良好的特性,所以最常被人们所采用。在高级语言中,与数组结构相对应的数据类型是数组类型,即数组结构的数据变量必须说明为array [i] of T0 ,其中i是数组结构的下标类型,而T0是数组结构的基类型。

记录结构是另一种常用的数据结构。它的特点是:

与数组结构一样,成分数据的个数固定。但成分数据之间没有自然序,它们处于平等地位。每一个成分数据被称为一个域并赋予域名。不同的域有不同的域名。

不同的域允许有不同的结构,因而允许属于不同的数据类型。

与数组结构一样,它们可以随机访问,但访问的途径靠的是域名。

在高级语言中记录结构对应的数据类型是记录类型。记录结构的数据的变量必须说......>>

问题七:抽象数据类型 类的基础:抽象数据类型抽象数据类型(ADT, abstract data type)是指一些数据以及对这些数据所进行的操作的 *** 。这些操作既向程序的其余部分描述了这些数据是怎么样的,也允许程序的其余部分改变这些数据。“抽象数据类型”概念中“数据”一词的用法有些随意。一个ADT可能是一个图形窗体以及所有能影响该窗体的操作;也可以是一个文件以及对这个文件进行的操作;或者是一张保险费率表以及相关操作等等。要想理解面向对象编程,首先要理解ADT。不懂ADT的程序员开发出来的类只是名义上的“类”而已――实际上这种“类”只不过就是把一些稍有点儿关系的数据和子程序堆在一起。然而在理解ADT之后,程序员就能写出在一开始很容易实现、日后也易于修改的类来。传统的编程教科书在讲到抽象数据类型时,总会用一些数学中的事情打岔。这些书往往会像这么写:“你可以把抽象数据类型想成一个定义有一组操作的数学模型。”这种书会给人一种感觉,好像你从不会真正用到抽象数据类型似的――除非拿它来催眠。把抽象数据类型解释得这么空洞是完全丢了重点。抽象数据类型可以让你像在现实世界中一样操作实体,而不必在低层的实现上摆弄实体,这多令人兴奋啊。你不用再向链表中插入一个节点了,而是可以在电子表格中添加一个数据单元格,或向一组窗体类型中添加一个新类型,或给火车模型加挂一节车厢。深入挖掘能在问题领域工作(而非在底层实现领域工作)的能量吧!Example of the Need for an ADT需要用到ADT的例子为了展开讨论,这里先举一个例子,看看ADT在什么情况下会非常有用。有了例子之后我们将继续深入细节探讨。假设你正在写一个程序,它能用不同的字体、字号和文字属性(如粗体、斜体等)来控制显示在屏幕上的文本。程序的一部分功能是控制文本的字体。如果你用一个ADT,你就能有捆绑在相关数据上的一组操作字体的子程序――有关的数据包括字体名称、字号和文字属性等。这些子程序和数据 *** 为一体,就是一个ADT。如果不使用ADT,你就只能用一种拼凑的方法来操纵字体了。举例来说,如果你要把字体大小改为12磅(point),即高度碰巧为16个像素(pixel),你就要写类似这样的代码:currentFont.size = 16如果你已经开发了一套子程序库,那么代码可能会稍微好看一些:currentFont.size = PointsToPixels(12)或者你还可以给该属性起一个更特定的名字,比如说:currentFont.sizeOnPixels = PointsToPixels(12)但你是不能同时使用currentFont.sizeInPixels和currentFont.sizeInPoints,因为如果同时使用这两项数据成员,currentFont就无从判断到底该用哪一个了。而且,如果你在程序的很多地方都需要修改字体的大小,那么这类语句就会散布在整个程序之中。如果你需要把字体设为粗体,你或许会写出下面的语句,这里用到了一个逻辑or运算符和一个16进制常量0x02:currentFont.attribute = CurrentFont.attribute or 0x02如果你够幸运的话,也可能代码会比这样还要干净些。但使用拼凑方法的话,你能得到的最好结果也就是写成这样:currentFont.attribute = CurrentFont.attribute or BOLD或者是这样:currentFont.bold = True就修改字体大小而言,这些做法都存在一个限制,即要求调用方代码直接控制数据成员,这无疑......>>

问题八:抽象数据类型的简介 抽象数据类型的描述包括给出抽象数据类型的名称、数据的 *** 、数据之间的关系和操作的 *** 等方面的描述。抽象数据类型的设计者根据这些描述给出操作的具体实现,抽象数据类型的使用者依据这些描述使用抽象数据类型。

问题九:抽象数据类型定义有哪些内容 内容定义阐发已

存储结构计算机内才意义逻辑结构映射已所存储结构算重复没意义

逻辑结构包含数据象数据关系

数据运算包含数据象数据关系基本操作集

三元素复合已

比产力构要素劳者劳工具劳象劳工具劳象归劳资料

问题十:c/c++中类和抽象数据类型的区别 抽象数据类型

abstract data type

其实更多的是一种数据结构上的概念

类的话你因该比较熟悉,

比如我们要做一个链表

我们这次对class A写一个链表,

但是可能换了class V又要写一个新的链表

为了避免这种重复性劳动

我们可以创造一个模板,提供一些基本操作

如插入,删除,排序等等

然后以后所有类型都可以使用

最著名的就是STL库了

实现了list,vector.stack,queue

等等

使用么

vector a

class A{}

stack b

可以看一下STL的使用

全都是自定义的。

C语言没什么抽象数据类型。都是教学参考书,为了一般化,假装假设一个抽象数据类型,然后假设一些基本操作,主要目的是为了讲解数据结构,比如链表啊,堆栈啊。

真正实现中,都是具体的。

C语言本身,操作系统本身根本不会定义这些内容。