购物车中还没有商品,赶紧选购吧!
数据结构实验指导——C语言版 陈越 编著 高等教育出版社
商品价格
定价
手机购买
商品二维码
配送
北京市
数量

推荐商品

  • 商品详情
手机购买
商品二维码
加入购物车
价格:
数量:
库存   个

商品详情

商品名称:数据结构实验指导——C语言版
ISBN:9787040648560
出版社:高等教育出版社
出版年月
作者:陈越 编著
定价:69.00
页码:540
装帧:平装
版次:1
字数:680 千字
开本:16开
套装书:否

“数据结构”是计算机类专业最重要的专业基础课之一,主要教授数据的有效组织方法以及解决实际问题的各种经典算法。而经典算法的威力,往往是在处理大规模数据量时才真正体现。只有让学生动手解决规模较大的问题,才能帮助学生建立感性认识,更好地理解数据结构和算法存在的意义。

本书是计算机“101计划”核心课程“数据结构”的实践教材,与主教材《数据结构》(俞勇等主编,高等教育出版社出版)配套使用。书中给出了主教材中全部198段算法伪代码的C语言实现源代码;此外,围绕主教材中的主要知识点,本着循序渐进、由浅入深的原则,设计了47道基础练习题和71道进阶实验题,并提供详细解答,为不同层次的读者提供帮助。希望有兴趣的读者能在精读基础练习的基础上,自己动手实现一部分进阶实验,达到充分锻炼分析问题、解决问题能力的目的,使数据结构与算法成为用计算机解决实际问题的有效工具。

本书覆盖计算机及相关专业、电类各专业“数据结构”课程的教学大纲要求,可作为该课程的实验教材或参考用书。

前辅文
第1章 绪论
  1.1 算法实现
   算法0-0:求两个正整数的最大公约数GCD(x, y)
   算法1-1:求数组与整数乘积的最大值 MaxProduct1(array, m)
   算法1-2:求数组与整数乘积的最大值 MaxProduct2(array, m)
   算法1-3:将数组中元素反转存放 ReverseArray1(array)
   算法1-4:将数组中元素反转存放 ReverseArray2(array)
   算法1-5:计算1~n2的和加上1~n的和 SumUp(n)
   算法1-6:计算1~n与1~m每一项相互乘积的和SumProducts(n, m)
   算法1-7:连续子序列最大和的O(n3)算法MaxSubsequenceSum1(s)
   算法1-8:连续子序列最大和的O(n2)算法 MaxSubsequenceSum2(s)
   算法1-9:连续子序列最大和的O(n)算法 MaxSubsequenceSum3(s)
   算法1-10:输出1~n的递归算法 RecursivePrint(n)
   算法1-11:输出1~n的循环算法 IterativePrint(n)
  1.2 基础练习
   练习1-1 二分查找
   练习1-2 两枚硬币
  1.3 进阶实验
   实验1-1 有序数组的插入
   实验1-2 爆气球
第2章 线性表
  2.1 算法实现
   算法2-1:在顺序表list中查找元素x Search(list, x)
   算法2-2:在顺序表list的第i个位置上插入元素x Insert(list, i, x)
   算法2-3:从顺序表list中删除第i个元素 Remove(list, i)
   算法2-4:求单链表list中的元素个数,即表长 Length(list)
   算法2-5:返回单链表list中第i个元素的值 Get(list, i)
   算法2-6:在单链表list中查找元素x所在的结点 Search(list, x)
   算法2-7:在单链表list的第i个位置上插入元素x Insert(list, i, x)
   算法2-8:从单链表list中删除第i个元素 Remove(list, i)
   算法2-9:一元多项式加法运算 PolynomialAdd(p1, p2)
   算法2-10:大整数加法运算 BigIntAdd(a, b)
   算法2-11:大整数乘法运算 BigIntMultiply(a, b)
  2.2 基础练习
   练习2-1 带空头结点的单链表操作
   练习2-2 线性表循环右移
   练习2-3 一元多项式求导
   练习2-4 最长连续递增子序列
  2.3 进阶实验
   实验2-1 求链式线性表的倒数第m项
   实验2-2 一元多项式的乘法运算
   实验2-3 线性表元素的区间删除
   实验2-4 单链表分段逆转
   *实验2-5 约瑟夫问题
   *实验2-6 判断两个广义表是否相等
   *实验2-7 稀疏矩阵的链式结构构建
