中图网文创礼盒,买2个减5元
欢迎光临中图网 请 | 注册

算法与数据结构

出版社:清华大学出版社出版时间:2020-01-01
开本: 26cm 页数: 10,315页
本类榜单:教材销量榜
中 图 价:¥41.3(7.0折) 定价  ¥59.0 登录后可看到会员价
加入购物车 收藏
运费6元,满69元免运费
?快递不能达地区使用邮政小包,运费14元起
云南、广西、海南、新疆、青海、西藏六省,部分地区快递不可达
本类五星书更多>

算法与数据结构 版权信息

算法与数据结构 本书特色

全书系统介绍了算法与数据结构方面的基本知识,重点阐述了基本数据结构及算法在程序开发中的应用方法。通过深入地学习和分析,能够帮助读者极大地提高软件开发和设计能力。

算法与数据结构 内容简介

本书主要内容有: 数据结构和算法的基本概念和术语; 线性表、树和图的逻辑结构、存储结构及应用实例, 包括与队列数组与字符串等特殊线性表:查找与排序操作的常用算法; 蛮力算法、分治算法、动态规划算法、贪心算法、回溯算法及分枝限界算法等常用算法设计技术。

算法与数据结构 目录

第1章 绪论
1.1 数据结构的基本概念与学习方法
1.1.1 数据结构的研究对象
1.1.2 数据结构的基本概念和基本术语
1.2 算法与数据结构
1.2.1 算法的概念
1.2.2 描述算法的方法
1.2.3 算法分析
1.3 学习算法与数据结构的意义和方法
1.4 C语言的数据类型及其算法描述
1.4.1 C语言的基本数据类型概述
1.4.2 C语言的数组和结构体数据类型
1.4.3 C语言的指针类型概述
1.4.4 C语言的函数
1.4.5 用C语言验证算法的方法
1.5 从C语言到C++语言
1.5.1 C++语言的类和抽象数据类型
1.5.2 C++语言验证算法的方法
1.5.3 C++语言与C语言程序的区别
1.5.4 C++语言的重要特性
习题1
上机练习1

第2章 线性表
2.1 线性表的逻辑结构
2.1.1 线性表的定义
2.1.2 线性表的运算
2.2 线性表的顺序存储结构——顺序表
2.2.1 顺序表
2.2.2 顺序存储结构的优缺点
2.2.3 顺序表上的基本运算
2.3 线性表的链式存储结构——链表
2.3.1 单链表
2.3.2 循环链表和双向链表
2.4 线性表的应用示例
2.5 C++中的线性表
2.5.1 C++中线性表抽象数据类型
2.5.2 C++中线性表的顺序存储
2.5.3 C++中线性表的链式存储
习题2
上机练习2

第3章 栈和队列
3.1 栈
3.1.1 栈的基本概念
3.1.2 栈的顺序存储结构
3.1.3 栈的链式存储结构
3.2 栈的应用实例
3.2.1 表达式求值
3.2.2 栈与函数调用
3.2.3 栈在回溯法中的应用
3.3 队列
3.3.1 队列的基本概念
3.3.2 队列的顺序存储结构
3.3.3 队列的链式存储结构
3.4 队列的应用实例
3.4.1 舞伴问题
3.4.2 打印队列的模拟管理
3.5 递归
3.5.1 递归的定义及递归模型
3.5.2 递归的实现
3.5.3 递归设计
3.5.4 递归到非递归的转换
3.6 C++中的栈和队列
3.6.1 C++中的栈
3.6.2 C++中的队列
习题3
上机练习3

第4章 数组和字符串
4.1 数组
4.1.1 数组的定义与操作
4.1.2 数组的顺序存储结构
4.1.3 矩阵的压缩存储方法
4.2 字符串
4.2.1 字符串的定义与操作
4.2.2 字符串的存储结构
4.2.3 字符串基本操作的实现
4.2.4 字符串的应用举例
4.3 C++中的数组和字符串
4.3.1 C++中的数组
4.3.2 C++中的字符串
习题4
上机练习4

第5章 树
5.1 树的概念与操作
5.1.1 树的概念
5.1.2 树的基本操作
5.2 二叉树
5.2.1 二叉树的概念
5.2.2 二叉树的性质
5.2.3 二叉树的存储结构及其实现
5.3 二叉树的遍历
5.3.1 递归的遍历算法
5.3.2 二叉树遍历操作应用举例
5.4 线索二叉树
5.4.1 线索二叉树的定义
5.4.2 线索二叉树的常用运算
5.5 一般树的表示和遍历
5.5.1 一般树的表示
5.5.2 二叉树与树、森林之间的转换
5.5.3 一般树的遍历
5.6 哈夫曼树及其应用
5.6.1 哈夫曼树
5.6.2 哈夫曼树的应用
5.7 C++中的树
5.7.1 C++中的二叉树结点类
5.7.2 C++中的二叉树类
5.7.3 C++中二叉树的非递归遍历
习题5
上机练习5

