热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

抽象数据类型ADT

抽象数据类型(abstructdatatype,ADT)ADT的本质其实就是一种对数据结构或算法的描述语言,用“自然语言+编程语言格式”的方式对需要构造的模型来进行描述,有点
抽象数据类型(abstruct data type,ADT) ADT的本质其实就是一种对数据结构或算法的描述语言,用“自然语言+编程语言格式”的方式对需要构造的模型来进行描述,有点类似伪代码,其实也可以认为是伪代码的说~~ 然而它却不能够直接被编译器编译出应用程序,因为用的是机器无法识别的自然语言,因此ADT能够起到的唯一作用就是类似与草图一样的东西,当我们想要实现某个程序的算法,或是某个数据结构,用ADT的思想来草拟一个大致的框架出来,它比算法流程框图更加的详细,更贴近编程语言,虽然无法通过编译,但是好处就在于不用考虑语法的细节,只要列出主要的重点就可以了。 ADT同时给出了一个非常固定的格式: ADT 抽象数据类型名 数据对象     {数据对象的定义}//这其实就是C++类里的成员变量 数据关系 {数据关系的定义}//这是类中的成员变量之间的关系 基本操作 {基本操作的定义}//类中的各种函数的定义 同时基本操作,也就是函数的定义格式为: 返回类型基本操作名(参数表) 比如说:int Process(int argument) 同时ADT的好处在于给定了一个函数必须具有的5个基本要素: 1、输入:对输入数据的说明。 //一般来说输入指的就是函数的参数,我们必须要想微软的MSDN中那样,清晰的给出所有参数的说明,那样写出来的函数别人才会用,在MSDN中这叫做"in" 2、前置条件:描述了操作执行之前数据结构和参数应满足的条件。若不满足,则操作失败,并返回相应出错信息。 //前置条件其实就是这个函数要正常执行需要的条件,一般在函数体内需要定义清楚,这样可以尽可能的保证算法的健壮性,不会因为奇怪的错误而终止,像Windows中的GetLastError()这个函数就可以获得函数返回的错误信息,如果看MSDN中的函数定义,我们会发现,几乎所有的函数都有执行失败时的返回值,返回出错的信息,便于调试。 3、过程:对数据执行的操作 //过程其实就是这个函数功能的核心部分了,也就是一个需要达到的最终目标所要做的事情。通常情况下,我们是考虑不到所有的出错信息的,所以我们可以先把函数的核心部分代码构造好,把主干理清楚,至于细枝末节的出错处理之类的可以在核心功能实现过后在进行添加。很多书籍都有一个通病,就是给出一个函数的代码,前面是各种出错处理的代码,老长老长的,看了很长时间都看不到想要的功能,出书人的意图是好的,就是希望我们考虑到代码的健壮性,算法要够鲁棒,但是作为学习的我们来说,这却是带给我们消磨看下去的兴趣的一个种子。 4、输出:对返回数据的说明。 //通常,一个函数的返回数据并不仅仅只有它的return,还包括这个函数的一些参数,如果参数设置成指针或是引用的形式,那么函数结束之后,指针或是引用对应的参数可能会发生变化,这也是可以作为返回的数据的。如果看MSDN就会发现,有些参数标明了out的属性,说明这个参数是一个作为输出的参数,通常是一个buff 5、后置条件:执行本操作后系统的状态,“系统”可看作是某个数据结构。 //通常函数返回之后,有可能会对其他的函数或是数据结构带来影响,MSDN中有些函数的返回值可以是用作其他函数的参数,MSDN中会说明的很详细。这应该就是所谓的后置条件。
所以ADT给我们带来的是一种思想,一种规范的数据结构设计思想,遵循ADT的规则,我们可以设计出优秀的数据结构,所有的人都能看懂,不过最后的实现还是要用代码来实现,代码实现就比较简单了。
推荐阅读
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 本文介绍了2020年计算机二级MSOffice的选择习题及答案,详细解析了操作系统的五大功能模块,包括处理器管理、作业管理、存储器管理、设备管理和文件管理。同时,还解答了算法的有穷性的含义。 ... [详细]
author-avatar
夕阳红梅乎
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有