第3章 栈与队列
  3.1 算法实现
   算法3-1:顺序栈的入栈操作 Push(stack, x)
   算法3-2:顺序栈的取顶操作 Top(stack)
   算法3-3:顺序栈的出栈操作 Pop(stack)
   算法3-4:链式栈的入栈操作 Push(stack, x)
   算法3-5:链式栈的取顶操作 Top(stack)
   算法3-6:链式栈的出栈操作 Pop(stack)
   算法3-7:顺序存储的循环队列的入队操作 EnQueue(queue, x)
   算法3-8:顺序存储的循环队列的查看队首操作 GetFront(queue)
   算法3-9:顺序存储的循环队列的出队操作 DeQueue(queue)
   算法3-10:链式队列的入队操作 EnQueue(queue, x)
   算法3-11:链式队列的查看队首操作 GetFront(queue)
   算法3-12:链式队列的出队操作 DeQueue(queue)
   算法3-13:后缀表达式求值 PostFixEval(expr)
   算法3-14:阶乘的递归实现 Factorial(n)
   算法3-15:火车车厢重排 TrainCarriageScheduling(in_track, out_track, n, k)
  3.2 基础练习
   练习3-1 仅有头指针的队列
   练习3-2 栈操作的合法性
   练习3-3 用两个栈实现队列
   *练习3-4 符号配对
  3.3 进阶实验
   实验3-1 在一个数组中实现两个栈
   实验3-2 出栈序列的合法性
   实验3-3 简单计算器
   实验3-4 取行李
   实验3-5 双端队列
   *实验3-6 滑动窗口的极值
第4章 字符串
  4.1 算法实现
   算法4-1:顺序存储字符串的插入操作StrInsert(s, pos, t)
   算法4-2:顺序存储字符串的删除操作StrRemove(s, pos, len)
   算法4-3:顺序存储字符串的截取子串操作 SubString(s, pos, len)
   算法4-4:顺序存储字符串的连接操作 StrConcat(s, t)
   算法4-5:顺序存储字符串的比较操作 StrCompare(s, t)
   算法4-6:链式存储字符串的插入操作StrInsert(s, pos, t)
   算法4-7:链式存储字符串的删除操作 StrRemove(s, pos, len)
   算法4-8:链式存储字符串的截取子串操作 SubString(s, pos, len)
   算法4-9:链式存储字符串的连接操作 StrConcat(s, t)
   算法4-10:链式存储字符串的比较操作 StrCompare(s, t)
   算法4-11:朴素字符串模式匹配算法 PatternMatchBF(s, t)
   算法4-12:字符串替换算法 Replace(s, sub_s, t)
   算法4-13:求解字符串t的next数组 GetNext(t, next)
   算法4-14:字符串模式匹配的KMP算法 PatternMatchKMP(s, t)
   算法4-15:字符串模式匹配的KR算法 PatternMatchKR(s, t)
   算法4-16:字符串模式匹配的Sunday算法 PatternMatchSunday(s, t)
  4.2 基础练习
   练习4-1 字符串匹配算法比较
   练习4-2 剪切粘贴
  4.3 进阶实验
   实验4-1 吃火锅
   实验4-2 猜近似数字
   实验4-3 出院
