新書推薦:
《
创客精选项目设计与制作 第2版 刘笑笑 颜志勇 严国陶
》
售價:HK$
63.3
《
佛山华家班粤菜传承 华家班59位大厨 102道粤菜 图文并茂 菜式制作视频 粤菜故事技法 佛山传统文化 广东科技
》
售價:HK$
227.7
《
武人琴音(十周年纪念版 逝去的武林系列收官之作 形意拳一门三代:尚云祥、韩伯言、韩瑜的人生故事 凸显百年武人命运)
》
售價:HK$
44.9
《
剑桥斯堪的纳维亚戏剧史(剑桥世界戏剧史译丛)
》
售價:HK$
158.7
《
禅心与箭术:过松弛而有力的生活(乔布斯精神导师、世界禅者——铃木大拙荐)
》
售價:HK$
66.1
《
先进电磁屏蔽材料——基础、性能与应用
》
售價:HK$
227.7
《
可转债投资实战
》
售價:HK$
102.4
《
王氏之死(新版,史景迁成名作)
》
售價:HK$
56.4
|
內容簡介: |
本书是十二五普通高等教育本科*规划教材,也是十三五江苏省高等学校重点教材。本书全面系统地介绍数据结构的基础理论和算法设计方法,包括线性表、树、图等数据结构以及查找和排序算法,采用Java语言以面向对象方法设计并实现了这些数据结构及算法。本书精选基础理论内容,重点突出数据结构设计和算法设计,内容涉及的广度和深度符合计算机专业本科的培养目标。通过降低理论难度和抽象性、增强实际应用、强化实践环节等措施,展现理论基础厚实,采用面向对象程序设计思想,加强工程应用能力培养的鲜明特色,从而达到增强学生的理解能力和培养应用能力的教学目标。本书配套教学资源齐全。本书可作为普通高等学校计算机及相近专业本科的数据结构、算法课程教材,也可作为从事计算机软件开发和工程应用人员的参考书。
|
關於作者: |
叶核亚,女,南京工程学院计算机工程学院教师,毕业于南京大学。多年来一直教授"Java程序设计、"数据结构等课程,编写的教材荣获普通高等教育"十一五国家级规划教材、十二五"普通高等教育本科国家级规划教材等。
|
目錄:
|
目 录
第1章 绪论 1
1.1 数据结构的基本概念 1
1.1.1 为什么要学习数据结构 1
1.1.2 什么是数据结构 2
1.1.3 数据类型与抽象数据类型 5
1.2 算法 9
1.2.1 什么是算法 9
1.2.2 算法分析 11
1.2.3 算法设计与实现 13
习题1 16
实验1 算法设计与分析 17
第2章 线性表 18
2.1 线性表的定义及抽象数据类型 18
2.2 线性表的顺序存储结构和实现 20
2.2.1 线性表的顺序存储结构 20
2.2.2 顺序表类的设计及应用 21
2.3 线性表的存储和实现 32
2.3.1 线性表的链式存储结构 32
2.3.2 单链表 33
2.3.3 循环双链表 43
2.4 排序线性表的存储和实现 46
2.4.1 比较对象大小的方法 46
2.4.2 排序顺序表 48
2.4.3 排序单链表 54
2.5 线性表的应用:多项式的存储和运算 55
2.5.1 一元多项式的存储和运算 55
2.5.2 二元多项式的存储和运算 60
习题2 62
实验2 线性表的基本操作 63
第3章 字符串 65
3.1 字符串抽象数据类型 65
3.2 字符串的顺序存储结构和实现 67
3.2.1 常量字符串 67
3.2.2 变量字符串 75
3.3 字符串的模式匹配 79
3.3.1 Brute-Force模式匹配算法 80
3.3.2 模式匹配应用 82
3.3.3 KMP模式匹配算法 84
习题3 90
实验3 字符串的基本操作和模式匹配算法 91
第4章 栈、队列和递归 94
4.1 栈 94
4.1.1 栈的定义及抽象数据类型 94
4.1.2 栈的存储结构和实现 95
4.1.3 栈的应用 97
4.2 队列 105
4.2.1 队列的定义及抽象数据类型 105
4.2.2 队列的存储结构和实现 106
4.2.3 队列的应用 111
4.2.4 优先队列 112
4.3 递归 114
习题4 120
实验4 栈、队列和递归算法 120
第5章 数组和广义表 124
5.1 数组 124
5.2 特殊矩阵的压缩存储 129
5.2.1 三角矩阵、对称矩阵和对角矩阵的压缩存储 129
5.2.2 稀疏矩阵的压缩存储 131
5.3 广义表 141
5.3.1 广义表定义及抽象数据类型 141
5.3.2 广义表的存储结构和实现 143
习题5 148
实验5 矩阵和广义表的存储和运算 149
第6章 二叉树 151
6.1 二叉树概述 151
6.1.1 二叉树的定义、性质及抽象数据类型 151
6.1.2 二叉树的存储结构 154
6.1.3 二叉树的二叉链表实现 155
6.2 树 169
6.2.1 树的定义及抽象数据类型 169
6.2.2 树的存储结构 171
6.2.3 树森林的父母孩子兄弟链表实现 172
6.3 二叉树应用 176
6.3.1 Huffman树 176
6.3.2 表达式二叉树 185
习题6 189
实验6 二叉树和树的基本操作 191
第7章 图 194
7.1 图的概念和抽象数据类型 194
7.2 图的存储结构和实现 201
7.2.1 抽象图类,存储顶点集合 201
7.2.2 图的邻接矩阵存储结构和实现 202
7.2.3 图的邻接表存储结构和实现 207
7.2.4 图的邻接多重表存储结构 212
7.3 图的遍历 212
7.3.1 图的深度优先遍历 213
7.3.2 图的广度优先遍历 216
7.4 最小生成树 218
7.5 最短路径 222
7.5.1 单源最短路径 223
7.5.2** 每对顶点间的最短路径 227
习题7 230
实验7 图的存储结构和操作算法 231
第8章 查找 234
8.1 查找基础 234
8.1.1 查找概述 234
8.1.2 二分法查找 237
8.2 索引 239
8.2.1 分块与索引 239
8.2.2 静态索引 241
8.2.3 动态索引 245
8.3 散列表 246
8.4 二叉排序树和平衡二叉树 251
8.4.1 二叉排序树 251
8.4.2 二叉树采用三叉链表存储结构 258
8.4.3** 平衡二叉树 259
8.5 映射 262
8.5.1 映射的定义及接口 262
8.5.2 散列映射 264
8.5.3 树映射 266
习题8 269
实验8 集合和映射的数据结构设计和查找算法设计 270
第9章 排序 274
9.1 插入排序 274
9.1.1 直接插入排序 274
9.1.2 希尔排序 276
9.2 交换排序 278
9.2.1 冒泡排序 278
9.2.2 快速排序 280
9.3 选择排序 282
9.3.1 直接选择排序 282
9.3.2 堆排序 283
9.4 归并排序 286
9.5 线性表的排序算法 288
9.5.1 顺序表的排序算法 289
9.5.2 单链表的排序算法 289
9.5.3 循环双链表的排序算法 292
习题9 293
实验9 排序算法设计 294
第10章 综合应用设计 296
10.1 Java集合框架 296
10.1.1 Arrays数组类 296
10.1.2 集合 297
10.1.3 映射 304
10.2 实现迭代器 305
10.2.1 设计基于迭代器的通用操作 305
10.2.2 提供迭代器的类 307
10.3 算法设计策略 309
10.3.1 分治法 309
10.3.2 动态规划法 311
10.3.3 贪心法 313
10.3.4 回溯法 323
10.4 课程设计的目的、要求和选题 337
附录A ASCII字符与Unicode值 340
附录B Java关键字 341
附录C Java基本数据类型 342
附录D Java运算符及其优先级 343
附录E Java类库(部分) 344
E.1 java.lang语言包 344
E.2 java.util实用包 347
附录F MyEclipse常用菜单命令 349
参考文献 350
|
內容試閱:
|
前 言
本书是十二五普通高等教育本科国家级规划教材,也是十三五江苏省高等学校重点教材。
数据结构与算法课程是高等学校计算机类及相近专业本科的专业基础课程,是进行程序设计训练的核心课程,是培养软件设计能力不可或缺的重要环节,在计算机学科本科的培养体系中具有非常重要的地位。
本书内容覆盖数据结构的基础理论和典型算法,重点突出数据结构设计和算法设计,通过降低理论难度和抽象性、增强实际应用、强化实践环节等措施,展现理论基础厚实,采用面向对象程序设计思想,加强工程应用能力培养的鲜明特色,从而达到增强学生理解能力和培养应用能力的教学目标。本书配套教学资源齐全。本书特色说明如下。
1.内容全面、理论基础厚实
本书全面、系统地介绍数据结构的基础理论和算法设计方法,阐明线性表、树、图等数据集合的逻辑结构,讨论其存储结构和能进行的操作,以及这些操作的算法设计和实现;针对软件设计中频繁应用的查找和排序问题,根据不同数据结构对操作的实际需求,给出多种查找和排序算法,并分析算法的执行效率。
本书教学目标明确,理论叙述精练、简明扼要;结构安排合理,由浅入深,层次分明,重点突出;算法设计思想清晰,算法分析透彻;程序结构严谨规范,内容涉及的广度和深度符合计算机专业本科的培养目标。
2.采用面向对象程序设计思想,展示了Java语言的优越性
面向对象程序设计方法是目前软件开发的主流方法;Java语言是目前功能最强、应用最广泛的一种完全面向对象程序设计语言,具有成熟而严密的语法体系和强大的应用系统设计能力,其特有的面向对象、跨平台特性、内存自动管理、异常处理、多线程等机制,使其更健壮、更安全、更高效。今日Java应用无处不在,其重要性毋庸置疑。
Java语言提供类的封装、继承、多态和抽象特性,提供数组和对象引用模型,为类、接口和函数提供泛型参数,提供递归函数等,这些不仅具备表达数据结构和算法的基本要素,而且能使算法更简明、更直接,性能更好。因此,本书采用Java语言描述数据结构和实现算法不仅可行,作为面向对象的程序设计方法训练也是十分恰当的,更是数据结构课程教学改革的必然发展趋势,完全符合本科的培养目标。依托一种功能强大的程序设计语言,充分表达和实现复杂的算法设计,体现软件结构化、模块化、可重用的设计思想,是提高程序设计能力的有效手段。
本书充分展示了Java语言的优越性。
① 在设计线性表、二叉树、树、图等数据结构时,以泛型类为设计基础,将封装、继承、多态、抽象等面向对象技术贯穿始终,采用面向对象思想刻画和表达数据结构设计,这是这个时代的软件设计所必需的。
② 以Java的集合框架为背景,采用多种数据结构实现了多种不同特性的集合类,以及各种迭代器。并将Java集合运用于实际工程应用。
3.加强工程应用能力培养
课程难点:其一,内容多,概念抽象,理论深奥,递归算法难度大,较难理解和掌握;其二,要培养学生具有较高的设计能力,理解软件系统设计的本质,需要一段时间,不一定立竿见影。
本课程探索出一套具有理论联系实际,启发式教学,案例驱动,实验驱动特点的教学方法,特别强调培养工程应用能力和技术能力,努力解决课程的难点问题。
① 理论联系实际。在讲解基本概念后,选择偏重应用的例题进行设计和分析,展现理论如何解决实际问题的方法,丰富的实例开阔学生视野。
② 启发式教学。从经典例题中总结出问题的特征及解决问题的规律,让学生自己选择实验题,培养学生从生活中发现问题、分析问题再寻找解决问题方法的能力。
③ 案例驱动。每章先引入典型案例,从案例到概念,从具体到抽象,说明需要面对什么类型的问题,通过需求分析明确目标,提供解决问题的思路和设计方案,最终实现。本书贯彻理论讲授和案例教学相结合的教学方法,目标更明确,思路更清楚,并使算法效率更高。
④ 实验驱动。在每阶段授课前,教师先将实验题目布置给学生,使学生带着问题听课。每次实验,教师逐个检查每位学生写的程序和运行结果,讨论其中存在的问题、改进方法及其优劣。
在实验和课程设计的实践性环节,根据各章实验目的、内容和设计要求,给出典型案例,说明它们的设计思想和设计特点、重点及难点,并分析算法性能。特别为课程设计环节准备了多种算法设计与分析的综合应用程序设计实例,详细说明需求方案、设计思想、模块划分、功能实现、调试运行等环节的设计方法,展现综合运用基础知识的能力以及良好的程序设计习惯,提倡创新能力。
程序设计有其自身的规律,不是一蹴而就的,也没有捷径。程序员必须具备基本素质,必须掌握程序设计语言的基本语法以及算法设计思想和方法,并且需要积累许多经验。这个过程需要一段时间,需要耐心,厚积而薄发。
本书第1~9章是数据结构与算法课程的主要内容,包括线性表、队列、栈、二叉树、图等数据结构设计以及查找和排序算法设计;第10章是为课程设计准备的,进行综合应用设计训练,包括Java集合框架、算法设计策略和课程设计题目。本书程序运行环境是JDK 8和MyEclipse 2015。熟练掌握集成开发环境的各种操作和程序调试技术是程序设计的一项基本技能,需要经过一个逐步积累的过程。JDK和MyEclipse集成开发环境的详细说明见《Java程序设计实用教程(第5版)》(ISBN 978-7-121-34441-1)。
本书由叶核亚编著。感谢南京大学计算机科学与技术系陈本林教授,陈老师认真细致地审阅了全稿,提出了许多宝贵意见;感谢黄纬、潘磊、霍瑛、徐金宝、彭焕峰等老师给予的帮助,感谢众多读者朋友对本书前4版提出的宝贵意见。
对书中存在的不妥与错漏之处,敬请读者朋友批评指正。
本书为任课教师提供配套的教学资源(包含电子教案和例题源代码),需要者可登录华信教育资源网(http:www.hxedu.com.cn),注册后免费下载。
读者反馈:154725745@qq.com。
作 者
|
|