`
lovnet
  • 浏览: 6692485 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

java算法:抽象数据类型ADT

 
阅读更多

java算法:抽象数据类型ADT

开发有关系数据和处理这些数据的方法的抽象数据模型是用计算机解决问题的过程中必不可少的步骤。

使用抽象数据类型,可以很好的把任何具体的数据结构表示与算法分开,利于研究算法。

抽象数据类型是一种智能通过接口访问的数据类型(值与值上的操作所构成的集合),我们把使用ADT的程序称为客户程序,把指定数据类型的程序称为实现。

抽象数据类型与其他数据类型的主要区别是:对于抽象数据类型,客户程序只能通过接口中提供的操作来访问数据值。接口把所有的数据表示和操作方法的实现完全与客户程序隔离。在Java中,一般不能直接访问数据,而是通过方法访问的。

例1:点的类实现

Java代码 复制代码
  1. publicclassPoint{
  2. privatedoublex,y;
  3. Point(){
  4. x=Math.random();
  5. y=Math.random();
  6. }
  7. Point(doublex,doubley){
  8. this.x=x;
  9. this.y=y;
  10. }
  11. doublex(){
  12. returnx;
  13. }
  14. doubley(){
  15. returny;
  16. }
  17. doubler(){
  18. returnMath.sqrt(x*x+y*y);
  19. }
  20. doubletheta(){
  21. returnMath.atan2(y,x);
  22. }
  23. doubledistance(Pointp){
  24. doubledx=x-p.x;
  25. doubledy=y-p.y;
  26. returnMath.sqrt(dx*dx+dy*dy);
  27. }
  28. publicStringtoString(){
  29. return"("+x+","+y+")";
  30. }
  31. }

定义ADT的根本原因:通过使客户不能直接访问数据表示,可以随意地对数据表示进行修改!在这种情况下,使用极坐标来表示点,但客户程序可以不管点是如何实现的而执行相同的运算。

例2:点类(替换实现)

Java代码 复制代码
  1. publicclassPoint2{
  2. privatedoubler,theta;
  3. privatestaticPoint2p2;
  4. publicstaticPoint2getInstance(){
  5. doublex=Math.random()*100;
  6. doubley=Math.random()*100;
  7. p2=newPoint2(x,y);
  8. returnp2;
  9. }
  10. publicPoint2(doublex,doubley){
  11. this.r=Math.sqrt(x*x+y*y);
  12. this.theta=Math.atan2(y,x);
  13. }
  14. publicdoublex(){
  15. returnr*Math.cos(theta);
  16. }
  17. publicdoubley(){
  18. returnr*Math.sin(theta);
  19. }
  20. publicdoubler(){
  21. returnr;
  22. }
  23. publicdoubletheta(){
  24. returntheta;
  25. }
  26. publicdoubledistance(Point2p){
  27. doubledx=x()-p.x();
  28. doubledy=y()-p.y();
  29. returnMath.sqrt(dx*dx+dy*dy);
  30. }
  31. publicStringtoString(){
  32. return"("+x()+","+y()+")";
  33. }
  34. }

使用ADT,精确提供返回客户感兴趣的数据方法。而且在实现方法更灵活。

例3:点的ADT接口

Java代码 复制代码
  1. publicinterfaceIPoint{
  2. doublex();
  3. doubley();
  4. doubler();
  5. doubletheta();
  6. doubledistance(Pointp);
  7. publicStringtoString();
  8. }

ADT是作为支持模块化编程的一种有效机制。模块化编程是现代大型软件系统的一种组织方法。ADT提供了灵活的修改,ADT接口明确定义了程序访问的方法。

分享到:
评论

相关推荐

    DataStructures-ADT:抽象数据类型(ADT)算法的实现

    在像Java这样的面向对象的语言中,抽象数据类型及其实现共同构成一个类。 与ADT相关的每个操作都由成员,功能或方法实现。 定义数据项所需空间的变量称为数据成员。 对象是类的实例,即在计算机程序执行期间创建并...

    三种架构风格实现KWIC

    抽象数据风格的按字母排序算法用的是快速排序算法,代码位于SA\src\adtstyle\impl.AlphabetizerImpl.java,调用返回风格用的是插入排序算法,代码位于SA\src\invretstyle\Alphabetizer.java,管道过滤器风格用的是堆...

    数据结构与算法分析_Java语言描述(第2版)

    3.1 抽象数据类型 3.2 表ADT 3.2.1 表的简单数组实现 3.2.2 简单链表 3.3 JavaCollectionsAPI中的表 3.3.1 Collection接口 3.3.2 Iterator接口 3.3.3 List接口、ArrayList类和LinkedList类 3.3.4 例:remove方法对...

    数据结构与算法分析_Java语言描述(第2版)]

    表、栈和队列3.1 抽象数据类型3.2 表ADT3.2.1 表的简单数组实现3.2.2 简单链表3.3 JavaCollectionsAPI中的表3.3.1 Collection接口3.3.2 Iterator接口3.3.3 List接口、ArrayList类和LinkedList类3.3.4 例:remove...

    数据结构与算法分析Java语言描述(第二版)

    表、栈和队列3.1 抽象数据类型3.2 表ADT3.2.1 表的简单数组实现3.2.2 简单链表3.3 JavaCollectionsAPI中的表3.3.1 Collection接口3.3.2 Iterator接口3.3.3 List接口、ArrayList类和LinkedList类3.3.4 例:remove...

    数据结构与算法分析 Java语言描述第2版

    表、栈和队列3.1 抽象数据类型3.2 表ADT3.2.1 表的简单数组实现3.2.2 简单链表3.3 JavaCollectionsAPI中的表3.3.1 Collection接口3.3.2 Iterator接口3.3.3 List接口、ArrayList类和LinkedList类3.3.4 例:remove...

    程序设计抽象思想:C语言描述-

     第8章 抽象数据类型  ……  第9章 效率与ADT  第10章 线性结构  第11章 符号表  第Ⅳ部分 递归数据  第12章 递归链表  第13章 树  第14章 表达式树  第15章 集合  第16章 图  第17章 展望Java

    数据结构与算法分析_Java_语言描述

    小结 练习 参考文献 笫3章 表、栈和队列 3.1 抽象数据类型(ADT) 3.2 表ADT 3.2.1 表的简单数组实现 3.2.2 链表 3.2.3 程序设计细节 3.2.4 双链表 3.2.5 循环链表 3.2.6 例子 3.2.7 链表的游标实现 ...

    数据结构与算法分析-Java语言描述(第2版)_2_2

    3.1 抽象数据类型 3.2 表adt 3.2.1 表的简单数组实现 3.2.2 简单链表 3.3 javacollectionsapi中的表 3.3.1 collection接口 3.3.2 iterator接口 3.3.3 list接口、arraylist类和linkedlist类 3.3.4...

    数据结构与算法分析-Java语言描述(第2版)_1_2

    3.1 抽象数据类型 3.2 表adt 3.2.1 表的简单数组实现 3.2.2 简单链表 3.3 javacollectionsapi中的表 3.3.1 collection接口 3.3.2 iterator接口 3.3.3 list接口、arraylist类和linkedlist类 3.3.4...

    Java单链表源码分析-HW:编程课程

    Java单链表源码分析编程课程 (HW) 编程 I:CSCI 220 + 220 实验室(CofC:2018 ...列表抽象数据类型 (ADT) 实现使用数组作为基本数据结构的有序单链表的实现 列出 ADT 个性化和算法分析 通过添加回文检测器/去除器,

    C++数据抽象和问题求解(第6版).[美]Frank M. Carrano(带详细书签).pdf

    1.4 抽象数据类型 12 1.4.1 设计ADT 14 1.4.2 涉及其他ADT的ADT 17 1.5 ADT包 18 1.5.1 确定行为 18 1.5.2 指定数据和操作 19 1.5.3 ADT的模板接口 22 1.5.4 使用ADT包 24 C++片段1 C++类 29 C1.1 待解决的...

    数据结构单链表插入、删除和修改实验报告

    1)为了实现上述程序功能,需要定义单链表的抽象数据类型:  ADT LinkList {  数据对象:D={ai|ai∈IntegerSet,i=0,1,2,…,n,n≥0}  数据关系:R={,ai+1>|ai,ai+1 ∈D}  基本操作: (1)insert 初始化状态:...

    ADT_Algo_Exercises

    介绍该存储库由抽象数据类型,常用算法和LeetCode练习的基础组成。选择排序插入排序合并排序快速排序堆排序计数排序桶分类基数排序 搜索二元搜寻树遍历深度优先搜索广度优先搜索Dijkstra算法普里姆算法拓扑排序

    非科班出身程序员刷题-resources:资源

    对其中的基本原理有必要掌握抽象数据类型及其作为面向对象编程的数据结构的实现。在选择和分析各种ADT实现中使用面向对象的原理。顺序和链接的存储表示形式:列表,堆栈,队列和表。非线性数据结构:树和图。递归,...

    编程新手真言......

    2.16 数据类型和数据结构是二种不一样的东西 69 2.17 为什么需要变量这些东东 69 2.18 面向类型化的设计和面向无类型泛化的设计-OO不是银弹 70 第3章 语言之争 71 3.1 学编程之初,语言之争 71 3.2 语言与应用与人(1...

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    3.4 对引用数据类型的操作 65 3.4.1 字符串操作 65 3.4.2 数组操作 67 3.4.3 NIO 操作 68 3.4.4 访问域 69 3.4.5 调用方法 71 3.4.6 域和方法描述符 72 3.5 异常处理 75 3.5.1 捕获异常 75 3.5.2 抛出异常 ...

Global site tag (gtag.js) - Google Analytics