第5章 树与二叉树
  5.1 算法实现
   算法5-1:构造二叉树 CreateBinaryTree(value, left_tree, right_tree)
   算法5-2:前序遍历二叉树 PreOrder(tree)
   算法5-3:中序遍历二叉树 InOrder(tree)
   算法5-4:后序遍历二叉树 PostOrder(tree)
   算法5-5:计算二叉树高度 Height(tree)
   算法5-6:将表达式树转换成中缀表达式 PrintInfixExpression(tree)
   算法5-7:非递归前序遍历二叉树 PreOrder(tree)
   算法5-8:非递归中序遍历二叉树 InOrder(tree)
   算法5-9:非递归后序遍历二叉树 PostOrder(tree)
   算法5-10:层序遍历二叉树 LevelOrder(tree)
   算法5-11:二叉树前序序列化 PreOrderSerialize(tree)
   算法5-12:根据前序序列重构二叉树 PreOrderDeSerialize( preorder, n)
   算法5-13:二叉树层序序列化 LevelOrderSerialize(tree)
   算法5-14:根据层序序列重构二叉树 LevelOrderDeSerialize(levelorder, n)
   算法5-15:创建Huffman树 CreateHuffmanTree(w)
   算法5-16:对二进制字符串解码 Decoding(tree, binary_code)
   算法5-17:查找根结点 FindRoot(tree, x)
   算法5-18:查找树中带有指定数据的结点 Search(tree, x)
   算法5-19:前序遍历树 PreOrder(tree)
   算法5-20:后序遍历树 PostOrder(tree)
   算法5-21:创建Trie树结点 CreateTrieNode(k)
   算法5-22:Trie树中插入字符串 Insert(trie, k, s)
   算法5-23:判断给定字符串是否在Trie树中 IsIn(trie, k, s)
   算法5-24:构建后缀树BuildSuffixTree(s, k)
  5.2 基础练习
   练习5-1 顺序存储的二叉树的遍历
   练习5-2 列出叶结点
   练习5-3 还原二叉树
   *练习5-4 转换树的表示法
  5.3 进阶实验
   实验5-1 树的同构
   实验5-2 树的宽度
   实验5-3 二叉树直径
   实验5-4 根据后序和中序遍历输出前序遍历
   实验5-5 顺序存储的二叉树的最近公共祖先问题
   *实验5-6 修理牧场
   *实验5-7 家谱处理
   *实验5-8 我爱背单词
第6章 优先级队列
  6.1 算法实现
   算法6-1:二叉堆的上调操作 SiftUp(h, i)
   算法6-2:二叉堆的下调操作 SiftDown(h, i)
   算法6-3:二叉堆的插入操作 Insert(h, x)
   算法6-4:二叉堆的删顶操作 ExtractMin(h)
   算法6-5:二叉堆的朴素建堆操作 MakeHeapUp(h)
   算法6-6:二叉堆的快速建堆操作 MakeHeapDown(h)
   算法6-7:多叉堆的上调操作 SiftUpD(h, d, i)
   算法6-8:多叉堆的下调操作 SiftDownD(h, d, i)
   算法6-9:左堆的合并操作 LeftistMerge(h1, h2)
   算法6-10:斜堆的合并操作 SkewMerge(h1, h2)
  6.2 基础练习
   练习6-1 堆中的路径
   练习6-2 Huffman树的实现
  6.3 进阶实验
   实验6-1 是不是堆
   实验6-2 关于堆的判断
   实验6-3 Windows消息队列
   实验6-4 D度完全树
   *实验6-5 对顶堆维护中位数
   *实验6-6 堆的合并操作比较