第6章 图
6.1 图的概念与操作
6.1.1 图的定义
6.1.2 图的基本术语
6.2 图的存储结构
6.2.1 邻接矩阵
6.2.2 邻接表
6.2.3 十字链表
6.2.4 边集数组
6.3 图的遍历
6.3.1 深度优先搜索
6.3.2 广度优先搜索
6.4 图的连通性
6.4.1 无向图的连通分量
6.4.2 生成树和*小代价生成树
6.5 有向无环图及应用
6.5.1 拓扑排序
6.5.2 关键路径
6.6 *短路径及应用
6.6.1 单源*短路径
6.6.2 每对顶点之间的*短路径
6.7 C++中的图
6.7.1 C++中的图类
6.7.2 图的邻接表的C++程序
6.7.3 图的遍历的C++程序
6.7.4 图的*小生成树的C++程序
习题6
上机练习6

第7章 查找
7.1 基本概念与术语
7.2 静态查找表
7.2.1 静态查找表结构
7.2.2 顺序查找
7.2.3 有序表的折半查找
7.2.4 有序表的插值查找和斐波那契查找
7.2.5 分块查找
7.3 动态查找表
7.3.1 二叉排序树
7.3.2 平衡二叉树
7.3.3 B树和B+树
7.4 哈希表查找
7.4.1 哈希表与哈希方法
7.4.2 常用的哈希方法
7.4.3 处理冲突的方法
7.4.4 哈希表的查找分析
7.5 C++中的查找
7.5.1 静态查找的C++程序
7.5.2 动态查找的C++程序
习题7
上机练习7

第8章 排序
8.1 基本概念
8.2 插入排序
8.2.1 直接插入排序
8.2.2 希尔排序
8.3 交换排序
8.3.1 冒泡排序
8.3.2 快速排序
8.4 选择排序
8.4.1 简单选择排序
8.4.2 堆排序
8.5 归并排序
*8.6 基数排序
*8.7 外部排序简介
8.7.1 外存信息的存取
8.7.2 外部排序的基本方法
8.8 C++中的排序
习题8
上机练习8

第9章 常用算法设计技术
9.1 蛮力算法
9.1.1 蛮力算法思想
9.1.2 蛮力算法应用实例——*近对问题
9.2 分治算法
9.2.1 分治算法思想
9.2.2 分治算法设计
9.2.3 分治算法设计应用实例——棋盘覆盖问题
9.3 动态规划算法
9.3.1 动态规划算法思想及设计
9.3.2 动态规划算法应用实例——0/1背包问题
9.4 贪心算法
9.4.1 贪心算法技术思想
9.4.2 贪心算法设计
9.4.3 贪心算法应用实例——背包问题
9.5 回溯算法
9.5.1 回溯算法有关概念
9.5.2 回溯算法思想
9.5.3 回溯算法设计
9.5.4 回溯算法应用实例——装载问题
9.6 分支限界算法
9.6.1 分支限界算法思想
9.6.2 分支限界算法设计
9.6.3 分支限界算法应用实例——任务分配问题
习题9
上机练习9

第10章 标准模板库
10.1 STL简介
10.1.1 容器
10.1.2 迭代器
10.1.3 算法
10.2 STL应用实例
10.2.1 双向链表操作的STL实现
10.2.2 STL测试程序
习题10
上机练习10
参考文献

展开全部

算法与数据结构 节选

