ADT、C和Java
《编程导论(Java)·5 链表、数组和栈》
数据抽象使得用户程序猿在编写客户程序时,摆脱该数据类型的实现细节而只关心该数据类型的接口。在计算机科学中。有一些重要的数据抽象——数据结构,应该尽早地介绍。
计算机科学研究的数据结构主要有线性表、栈、队列、集合、图、树等等。
《编程导论(Java)》不是专门介绍《数据结构》的课程,所以仅介绍链表(linked list)和数组(array)和栈,将它们作为熟悉分支、循环、面向对象的练习场。同一时候。作为体会OO概念的练习场。
吐槽
这里先谈谈《数据结构》课程与实现语言的事。
《数据结构(C语言版)》严蔚敏、吴伟民是经典教材,作者在前言中清楚的说明:
“全书中採用类C语言作为数据结构和算法的描写叙述语言。在对数据的存储结构和算法进行描写叙述时,尽量考虑C语言的特色。如利用数组的动态分配实现顺序存储结构等。
尽管C语言不是抽象数据类型的理想描写叙述工具,但鉴于眼下和近一两年内(注:版次1997.4),“面向对象程序设计”并不是数据结构的先修课程,故本书未直接採用类和对象等设施。而是从C
语言中精选了一个核心子集。并增添C++语言的引用调用參数传递方式等,构成了一个类C描写叙述语言。
它使本书对各种抽象数据类型的定义和实现简明清晰,既不拘泥于C语言的细节, 又easy转换成能上机运行的C或C++程序。 ”
yqj2065真的非常奇怪,为什么直到如今2015+,还有非常多人用C语言版数据结构。尽管《数据结构(C语言版)》非常easy转换成能上机运行的C或C++程序,管你easy不easy。知道什么叫工具吗?越方便越好。假设Java、C#解说数据结构比C方便,就应该选Java/C#。这里也不是锻炼抽象思维的场所?假设学习高等数学、离散数学不嫌够的话。能够旁听数学系的课。
事实上yqj2065想说的是:从学习面向对象的角度,数据结构是一个非常好的练习场,比GUI更好。这也是我将它们放在《第5章链表、数组和栈》的原因。
ADT
在《数据结构》课程中。抽象数据类型(Abstract Data Type、ADT)是一个重要的概念。而在我们这里它是一个可选的术语。
为数据结构建模的ADT。描写叙述的内容包含:(1)数据元素的集合、(2)元素之间的关系和(3)该ADT拥有的操作。我们分而治之
(3)使用某个Java接口I描写叙述该ADT拥有的操作,
(2)用一个数据类型X(一般是结点)描写叙述该ADT的数据元素并以X的对象之间的关系描写叙述元素之间的关系。
(3)以接口I的实现类管理元素的集合。
随便说一下,“抽象数据类型——一个数学模型以及定义在该模型上的一组操作”,这不是名词解释“什么是抽象数据类型”的答案,而是“数据类型”的答案。
ADT是为某一种类的具有同样行为的数据结构建立的数学模型——比如栈应该具有压入和弹出的行为,或者为具有相似语义的多种编程语言的某一数据类型建立的数学模型——比如各种语言中都有整数这一数据类型。
元素之间的关系是重点,关系通常以序偶来描写叙述。如栈顶元素被最先弹出,这样的关系反映在实现代码中。直接针对链表而言。元素之间的关系比較直观,由next设置。
使用Java学习数据结构,仅仅须要3个基本武器:结点、数组和String。
ADT、C和Java的更多相关文章
- 3.2 表 ADT -3.3 Java Collection API 中的表
3.2 表 ADT 处理形如 A0, A1, A2, --, AN-1 的一般的表.我们称这个表大小为N.将大小为0的特殊表称为空表 对于除空表以外的任何表,称 Ai-1 前驱 Ai,Ai 后继 Ai ...
- (二)使用数组长度实现ADT bag(java)
目录 1.使用固定大小的数组实现ADT bag 包 1.1 一组核心方法 1.2 实现核心方法 1.3 让实现安全 1.4 测试核心方法 1.5 实现更多的方法 1.6 删除项的方法 1.7 测试 ...
- ADT上跑java application
Invalid layout of java.lang.String at value## A fatal error has been detected by the Java Runtime En ...
- android在更新ADT以后报java.lang.NoClassDefFound的解决办法
Android不是很熟.从网上找到了想要的代码后兴高采烈的导入workspace中,直接开Run. but在真机的时候Console.LogCat下都没显示什么有用的东西,就是写NDK编译完Nativ ...
- (一)从设计的角度来看ADT(Java)
<数据结构与抽象——Java语言描述>第一章学习笔记 感想:以前学数据结构关注于方法及实现,为了完成作业和手写代码,没有从设计层面考虑过,第一章设计一个bag ADT,借助于Java in ...
- java设计模式--基础思想总结--父类引用操作对象
看设计模式的相关书籍也有一段时间了,一开始其实是抱着作为java三大框架的基础知识储备来学习的,不过到后来,才发现,在设计模式的一些准则装饰下,java的面向对象威力才真正地体现出来,后面的将会陆续地 ...
- 2018-2019-20172329 《Java软件结构与数据结构》第二周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第二周学习总结 教材学习内容总结 <Java软件结构与数据结构>第三章 集合概述--栈 一.集合 1.我们印 ...
- java实现的LinkedLilst
package javabean.adt.List; import java.util.ConcurrentModificationException; import java.util.Iterat ...
- Java实现ArrayList
说明都在注释: package adt.array; import java.util.Iterator; import java.util.NoSuchElementException; /** * ...
- Android 开发环境在 Windows7 下的部署安装
Android SDK Android SDK 为 Android 应用的开发.测试和调试提了必要的API库和开发工具. ADT Bundle 下载 如果你是一个android 开发新手,推荐你下载使 ...
随机推荐
- hihoCoder-1633 ACM-ICPC北京赛区2017 G.Liaoning Ship’s Voyage 线段与三角形规范相交
题面 题意:给你一个20*20的地图,起点(0,0),终点(n-1,n-1),有障碍的点为‘#’,每次可以向8个方向走一步,还给了一个三角形,除了障碍以外,到这8个方向上的点的线段如果没有与三角形相交 ...
- .net core发布到IIS后502.5错误
net core 在win7系统发布后,出现在502.5错误. 打开“开始”菜单,搜索“事件查看器”,然后选择“事件查看器”应用. 在“事件查看器”中,打开“Windows 日志”节点. 选择“应用程 ...
- mysql 强制修改密码
mysql忘记密码时强制修改步骤如下: 1.用命令编辑配置文件/etc/my.cnf 2.添加一条语句使其变为不用密码就能进入的状态 skip-grant-tables 3.保存并退出,然后再命令行输 ...
- getElementsByName使用
查了下手册,getElementsByName()不能提取没有name属性的标签.div标签本身没有name属性,所以不能被提取.有name标签的主要是各种input标签,所以默认情况下getElem ...
- [Offer收割]编程练习赛39
公平分队 #pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h> #includ ...
- Teamwork-六月上旬心得体会
六月上旬心得体会 在五月末的时候,老师针对我们团队的状况提出了几点建议和解决方案,而这半个月里,我们尝试性地运用了其中的几件工具与方法. 1.燃尽图与每日总结 我们采用的是<构建之法>书中 ...
- date 格式化
以这个为例: yyyy-MM-dd HH:mm:ss 首先得写好你需要的模板 options.sign = options.sign || 'yyyy-MM-dd HH:mm:ss'; 其次就可 ...
- SQL Server数据库备份的几个建议
1.定期进行数据备份(完备或差异备份)和日志备份. 2.使用压缩备份来减少磁盘空间占用和提高备份效率. 3.定期检查磁盘剩余空间和备份文件增长情况,以确保有足够空间进行下一次备份. 4.使用校验和(C ...
- 避免关注底层硬件,Nvidia将机器学习与GPU绑定
Nvidia释放的一组cuDNN的库,有效的实现了其与多种深度学习框架的整合.基于cuDNN,加速了代码的运行,同时让研究员避免去关心底层硬件性能. 关键字: 编程语言语音识别Nvidia 原文链接: ...
- RabbitMQ学习之messageconver插件实现(Gson)
RabbitMQ已经实现了Jackson的消息转换(Jackson2JsonMessageConverter),由于考虑到效率,如下使用Gson实现消息转换. 如下消息的转换类的接口MessageCo ...