《编程导论(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。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXFqMjA2NQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" style="border:none; max-width:100%">

ADT、C和Java的更多相关文章

  1. 3.2 表 ADT -3.3 Java Collection API 中的表

    3.2 表 ADT 处理形如 A0, A1, A2, --, AN-1 的一般的表.我们称这个表大小为N.将大小为0的特殊表称为空表 对于除空表以外的任何表,称 Ai-1 前驱 Ai,Ai 后继 Ai ...

  2. (二)使用数组长度实现ADT bag(java)

    目录 1.使用固定大小的数组实现ADT bag 包 1.1 一组核心方法 1.2 实现核心方法   1.3 让实现安全 1.4 测试核心方法 1.5 实现更多的方法 1.6 删除项的方法 1.7 测试 ...

  3. ADT上跑java application

    Invalid layout of java.lang.String at value## A fatal error has been detected by the Java Runtime En ...

  4. android在更新ADT以后报java.lang.NoClassDefFound的解决办法

    Android不是很熟.从网上找到了想要的代码后兴高采烈的导入workspace中,直接开Run. but在真机的时候Console.LogCat下都没显示什么有用的东西,就是写NDK编译完Nativ ...

  5. (一)从设计的角度来看ADT(Java)

    <数据结构与抽象——Java语言描述>第一章学习笔记 感想:以前学数据结构关注于方法及实现,为了完成作业和手写代码,没有从设计层面考虑过,第一章设计一个bag ADT,借助于Java in ...

  6. java设计模式--基础思想总结--父类引用操作对象

    看设计模式的相关书籍也有一段时间了,一开始其实是抱着作为java三大框架的基础知识储备来学习的,不过到后来,才发现,在设计模式的一些准则装饰下,java的面向对象威力才真正地体现出来,后面的将会陆续地 ...

  7. 2018-2019-20172329 《Java软件结构与数据结构》第二周学习总结

    2018-2019-20172329 <Java软件结构与数据结构>第二周学习总结 教材学习内容总结 <Java软件结构与数据结构>第三章 集合概述--栈 一.集合 1.我们印 ...

  8. java实现的LinkedLilst

    package javabean.adt.List; import java.util.ConcurrentModificationException; import java.util.Iterat ...

  9. Java实现ArrayList

    说明都在注释: package adt.array; import java.util.Iterator; import java.util.NoSuchElementException; /** * ...

  10. Android 开发环境在 Windows7 下的部署安装

    Android SDK Android SDK 为 Android 应用的开发.测试和调试提了必要的API库和开发工具. ADT Bundle 下载 如果你是一个android 开发新手,推荐你下载使 ...

随机推荐

  1. Unsupported major.minor version 52.0 (unable to load class XXX

    java项目构建从高版本JDK改为低版本JDK报错.这是再次编译时使用的JDK版本比你原来编译的版本低所导致的. 转自:http://blog.csdn.net/zixiao217 maven项目在服 ...

  2. JAVA 中for-each循环使用方法

    for each循环还是第一次见,“java SE 5.0增加了一种功能很强的循环结构,可以用来一次处理数组中的每个元素(其他类型的元素集合亦可)而不必为指定下标值而分心”. 这种增强的for eac ...

  3. Html Ajax上传文件,form表单下载文件

    Html中的代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&quo ...

  4. 10.2&10.3 Xcode开发包

    10.2开发包下载链接 10.3开发包下载链接 Finder打开后,按command+shift+G前往这个地址: /Applications/Xcode.app/Contents/Developer ...

  5. css要点

    1.对inline-block设置overflow: hidden会造成baseline移动,因此需要设置vertical-align才不会出现样式问题. 2.使用flex时,需要对设置flex: 1 ...

  6. Android ToolBar标题文字居中的方法

    在项目的开发中,使用苹果手机的产品,出的界面效果图极有可能(我这里是一定)完全是按照苹果的界面风格来出的,例如界面顶部的title文字位置是水平居中 如图: 那么问题来了,当我们使用ToolBar控件 ...

  7. WPF自定义动画控件 风机

      一:创建WPF项目 二:在项目下添加文件Themes,在此文件下添加新项 ”资源词典“取名为 Generic.xaml  注意大小写,之前遇到因为大小写不对应,导致出错的情况Generic.xam ...

  8. Linux 安装MySQL5.7.18

    https://dev.mysql.com/downloads/mysql/Linux-Generic md5sum mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz ...

  9. gcc和g++的区别和联系

    gcc和g++都是GNU(一个组织)的编译器. 1.对于.c后缀的文件,gcc把它当做是C程序:g++当做是C++程序: 2.对于.cpp后缀的文件,gcc和g++都会当做c++程序. 3.编译阶段, ...

  10. jquery里面控制显示和隐藏 ___土狗toggle

    $("#hide").click(function(){ $("p").hide(); }); $("#show").click(funct ...