高级搜索  |  搜索帮助
最近的浏览历史
浏览此书的还浏览过
购买此书的人还购买过
书  名:基于MFC的可视化数据结构
  • 作  者: 连远锋、李国和、张秀美、赵旭霞、吴双元
  • 出版时间: 2014-09-01
  • 出 版 社: 清华大学出版社
  • 字  数: 727 千字
  • 印  次: 1-1
  • 印  张: 29.25
  • 开  本: 16开
  • ISBN: 9787302369479
  • 装  帧: 平装
  • 定  价:¥49.00
电子书价:¥34.30 折扣:70折 节省:¥14.70 vip价:¥34.30 电子书大小:25.76M
配套资源下载:
  • 名称
  • 说明
  • 权限
  • 文件大小
  • 点击图标下载
  • 图书样章
  • 所有用户
  • 256K
共有商品评论0条 查看评论摘要
内容简介
  本书首先简要介绍MFC程序设计的基础知识,然后系统地介绍线性表、栈与队列、树与二叉树以及图等数据结构,阐述了各种数据结构的逻辑关系、存储表示,并采用面向对象语言Visual C++的MFC平台,详细阐述可视化线性结构、可视化树结构、可视化图结构和可视化排序的设计思想和实现方法,使读者循序渐进地理解数据抽象、面向对象思想和可视化程序设计等现代化软件设计风格,理解并掌握数据结构知识体系,提高应用Visual C++解决实际问题的能力。
  本书内容丰富,重点突出,概念讲解清楚,表达严谨,逻辑性强,文字通俗易懂。书中插图结合简练的叙述,代码配合详尽而简洁的注释,使得深奥抽象的概念和过程具体化并便于理解和记忆。本书示例源代码等可以从www.tup.com.cn下载。
