《编程导论(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. php如何将网上的图片下载到本地

    <?phpheader("Content-Type: application/force-download");header("Content-Dispositio ...

  2. Gym-101915C Shahhoud Training Hussain 模拟

    题面 题意:每天有K本书,你最多看P本一天,问N天后多少本书没有看 题解:ans=(K-P)*N; 注意一点就是P>=K的时候,ans=0; #include<bits/stdc++.h& ...

  3. MYSQL5.6和5.7编译标准化安装与配置

    文档结构图如下: 一.前期规划 1.软件环境以及说明 操作系统:RedHat Linux 6.7 64位 数 据 库:MYSQL5.6.38/5.7.20 MySQL 5.6:初始化数据时需要进到家目 ...

  4. mysql.connector 事务总结

    mysql.connector事务总结: connection.autocommit = 0 (默认值) 事务处理 使用 connection.commit()方法 #!/usr/bin/env py ...

  5. ROS-tutorials-launch-查看日志

    前言:launch文件的作用是一次可以启动多个节点. 1.新建launch文件 在chapter2_tutorials包下新建launch文件夹,并在launch文件夹下新建chapter2.laun ...

  6. 通过Hibernate实现添加功能

    package com.demo.dao; import org.hibernate.Session; import org.hibernate.SessionFactory; import org. ...

  7. MSSQL数据库设置单用户模式后无法连上解决办法

    设置数据库单用户模式后, 发现用系统管理员账号无法连接数据库, 用sa账号也不行. 首先, 马上去查了一下有什么进程比这个连接给占用了 SELECT [Spid] = session_Id , eci ...

  8. win 7环境下java环境变量的配置

    http://www.cnblogs.com/zhj5chengfeng/archive/2013/01/01/2841253.html %Java_Home%\bin;%Java_Home%\jre ...

  9. 【udacity】机器学习-2模型验证

    Evernote Export 1.模型的评估与验证简介 机器学习通常是大量传入数据,然后会有一些关于数据的决策.想法和摘要. 2.模型评估 评估模型使用的是各种数据分析的方法,至少需要使用pytho ...

  10. prevent阻止标签默认行为&stop阻止事件冒泡

    <form id="vm" v-on:submit.prevent="register"> 1.prevent是preventDefault,阻止标 ...