第7章 图
  7.1 算法实现
   算法7-1:获取图的顶点个数 NumberOfVerts(graph)
   算法7-2:判断边是否存在 ExistEdge(graph, u, v)
   算法7-3:找顶点的第一个邻接顶点 FirstAdjVert(graph, v)
   算法7-4:向图中插入边 InsertEdge(graph, u, v, weight)
   算法7-5:从图中删除边 RemoveEdge(graph, u, v)
   算法7-6:从图中删除顶点及所有邻接于该顶点的边 RemoveVert(graph, v)
   算法7-7:返回图中顶点的第一个邻接顶点 FirstAdjVert(graph, v)
   算法7-8:判断边是否存在 ExistEdge(graph, u, v)
   算法7-9:向图中插入边 InsertEdge(graph, u, v, weight)
   算法7-10:从图中删除顶点及所有邻接于该顶点的边 RemoveVert(graph, v)
   算法7-11:深度优先遍历图中顶点 DFS(graph)
   算法7-12:从指定顶点开始深度优先遍历 DFSv(graph, v, visited)
   算法7-13:广度优先遍历图中顶点 BFS(graph)
   算法7-14:从指定顶点开始广度优先遍历 BFSv(graph, v, visited)
   算法7-15:图的连通性判断 IsConnected(graph)
   算法7-16:验证六度空间理论SixDegreesOfSeparation(graph, v)
   算法7-17:获取图的强连通分量 StronglyConnectedComponents(graph)
   算法7-18:后序深度优先遍历记录顶点 PostOrderDFS(graph, v, visited, dfs_seq, dfs_num)
   算法7-19:后序深度优先遍历输出顶点 PrintV(graph, v, visited)
   算法7-20:从给定顶点出发获得一条回路 GetCircuit(graph, start)
   算法7-21:求欧拉回路 EulerCircle(graph)
   算法7-22:利用深度优先遍历计算dfn和low的值 DfnAndLow(graph, v, parent)
   算法7-23:求割点的Tarjan算法 ArticulationPoint(graph, start)
   算法7-24:求割边的Tarjan算法 ArticulationEdge(graph, start)
  7.2 基础练习
   练习7-1 哥尼斯堡七桥问题
   练习7-2 判断两点是否连通
   练习7-3 判断广度优先遍历序列
  7.3 进阶实验
   实验7-1 Hamilton回路
   实验7-2 列出连通集
   实验7-3 诈骗电话检测
   实验7-4 是否有回路
   实验7-5 社交网络图中顶点的“重要性”计算
第8章 图应用
  8.1 算法实现
   算法8-1:求单源最短路径的Dijkstra算法 Dijkstra(graph, s, path, dist)
   算法8-2:求单源最短路径的Bellman-Ford算法 BellmanFord(graph, s, dist)
   算法8-3:求所有点对间最短路径的Floyd-Warshall算法 Floyd Warshall(graph, path, dist)
   算法8-4:求最小生成树的Prim算法 Prim(graph)
   算法8-5:拓扑排序 TopSort(graph, top_s)
   算法8-6:求图中关键活动 CriticalAnalysis(graph)
   算法8-7:求解二部图最大匹配的匈牙利算法 MaximumMatch(bigraph, match)
   算法8-8:找二部图匹配的增广路径 FindAugmentingPath(bigraph, match, u, visited)
  8.2 基础练习
   练习8-1 旅游规划
   练习8-2 哈利·波特的考试
   练习8-3 公路村村通
   练习8-4 任务调度的合理性
  8.3 进阶实验
   实验8-1 城市间紧急救援
   实验8-2 最短路径的交点
   实验8-3 打怪升级
   实验8-4 最小生成树的唯一性
   *实验8-5 拆积木
   *实验8-6 爱之匹配
第9章 不相交集
  9.1 算法实现
   算法9-1:初始化不相交集 InitSet(set, n)
   算法9-2:查找元素所在的集合 Find(set, x)
   算法9-3:合并两个元素所在的集合 Union(set, x, y)
   算法9-4:初始化采用按秩合并策略的不相交集 InitSet(set, n)
   算法9-5:利用按秩合并策略合并两个元素所在的集合 Union(set, x, y)
   算法9-6:以路径压缩策略查找元素所在的集合Find(set, x)
   算法9-7:Tarjan算法求解最近公共祖先 LCA(P, u, set, ancestor, visited)
  9.2 基础练习
   练习9-1 文件传输
   *练习9-2 团结就是力量
  9.3 进阶实验
   实验9-1 部落
   *实验9-2 两个序列的故事