第3章栈和队列 本章学习要点 (1) 掌握栈和队列这两种数据结构的特点,了解在什么问题中应该使用哪种结构。 (2) 熟悉栈(队列)和线性表的关系、顺序栈(顺序队列)和顺序表的关系、链栈(链队列)和链表的关系。 (3) 重点掌握在顺序栈和链栈上实现的栈的7种基本运算,特别注意栈满和栈空的条件及它们的描述。 (4) 重点掌握在循环队列和链队列上实现的7种基本运算,应特别注意队满和队空的描述方法。 (5) 熟悉栈和队列的下溢和上溢的概念; 顺序队列中产生假上溢的原因; 循环队列消除假上溢的方法。 (6) 了解递归算法执行过程中工作记录的变化情况。 栈和队列与线性表有着密切的联系,一方面,栈和队列的逻辑结构也是线性结构; 另一方面,栈和队列的基本操作是线性表操作的子集,因此,可将栈和队列看成两种特殊的线性表。 3.1栈 3.1.1栈的基本概念 日常生活中有不少类似于栈(如图3.1(a)所示)的例子。假设有一个很窄的死胡同,其宽度只能容纳一辆车,现有5辆车,分别编号为①~⑤,按编号顺序依次进入此胡同,若要退出④,必须先退出⑤; 若要退出①必须将⑤、④、③、②依次都退出才行。这个死胡同就是一个栈,如图3.1(b)所示。 图3.1栈及其示例 栈(stack)是允许仅在表的一端进行插入和删除操作的线性表。允许进行插入和删除的一端称为栈顶(top),不允许插入和删除的一端称为栈底(bottom)。不含元素的空表称为空栈。 假设栈S=(a1,a2,…,an),如图3.1(a)所示,a1为栈底元素,an为栈顶元素。栈中元素按a1,a2,…,an的次序进栈,退栈的**个元素应为栈顶元素。也就是说,栈的特点是后进先出(last in first out,LIFO),因此,栈又称为后进先出的线性表,简称LIFO线性表。 在已知栈的逻辑结构和确定常用运算后,就可以定义栈的抽象数据类型。 ADT3.1是栈的抽象数据类型描述,其中包含*常见的栈运算。 ADT3.1栈ADT ADT stack{ 数据对象: D={ai|ai∈元素集合,i=1,2,…,n,n≥0} 数据关系: R1={〈ai-1,ai〉|ai-1,ai∈D,i=2,…,n},约定an端为栈顶,a1为栈底。 基本操作: InitStack(): 创建一个空栈。 Destroy(): 撤销一个栈。 StackEmpty(): 若栈空,则返回1,否则返回0。 StackFull(): 若栈满,则返回1,否则返回0。 Top(x): 在x中返回栈顶元素。若操作成功,则返回1,否则返回0。 Push(): 在栈顶插入元素x(入栈)。若操作成功,则返回1,否则返回0。 Pop(): 从栈中删除栈顶元素(出栈)。若操作成功,则返回1,否则返回0。 Clear(): 清除栈中全部元素。 }ADT stack 图3.2十进制数35转换成 二进制数的过程 栈的应用非常广泛,例如进位记数制之间的转换问题。在将十进制数转换成二进制数时,常采用除法。用初始十进制数除以2,把余数记录下来,若商不为0,则再用商去除以2,直到商为0,这时把所有的余数按出现的逆序排列起来(先出现的余数排在后面,后出现的余数排在前面)就得到了相应的二进制数。例如把十进制数35转换成二进制数的过程如图3.2所示。 根据上述操作的描述,可以采用一个栈来保存所有的余数,当商为0时让栈中的所有余数出栈,这样就得到了正确的二进制数。 算法3.1十进制数转换成二进制数算法。 void conversion() { Stack S; int n; InitStack(&S); printf("Input a number to convert:\n"); scanf("%d",&n); if(n<0) { printf("\nThe number must be over 0."); return 0; } if(n==0) Push(&S,0); while(n!=0) { Push(&S,n%2); n=n/2; } printf("the result is: "); while(!StackEmpty(&S)) { printf("%d", Pop(&S)); } }

算法与数据结构 作者简介

主编先后主讲数据结构、算法设计与分析、程序设计基础、计算机组成原理等课程,同时悉心指导课程设计和毕业设计,积极指导学生课外科技活动。在教学中形成了独特的教学风格,教学经验丰富,受到师生好评,在教学质量排名中一直位居前20%;作为重庆理工大学精品课程《数据结构》负责人,对课程建设作了大量工作。 主编始终站在教学、科研一线,积极参加教育教学改革和科学研究,主编出版《算法与数据结构》等教材4部,参编4部;在国内外学术期刊和国际会议上公开发表论文40余篇,其中被EI、ISTP检索7篇;主持并完成“光通讯网络互连技术研究”等省部级科研项目4项,参与20余项;主持并完成“地方高校程序设计系列课程改革研究与实践”、“地方高校专业学位研究生算法设计案例库的建设研究”等教研项目4项;获重庆市自然科学三等奖1项、重庆市教学成果三等奖1项、校优秀教学成果2项;多次获得校“教学工作优秀教师”等奖项。

商品评论(0条)
暂无评论……
书友推荐
本类畅销
编辑推荐
返回顶部
中图网
在线客服