前言
  “数据结构”是计算机专业的重要专业基础课,是软件开发和维护的基础。它所涉及的知识内容及研究的技术方法,不仅为程序设计提供方法论的指导,并且在软件工程的开发周期中发挥着不可替代的作用。
  随着计算机技术的发展,社会对计算机程序开发水平的要求也日益提高,为适应此形势,高校的数据结构教学内容也在不断地改革。现实生活中的问题经过抽象,设计相应的存储结构及对应的求解问题算法,才可以被计算机处理。
  许多读者在学习数据结构课程时感觉概念较为抽象,算法理解困难,这在某种程度上源自于对数据结构特点认识上的偏差。同时,本课程的学习过程也是复杂程序设计的训练过程,要求学生编写的程序结构清楚和正确易读,符合软件工程的规范。随着软件工程技术的不断发展,面向对象的可视化编程技术已经成为当今软件开发的重要手段之一,为此,将可视化编程技术引入到数据结构课程学习,有助于读者逐步理解并有效地使用数据结构,还可以体会这些数据结构的多种实现技巧。
  目前,C++语言已经成为高校理工科学生的必修或选修课程,该课程使学生初步理解和掌握了面向对象程序设计的思想和方法。MFC作为首先使用C++编写的Windows应用程序框架,深刻体现了设计者的计算思维和程序设计技巧,而这些思维方式和技巧反过来又影响了当今软件工程技术的思想潮流和发展方向。为了帮助读者更好地学习数据结构课程,理解和掌握算法设计所需的技术,作者通过多年的教学实践,以Visual C++为开发环境,系统地讲解基于MFC可视化数据结构所涉及的各种技术。考虑到该课程的教学特点,合理地对数据结构内容进行了取舍。书中穿插了线性结构、树结构、图结构及排序等开发案例,有助于读者掌握数据结构知识并身临其境地体验实际的项目案例开发过程,从而提高读者的实际项目经验。
  全书由7章构成,各章内容如下:
  第1章认识Visual C++,主要介绍Visual C++简介及发展历程、代码编辑器使用技巧、Visual C++调试技术及高级调试技术。
  第2章MFC编程基础,主要介绍MFC简介、MFC的常用类、设备环境、基本绘图工具、文本字体及多线程等内容。
  第3章框架与窗口,围绕可视化数据结构分割窗口实例,主要介绍MFC框架结构、窗口分割、MFC控件等内容。基于MFC的可视化数据结构目录
  第4章可视化线性结构,介绍线性表的定义、线性表的两种主要的存储结构、栈的定义、栈的存储结构、队列的定义及队列的存储结构。重点阐述可视化单链表、可视化循环队列和可视化双端队列的实现方法。
  第5章可视化树结构,介绍树的定义、树的逻辑表示方法、树的性质、树的遍历和树的存储结构二叉树、二叉树的定义、二叉树的性质、树/森林和二叉树的转换与还原、二叉树存储结构、二叉树基本运算算法设计、二叉树的递归和非递归遍历算法、二叉树的构造、线索二叉树和哈夫曼树、二叉排序树、平衡的二叉排序树、B树和B+树、哈夫曼树及堆排序。重点阐述了可视化二叉排序树、可视化平衡二叉树和可视化B树的实现方法。
  第6章可视化图结构,介绍图的定义、图的存储结构、图的基本运算算法设计、图的两种遍历算法以及图的应用(包括图的最小生成树、最短路径、拓扑排序和关键路径等)。重点阐述了无向图深度优先遍历和有向图Dijkstra可视化实现方法。
  第7章可视化排序,介绍排序的定义、插入排序方法、交换排序方法、选择排序方法、归并排序方法和基数排序方法。重点阐述了简单插入排序、冒泡排序和选择排序的可视化实现方法。
  本书兼顾读者对数据结构知识点的学习和MFC编程能力的提高,在讲述可视化数据结构程序设计方法的同时,力求将繁多的数据结构知识点与MFC实际开发技术进行关联。对数据结构的知识点、概念、难点,都力求以较精练的语言讲解,并对关键的知识点配以必要的实例,实例中配以较为详细的步骤说明、代码说明,力求让读者较好地掌握可视化数据结构程序设计的思路、开发技巧与体系。
  本书可作为计算机专业本科学生“数据结构”课程的教材,也可以作为“数据结构课程设计”的教学用书,还可以作为从事计算机应用等工作的信息技术人员的参考用书。
  基于Visual C++的程序设计涉及的技术内容复杂。在本书编写过程中,作者参考了国内外的相关出版物及互联网上的电子资料,在此向各文献的作者表示衷心的感谢。书中不当之处在所难免,敬请广大读者批评指正。

  编著者
  2014年7月