第10章 内排序
  10.1 算法实现
   算法10-1:插入排序 InsertionSort(a, l, r)
   算法10-2:Shell排序 ShellSort(a, l, r)
   算法10-3:简单选择排序 SelectionSort(a, l, r)
   算法10-4:堆排序 HeapSort(a, l, r)
   算法10-5:冒泡排序 BubbleSort(a, l, r)
   算法10-6:序列拆分 Partition(a, l, r)
   算法10-7:快速排序 QuickSort(a, l, r)
   算法10-8:二路归并 TwoWayMerge(a, l_x, r_x, l_y, r_y)
   算法10-9:归并排序 MergeSort(a, l, r)
   算法10-10:自底向上的归并排序 MergeSortBottomUp(a, l, r)
   算法10-11:改进的二路归并 TwoWayMergeImproved(a, t, l, m, r)
   算法10-12:改进的自底向上归并排序 MergeSortBottomUpImproved(a, l, r)
   算法10-13:二路归并求逆序对减量 TwoWayInversionCount(a, l, m, r)
   算法10-14:归并排序兼求逆序对数量 InversionCount(a, l, r)
   算法10-15:计数排序 CountingSort(a, l, r, k)
   算法10-16:基数排序中使用的计数排序 CountingSort2(a, l, r, radix, k, d)
   算法10-17:MSD基数排序 MSDRadixSort(a, l, r, radix, k, d)
   算法10-18:LSD基数排序 LSDRadixSort(a, l, r, radix, d)
   算法10-19:基于插入排序的索引排序 IndexedInsertionSort(a, idx, l, r)
   算法10-20:元素顺序调整 ElementAdjust(a, idx, l, r)
   算法10-21:内省排序 IntroSort(a, l, r, d)
   算法10-22:Tim排序 TimSort(a, l, r)
  10.2 基础练习
   练习10-1 排序
   练习10-2 正负数分类
   练习10-3 模拟Excel排序
   练习10-4 插入排序还是归并排序
   练习10-5 与零交换
  10.3 进阶实验
   实验10-1 分类排序
   实验10-2 德才论
   实验10-3 插入排序还是堆排序
   实验10-4 统计工龄
   实验10-5 清点代码库
第11章 查找
  11.1 算法实现
   算法11-1:顺序表的顺序查找 SequentialSearch(record, n, key)
   算法11-2:二分查找 BinarySearch(record, low, high, key)
   算法11-3:索引表的顺序查找 IndexSequentialSearch(record, idx, m, l, key)
   算法11-4:二叉查找树的查找 SearchBST(bstree, key)
   算法11-5:二叉查找树的插入 InsertBST(bstree, x)
   算法11-6:二叉查找树的删除 DeleteBST(bstree, key)
   算法11-7:AVL树的插入 InsertAVL(tree, x)
   算法11-8:AVL树的左单旋转(RR型) RRSingleRotation(root)
   算法11-9:AVL树的先左后右双向旋转(LR型) LRDoubleRotation(root)
   算法11-10:英文字典的散列 StringHash(string, table_size)
   算法11-11:开放定址法散列查找 SearchHash(htable, key)
   算法11-12:开放定址法散列插入 InsertHash(htable, x)
  11.2 基础练习
   练习11-1 垃圾分类
   练习11-2 是否二叉查找树
   练习11-3 AVL树的根
   练习11-4 整型关键字的散列映射
  11.3 进阶实验
   实验11-1 集合相似度
   实验11-2 查找树判断
   实验11-3 树种统计
   *实验11-4 笛卡儿树
   *实验11-5 新浪微博热门话题
第12章 高级查找
  12.1 算法实现
   算法12-1:构建最小值线段树BuildSegTree(seg_tree, array, l, r, p)
   算法12-2:求最小值线段树的单点更新 Update(seg_tree, l, r, p, idx, value)
   算法12-3:求最小值线段树的区间查询 Query(seg_tree, l, r, p, ql, qr)
   算法12-4:求最小值线段树的区间增值更新 RangeUpdate(seg_tree, lazy, l, r, p, ql, qr, c)
   算法12-5:树状数组区间求前缀和 GetPrefixSum(c, k)
   算法12-6:树状数组单点更新 Update(c, n, k, d)
   算法12-7:红黑树中的右旋 RRotate(rbtree, x)
   算法12-8:红黑树中插入结点后的调整 InsertAdjust(rbtree, x)
   算法12-9:删除黑结点及颜色调整 DeleteAdjust(rbtree, x)
   算法12-10:树堆的插入 InsertTreap(treap, x)
  12.2 基础练习
   练习12-1 是否红黑树
   *练习12-2 三逆序组
  12.3 进阶实验
   实验12-1 树种统计
   *实验12-2 染成红黑树
   *实验12-3 逆序对
