《数据结构案例教程(C/C++版)》共9章,围绕线性表、栈、队列、串、矩阵、广义表、树、二叉树、图等常用的数据结构,介绍了基本概念、逻辑结构、存储结构、操作运算以及实现算法、案例应用;还介绍了多种常用的查找算法和排序算法,并对各种算法的性能进行分析。书中使用C语言定义各种数据结构,利用C/C++代码描述算法。
《数据结构案例教程(C/C++版)》的每一章以若干典型的导学问题为主线贯穿组织,由“知识学习”“知识应用”和“知识拓展”等部分组成。围绕导学问题,引导学习者思考问题、对实际问题进行抽象建模、实现模型和应用模型。每章均附有本章小结、思考与练习和应用实战,附录给出了课程考试样卷和课程设计题。
《数据结构案例教程(C/C++版)》可作为计算机科学与技术专业、软件工程专业及其他相关专业“数据结构”课程的教材以及研究生入学考试辅导书,也可供计算机软件开发人员或编程爱好者参考和使用。
“数据结构”是计算机科学与技术专业、软件工程及相关专业的核心课程之一,是计算机科学与技术、软件工程等专业研究生考试必考科目之一,也是IT公司面试或笔试考核的主要内容。数据结构主要分析计算机中数据组织的方式和相关操作算法,涉及数据结构和算法的基本概念与技术,线性表、栈、队列、串、数组与广义表、树、二叉树、图等常用数据结构及相关算法,以及排序、查找等重要技术。本课程既是对前导的程序设计类课程、离散数学等课程的深入和拓展,也为继续深入学习数据库、操作系统、编译原理、计算机网络等后续专业课程打下了重要基础。
“数据结构”是一门直接面向实际应用、解决实际问题的课程,它的教学目标是,让学习者学会从问题人手,分析研究计算机加工的数据结构的特性,以便为应用所涉及的数据选择适当的逻辑结构、存储结构及其相应的操作算法,并初步掌握时间和空间分析技术。
笔者从事“数据结构”课程的教学已有二十多年,深切了解学习者对于学习“数据结构”课程的普遍体会是,概念难理解、算法难设计、编程难实现、知识难应用。如何帮助学习者实现两个跨越:从实际应用问题到数据结构抽象的跨越和从数据结构概念到程序实现的跨越,是我们一直努力的目标。近年来,我们以“问题导学”模式进行了该课程教学的探索和实践,本书是这些工作的成果。
“问题导学”模式是以问题解决为主线,以学生学习为主体,使学生在解决问题的过程中掌握知识,形成自主学习能力的一种教学模式。该模式的具体过程是:引导学生分析问题中的已知信息,提炼数据及数据之间的关系(数据的逻辑结构),选择合适的存储方式(数据的存储结构)将待处理的数据保存到计算机中,然后在存储结构之上按照自顶向下逐步细化的方法设计算法,给出程序实现,并进行测试和调试分析。
本书的每一章以若干典型的导学问题为主线贯穿组织,由“知识学习”“知识应用”和“知识拓展”等部分组成。围绕导学问题,引导学习者思考问题、对实际问题进行抽象建模、实现模型和应用模型。与高级程序设计语言课相比,数据结构在培养学生的数据抽象能力方面有着更高的要求,通过本书不同层次的导学问题示例培养学生逐步掌握数据抽象的能力,学会数据结构和数据类型的使用方法,为今后的学习和提高编程水平打下扎实的基础。
本书以学生学习为主体,在内容的组织和选材上指导学生通过思考、比较、建构,逐步形成学生自己的知识框架,并发展相应的能力。为此,本书在每一章开头设置了学习导图.指导学生体验思考问题、初步解决问题、进一步解决复杂问题这一学习过程。每章学习过程中设置了一些书写填空题,让学生不仅耳动起来、嘴动起来,还要手动起来,真正成为课堂的主人,积极主动地进行学习和思考。每章课后安排的思考与练习、应用实战让学生能够进行达标检测、巩固知识、查漏补缺。
本书以学生学习为主体,还体现在重视对学生进行复杂程序设计的训练,指导学生书写符合软件工程规范的文件,编写结构清晰、正确易读的程序,上机调试并排除错误代码等。全书采用C语言作为数据结构和算法的基本描述工具,同时采用了C++对C的非面向对象的增强功能。例如,输入/输出采用了cin、cout运算符,函数参数传递采用了引用、动态分配和释放,存储结构采用了new和delete运算符等。这些措施使得数据类型的定义和数据结构相关操作算法的描述更加简明清晰,可读性好,易于学习掌握。学习者也可把类型定义和操作算法稍加处理,这样就很容易将其封装成类,并进一步转化成面向对象的程序。全书算法和导学问题的源程序使用VisualC++6.O集成环境完成并提供下载。
本书在内容组织和设计上进行了创新,一方面可以帮助学习者把学习的新知识形成网、织成块、用起来;另一方面,也对教师有效地组织课堂教学提供了便利。教师可以根据教材资源,对学习者进行问题引导、疑难精讲、质疑点拨、检测评估。
前言
第1章绪论
导学问题1:问题中的数据在计算机中如何组织?
导学问题2:程序的效率如何改进?
1.1知识学习
1.1.1数据结构课程的研究内容
1.1.2数据的结构
1.1.3算法与算法分析
1.2知识应用
1.2.1导学问题1-4、1-5和1-6的数据结构
1.2.2导学问题2的时间复杂度
1.3知识拓展
1.3.1算法时间复杂度分析
1.3.2算法执行时间测试
本章小结
思考与练习
应用实战
第2章线性表
导学问题1:实现一个简易的学生信息管理系统
导学问题2:实现一个简易的商品信息管理系统
2.1知识学习
2.1.1线性表的概念
2.1.2线性表的顺序存储及基本操作
2.1.3线性表的链式存储及基本操作
2.2知识应用
2.2.1导学问题1的顺序表实现
2.2.2导学问题1的单链表实现
2.3知识拓展
2.3.1顺序表的其他操作
2.3.2单链表的其他操作
2.3.3顺序表和链表的综合比较
本章小结
思考与练习
应用实战
第3章操作受限的线性表:栈和队列
导学问题1:数制转换问题
导学问题2:银行排队问题
3.1栈
3.1.1知识学习
3.1.2知识应用:导学问题1的实现
3.1.3知识拓展:栈的其他应用
3.2队列
3.2.1知识学习
3.2.2知识应用:导学问题2的实现
3.2.3知识拓展:队列的其他应用
本章小结
思考与练习
应用实战
第4章元素受限的线性表:串
导学问题:微信中的安全提醒
4.1知识学习
4.1.1串的基本概念
4.1.2串的存储结构
4.1.3串的操作算法
4.2知识应用:导学问题的实现
4.3知识拓展:KMP模式匹配算法
本章小结
思考与练习
应用实战
第5章元素扩展的线性表:矩阵和广义表
导学问题1:个性化推荐系统中的用户评分表
导学问题2:本科生创新实践项目中的人员关系
5.1矩阵
5.1.1知识学习
5.1.2知识应用:导学问题1的实现
5.1.3知识拓展:稀疏矩阵的转置操作
5.2广义表
5.2.1知识学习
5.2.2知识应用:导学问题2的实现
5.2.3知识拓展:广义表的其他操作
本章小结
思考与练习
应用实战
第6章树和二叉树
导学问题1:查找U盘中文件的存储路径
导学问题2:表达式树中的算术表达式求值
6.1知识学习
6.1.1树
6.1.2二叉树
6.1.3树、森林与二叉树的转换
6.2知识应用
6.2.1导学问题1的实现
6.2.2导学问题2的实现
6.3知识拓展
6.3.1二叉树的其他操作
6.3.2线索二叉树
6.3.3Huffman树与Huffman编码
本章小结
思考与练习
应用实战
第7章图
导学问题1:构造最小造价通信网
导学问题2:设计一个简单的旅游交通费用查询系统
7.1知识学习
7.1.1图的基本概念
7.1.2图的存储结构
7.1.3图的遍历
7.1.4最小生成树
7.1.5最短路径
7.2知识应用
7.2.1导学问题1的实现
7.2.2导学问题2的实现
7.3知识拓展
7.3.1AOV网与拓扑排序
7.3.2AOE网与关键路径
本章小结
思考与练习
应用实战
第8章查找
导学问题:简单通讯录查询
8.1知识学习
8.1.1查找的基本概念
8.1.2顺序表查找
8.1.3树表查找
8.2知识应用:导学问题的实现
8.3知识拓展
8.3.1大数据的查找算法选择
8.3.2Hash表查找
本章小结
思考与练习
应用实战
第9章排序
导学问题:网络购物中的商品排序
9.1知识学习
9.1.1排序的基本概念
9.1.2交换类排序
9.1.3插入类排序
9.1.4选择类排序
9.1.5归并排序
9.2知识应用:导学问题的实现
9.3知识拓展
9.3.1冒泡排序的改进
9.3.2分配类排序:基数排序
9.3.3排序算法总结
本章小结
思考与练习
应用实战
附录
附录A数据结构试题
数据结构期中试卷
数据结构期终试卷
附录B数据结构课程设计题
附录C实验报告、课程设计报告模板
附录D学习资源
参考文献