目录
第1章认识Visual C++/1
1.1Visual C++概述1
1.1.1Visual C++简介及发展历程1
1.1.2Visual C++优势1
1.2代码编辑器使用技巧2
1.2.1检测代码中的括号是否匹配2
1.2.2代码对齐2
1.2.3显示函数参数2
1.2.4完全取词功能不可用2
1.2.5快速删除项目下Debug文件夹中的临时文件2
1.2.6如何彻底地从工程中删除一个类3
1.2.7从其他文件中抓取资源3
1.2.8Visual C++中命名规则3
1.2.9Workspace和Project之间的关系3
1.2.10在编辑状态下发现成员变量或函数不能显示提示
时如何打开显示功能3
1.2.11如何清楚所有的断点4
1.2.12如何添加Lib文件到当前工程4
1.3Visual C++调试技术4
1.3.1调试环境的建立5
1.3.2调试的一般过程6
1.3.3如何设置断点7
1.3.4控制程序运行11
1.3.5查看工具的使用12
1.4高级调试技术15
1.4.1TRACE宏15
1.4.2ASSERT宏16
1.4.3ASSERT_VALID宏16
1.4.4VERIFY宏16
1.4.5对象的Dump函数的利用17[1]基于MFC的可视化数据结构目录[3][3]1.4.6检查内存泄露问题17
1.4.7MFC跟踪19
第2章MFC编程基础/21
2.1MFC简介21
2.2MFC的常用类21
2.2.1字符串类21
2.2.2MFC的集合类27
2.2.3系统日期、时间类34
2.2.4定时器38
2.3设备环境41
2.3.1设备环境概念41
2.3.2设备环境类42
2.3.3图形设备模式43
2.4基本绘图工具43
2.4.1画笔44
2.4.2CPen类44
2.4.3画刷45
2.4.4CBrush类45
2.4.5图形绘制45
2.5文本字体50
2.5.1文本输出50
2.5.2字体52
2.5.3字体对话框54
2.6多线程55
2.6.1多线程概述55
2.6.2Win32多线程编程55
2.6.3MFC对多线程编程的支持58
2.6.4线程间通信59
2.6.5临界区61
2.6.6互斥量61
2.6.7信号量63
第3章框架与窗口/65
3.1MFC框架结构65
3.2窗口分割67
3.2.1静态分割和动态分割67
3.2.2CSplitterWnd类68
3.2.3分割窗口中的通信机制71
3.3MFC控件73
3.3.1静态文本控件73
3.3.2编辑框控件74
3.3.3按钮控件75
3.3.4列表框控件76
3.3.5组合框控件77
3.3.6列表视图控件78
3.3.7树视图控件81
3.4可视化数据结构分割窗口实例87
3.4.1基本分割视图实现87
3.4.2树视图控件的位置和大小控制105
3.4.3树视图控件添加结点109
3.4.4树视图控件添加消息112
第4章可视化线性结构/116
4.1线性表定义及特点116
4.1.1线性表的定义116
4.1.2线性表的特点116
4.2线性表的抽象数据类型117
4.3线性表顺序存储结构118
4.3.1顺序表的定义118
4.3.2顺序表的特点 118
4.4线性表链式存储结构119
4.4.1单链表的类定义119
4.4.2单链表基本操作实现120
4.5双向链表124
4.6栈125
4.6.1栈的定义及基本操作125
4.6.2顺序栈126
4.6.3链式栈129
4.7队列131
4.7.1队列的定义及基本操作131
4.7.2顺序队列132
4.7.3循环队列134
4.7.4链式队列137
4.7.5双端队列139
4.8单链表的可视化实现142
4.8.1单链表类的创建142
4.8.2可视化链表基础功能146
4.8.3链表添加结点功能157
4.8.4链表插入结点功能158
4.8.5链表删除结点功能160
4.8.6链表结点查找功能162
4.9循环队列的可视化实现164
4.9.1循环队列类的创建164
4.9.2可视化循环队列基础功能169
4.9.3循环队列入队功能176
4.9.4循环队列出队功能178
4.10双端队列的可视化实现178
4.10.1双端队列类的创建178
4.10.2可视化双端队列基础功能180
4.10.3双端队列前端入队功能188
4.10.4双端队列前端出队功能189
4.10.5双端队列尾端入队功能189
4.10.6双端队列尾端出队功能190
第5章可视化树结构/191
5.1树的基本概念和术语191
5.1.1树的基本概念191
5.1.2树的基本术语192
5.2树的抽象数据类型192
5.3树的存储结构193
5.3.1双亲表示法194
5.3.2孩子表示法194
5.3.3孩子兄弟表示法195
5.4二叉树196
5.4.1定义及主要特性196
5.4.2二叉树的存储结构198
5.5二叉树的遍历202
5.5.1二叉树遍历的递归算法202
5.5.2二叉树遍历的非递归算法204
5.6线索二叉树208
5.6.1中序线索二叉树的建立和遍历211
5.6.2先序与后序线索二叉树211
5.6.3由遍历序列恢复二叉树212
5.7二叉排序树213
5.7.1二叉排序的插入操作213
5.7.2二叉排序的删除操作215
5.8平衡二叉树215
5.8.1平衡二叉树插入操作216
5.8.2平衡二叉树的删除操作222
5.9哈夫曼树226
5.9.1基本概念226
5.9.2哈夫曼算法227
5.9.3哈夫曼编码227
5.10堆230
5.11B树的概念233
5.11.1B树上的查找234
5.11.2B树上的插入236
5.11.3B树上的删除236
5.12B+树的概念 240
5.12.1B+树的定义240
5.12.2B+树上的查找240
5.12.3B+树上的插入241
5.12.4B+树上的删除241
5.13二叉排序树的可视化实现241
5.13.1二叉排序树类的创建241
5.13.2可视化二叉排序树基础功能250
5.13.3二叉排序树添加结点功能257
5.13.4二叉排序树删除结点功能258
5.13.5二叉排序树查找结点功能259
5.13.6二叉排序树可视化实现结果260
5.14平衡二叉树的可视化实现261
5.14.1平衡二叉树类的创建261
5.14.2可视化平衡二叉树基础功能274
5.14.3平衡二叉树添加结点功能280
5.14.4平衡二叉树删除结点功能281
5.14.5平衡二叉树查找结点功能282
5.14.6平衡二叉树可视化实现结果283
5.15B树的可视化实现284
5.15.1B树类的创建284
5.15.2可视化B树基础功能302
5.15.3B树设置阶数功能309
5.15.4B树添加结点功能310
5.15.5B树删除结点功能311
5.15.6B树查找结点功能312
5.15.7B树清空结点功能313
5.15.8B树可视化实现结果313
第6章可视化图结构/315
6.1图的基本概念和术语315
6.2图的抽象数据类型317
6.3图的存储结构318
6.3.1邻接矩阵 318
6.3.2邻接表 319
6.3.3有向图十字链表表示320
6.3.4无向图邻接多重表表示321
6.4图的遍历323
6.4.1深度优先遍历323
6.4.2广度优先遍历324
6.5最小生成树325
6.5.1Prim算法326
6.5.2Kruskal算法326
6.6拓扑排序329
6.7关键路径331
6.8最短路径333
6.8.1Dijkstra算法333
6.8.2Floyd算法335
6.9可视化图基础功能335
6.9.1可视化图工具栏335
6.9.2打开图功能342
6.9.3保存图功能342
6.9.4清空图功能342
6.9.5新增顶点功能343
6.9.6删除顶点功能343
6.9.7顶点信息功能344
6.9.8新增边功能345
6.9.9删除边功能345
6.9.10设置权值功能346
6.10无向图深度优先遍历可视化实现349
6.10.1可视化无向图类349
6.10.2可视化无向图深度优先遍历基础功能362
6.10.3无向图深度优先遍历执行功能382
6.10.4无向图深度优先遍历下个结点功能383
6.10.5无向图深度优先遍历可视化实现结果383
6.11有向图Dijkstra算法可视化实现384
6.11.1可视化有向图类384
6.11.2可视化有向图单源最短路径Dijkstra算法基础功能400
6.11.3有向图Dijkstra算法执行功能418
6.11.4有向图Dijkstra可视化实现结果419
第7章可视化排序/420
7.1排序的基本概念和术语420
7.2插入排序421
7.2.1直接插入排序421
7.2.2希尔排序422
7.3交换排序423
7.3.1冒泡排序 423
7.3.2快速排序424
7.4选择排序426
7.5归并排序427
7.6排序可视化实现428
7.6.1可视化排序类428
7.6.2可视化排序基础功能439
7.6.3手动输入数据功能449
7.6.4随机输入数据功能450
7.6.5清空数据功能450
7.6.6开始排序功能451
7.6.7暂停排序功能451
7.6.8结束排序功能452
7.6.9排序可视化实现结果452
第1章概述/1
§1.1C++语言的发展简况及其特点1
1.1.1C++语言的发展简况1
1.1.2C++语言的特点2
§1.2C++语言程序组成及其结构3
§1.3关键字和标识符5
1.3.1关键字6
1.3.2标识符6
§1.4几个特殊的C++语句6
1.4.1空语句6
1.4.2复合语句7
1.4.3注释语句7
§1.5简单的输入输出8
1.5.1格式化输入输出函数8
1.5.2I/O流13
§1.6数制与编码15
1.6.1二进制、八进制和十六进制16
1.6.2二进制、八进制、十六进制和十进制之间的转换16
1.6.3原码、反码和补码20
1.6.4编码21
思考与练习题22
第2章数据与运算/25
§2.1基本数据类型25
2.1.1类型bool25
2.1.2类型char26
2.1.3类型short26
2.1.4类型int27
2.1.5类型long27
2.1.6浮点类型27〖1〗C++程序设计基础目录[3]〖3〗§2.2常量28
2.2.1整型常量28
2.2.2浮点常量28
2.2.3字符常量30
2.2.4字符串常量30
2.2.5标识常量32
2.2.6换码序列32
§2.3变量34
2.3.1变量和变量的地址34
2.3.2C++存储类型35
2.3.3变量使用范围37
2.3.4变量的初始化和赋值38
2.3.5强制数据类型的转换38
2.3.6常量化的变量40
§2.4数组41
2.4.1一维数据41
2.4.2字符数组44
2.4.3多维数组46
§2.5运算符及其运算48
2.5.1算术运算符48
2.5.2关系运算符和逻辑运算符50
2.5.3位运算符52
2.5.4赋值运算符与赋值复合运算符58
2.5.5C++语言的特殊运算符59
2.5.6C++运算符的优先级61
思考与练习题62
第3章控制语句/64
§3.1程序设计方法与程序结构64
3.1.1结构化程序设计65
3.1.2面向对象的程序设计67
§3.2分支语句67
3.2.1单分支语句——if语句68
3.2.2双分支语句——if~else语句69
3.2.3多分支语句——else if语句70
3.2.4嵌套结构及其分析73
3.2.5switch语句76
§3.3循环语句79
3.3.1for循环语句79
3.3.2while循环语句82
3.3.3do~while循环语句84
3.3.4循环语句使用的注意事项86
3.3.5循环语句的嵌套87
§3.4辅助控制语句88
3.4.1break语句——中途退出语句88
3.4.2continue语句——截流语句92
3.4.3return语句93
3.4.4goto语句95
思考与练习题96
第4章指针/101
§4.1指针变量101
§4.2指针变量的声明与初始化104
4.2.1指针变量的声明104
4.2.2指针的初始化105
§4.3指针运算107
4.3.1指针的算术运算107
4.3.2指针的关系运算111
4.3.3指针的赋值运算112
§4.4指针与数组113
§4.5字符指针与字符串115
§4.6指针数组117
§4.7多级指针119
§4.8new和delete运算符121
4.8.1new运算符121
4.8.2delete运算符123
§4.9引用124
4.9.1普通变量的引用124
4.9.2数组的引用124
§4.10const型指针和void型指针125
4.10.1常量化的指针变量126
4.10.2void型指针变量128
思考与练习题128
第5章函数与宏/130
§5.1自定义函数的定义、声明和使用130
5.1.1函数的定义130
5.1.2函数的声明132
5.1.3函数的使用133
§5.2函数之间的参数传递135
5.2.1复制传递方式135
5.2.2地址传递方式136
5.2.3引用方式137
5.2.4全局变量138
5.2.5默认参数值的函数139
§5.3函数与数组140
5.3.1复制传递方式140
5.3.2地址传递方式141
5.3.3引用方式142
5.3.4多维数组与函数143
§5.4指针函数146
§5.5函数指针与函数指针数组147
5.5.1函数指针147
5.5.2函数指针数组149
§5.6函数重载150
§5.7内联函数152
§5.8递归函数152
§5.9标准函数153
§5.10宏和其他预编译语句156
5.10.1宏定义语句#define156
5.10.2包括语句158
5.10.3条件编译158
思考与练习题159
第6章自定义数据类型/167
§6.1结构体的定义及其声明167
6.1.1结构体的定义167
6.1.2结构体的声明168
6.1.3结构体的使用169
6.1.4结构体的初始化170
6.1.5匿名结构体171
§6.2结构体数组与结构体指针171
6.2.1结构体数组171
6.2.2结构体指针172
§6.3结构体与函数174
6.3.1结构体在函数体间的传递174
6.3.2结构体函数177
6.3.3结构体指针函数179
§6.4结构体嵌套180
§6.5位字段结构体简介182
§6.6联合体184
§6.7枚举类型188
6.7.1枚举类型的定义188
6.7.2枚举变量的声明与使用188
§6.8typedef语句190
思考与练习题192
第7章类与对象/195
§7.1面向对象技术与C++类类型195
7.1.1传统开发方法存在的问题195
7.1.2面向对象技术196
7.1.3C++语言的三种类类型197
7.1.4class类类型198
§7.2类的定义199
§7.3对象的声明和使用202
§7.4对象数组和对象指针204
7.4.1对象数组204
7.4.2对象指针205
§7.5构造函数和析构函数207
7.5.1构造函数207
7.5.2析构函数208
7.5.3默认构造函数和默认析构函数209
7.5.4复制构造函数209
7.5.5浅复制和深复制211
§7.6对象在函数间的传递214
7.6.1对象的复制传递方式214
7.6.2对象的地址传递方式215
7.6.3对象的引用方式217
§7.7this指针217
§7.8常对象与常成员函数218
7.8.1常对象218
7.8.2常成员函数219
思考与练习题220
第8章派生与继承/222
§8.1类的程序结构222
§8.2基类与派生类223
8.2.1派生类的定义223
8.2.2派生类的继承方式226
8.2.3基类与派生类之间的关系228
8.2.4基类指针与派生类指针228
§8.3单继承、多继承与继承链228
§8.4派生类与基类之间的内在关系233
8.4.1派生类的构造函数和析构函数234
8.4.2构造函数和析构函数的执行顺序235
8.4.3子类型238
8.4.4类型适应239
8.4.5对象的内存占用情况239
§8.5二义性与虚基类241
8.5.1二义性问题241
8.5.2虚基类244
8.5.3虚基类的构造函数246
§8.6类层次中的访问规则246
思考与练习题247
第9章友元与静态成员/249
§9.1友元249
9.1.1友元函数249
9.1.2友元类251
§9.2静态成员252
9.2.1静态数据成员252
9.2.2静态成员函数255
思考与练习题257
第10章虚拟函数与多态性/259
§10.1静态绑定和动态绑定259
10.1.1静态绑定259
10.1.2动态绑定261
§10.2虚拟函数261
10.2.1虚拟函数的技术内幕264
10.2.3虚拟函数的应用举例265
10.2.3虚析构函数269
§10.3纯虚拟函数与抽象类270
10.3.1纯虚拟函数270
10.3.2抽象类271
思考与练习题276
第11章重载与模板/279
§11.1重载279
11.1.1运算符重载279
11.1.2类型转换284
11.1.3特殊运算符的重载285
§11.2模板290
11.2.1函数模板291
11.2.2类模板293
11.2.3模板与友元298
11.2.4模板与static成员300
11.2.5类模板的派生与继承300
思考与练习题300
第12章异常处理/303
§12.1异常的概念303
12.1.1异常的定义303
12.1.2异常处理的基本思想303
§12.2异常处理的编程方法304
12.2.1异常处理的三个语句304
12.2.2异常处理的执行过程305
12.2.3异常处理的基本步骤305
12.2.4多类型的异常处理306
12.2.5再抛出异常308
12.2.6构造函数、析构函数与异常处理309
§12.3异常处理类309
思考与练习题310
第13章C++输入和输出/312
§13.1流输入输出312
13.1.1提取运算符和插入运算符312
13.1.2标准出错输出(cerr/clog)315
13.1.3输入流类315
13.1.4输出流类316
13.1.5格式化输入输出317
§13.2磁盘文件的输入输出324
13.2.1文本文件的输入输出324
13.2.2二进制数据文件328
13.2.3随机数据文件329
思考与练习题331
参考文献/332
Copyright(C)清华大学出版社有限公司,All Rights Reserved 京ICP备10035462号 联系我们