第13章 外排序
  13.1 算法实现
   算法13-1:初始化败者树 InitLoserTree(tree, array, size)
   算法13-2:从内部结点到根结点的路径上进行比赛 Play(tree, p, left, right)
   算法13-3:重构时从外部结点到根结点的路径上重新进行比赛 RePlay(tree, i)
   算法13-4:利用败者树进行多路归并排序MultiMerge(tree, racer, buffer_ pool, f, size)
   算法13-5:置换选择算法 ReplacementSelection(ram_array, m, file_ in, file_out)
  13.2 基础练习
   *练习13-1 数据去重
  13.3 进阶实验
   *实验13-1 文件排序
第14章 索引
  14.1 基础练习
   *练习14-1 B+树的查找
   *练习14-2 基于词频的文件相似度
  14.2 进阶实验
   *实验14-1 3 阶B+树
   *实验14-2 迷你搜索引擎
第15章 算法设计基础
  15.1 算法实现
   算法15-1:小规模分书问题的嵌套循环算法 BookAssignment(T)
   算法15-2:枚举法的嵌套循环实现 IterBruteForce(T)
   算法15-3:枚举法的递归实现 RecBruteForce(T, s, i, n)
   算法15-4:分书问题的递归枚举算法 BookAssignmentBF(table, s, i, n, m)
   算法15-5:回溯法的通用伪代码 Backtracking(i, n)
   算法15-6:点集重构问题回溯算法的伪代码 PointSetReconstruction(x, D, n, left, right)
   算法15-7:分治法的伪代码描述 DivideAndConquer(n)
   算法15-8:第n项斐波那契数的递归计算 RecFib(n)
   算法15-9:第n项斐波那契数的循环计算 Fib(n)
   算法15-10:计算m1, n的动态规划算法 OptimalMatrixOrdering(m, p, r, n)
   算法15-11:活动安排问题的贪心算法 ActivitySelection(a, k, n)
   算法15-12:连续背包问题的贪心算法 Knapsack(W, s, x, n)
   算法15-13:离散背包(0-1 背包)问题的递归分治解法 Knapsack01(W, s, x, f, n, i)
   算法15-14:整数重量限制下离散背包问题的动态规划解法 Knapsack01(W, s, opt, n)
  15.2 基础练习
   练习15-1 分书问题
   练习15-2 n皇后问题
   *练习15-3 旅行商问题
   练习15-4 最长公共子序列
   练习15-5 带权的活动安排问题
   练习15-6 教室安排问题
  15.3 进阶实验
   实验15-1 0-1 背包问题的回溯剪枝解
   实验15-2 0-1 背包问题的分支限界解
   实验15-3 拼题A打卡奖励
   实验15-4 有多少红黑树
   *实验15-5 代金券
第16章 高级算法设计
  16.1 算法实现
   算法16-1:顶点覆盖问题的近似算法 VertexCoverApproximation(E)
   算法16-2:基于贪心策略的离散背包问题近似算法 KnapsackGreedyApproximation(W, s, x, n)
   算法16-3:基于动态规划的离散背包问题近似算法 KnapsackDPApproximation(W, s, x, n, eps)
   算法16-4:A算法 A(h, init_state, goal_state)
   算法16-5:爬山算法 HillClimbing(f, init_solution, E)
   算法16-6:模拟退火算法 SimulatedAnnealing(init_solution, E, T, alpha, k, iter_num, eps)
   算法16-7:计算 ai mod n的幂取模算法 PowMod(a, i, n)
   算法16-8:Miller-Rabin素数测试算法 MillerRabin_IsPrime(n, k)
  16.2 进阶实验
   实验16-1 0-1 背包问题的近似解
   *实验16-2 旅行商问题
   *实验16-3 九宫数独
   *实验16-4 五子棋
   *实验16-5 最小生成树
  参考文献

对比栏

1

您还可以继续添加

2

您还可以继续添加

3

您还可以继续添加

4

您还可以继续添加