代码汇总【数据结构与算法】【精致版】

简介: 代码汇总【数据结构与算法】【精致版】

代码汇总【数据结构与算法】【精致版】

学习

第一章 引言

第二章 线性表

顺序表

1-顺序表.h

1-顺序表的测试.c

//1.顺序表的初始化
//【算法2-1】 顺序表的初始化
//创建顺序表函数 初始化前n个数据
//2.顺序表的插入 
//【算法2-2】顺序表的插入 
//3.顺序表的删除
//【算法2-3】 顺序表的删除
//4.顺序表中的按值查找 
//【算法2-4】顺序表中的按值查找 
//5.另外
//按序号查询 ,结果返回由x实现

[例 2-1] 两个顺序表合并

2-5顺序表的合并.c

// [例 2-1] 两个顺序表合并 
//【算法2-5】两个顺序表的合并

单链表

2-单链表.h

2-单链表的测试.c

//1.建立单链表
//【算法2-6】头插法建立单链表 
//【算法2-7】尾插法建立单链表 
//2.求表长
//【算法2-8】 求单链表的表长
//3.查找操作 
//(1) 按序号查找  Get(H,k)
//【算法2-9】单链中按序号查找 
//(2) 按值x查找 
//【算法2-10】单链中按值查找 
//4.插入操作 
//【算法2-11】单链表的插入 
//在单链表H的第i个位置上插入值为x的元素 
//5.删除操作 
//【算法2-12】  单链表的删除

[例2-2]单链表的逆置

2-13单链表的逆置.c

// [例2-2]单链表的逆置
//【算法2-13】 单链表的逆置

[例2-3]单链表中删除重复结点

2-14单链表中删除重复结点.c

// [例2-3]单链表中删除重复结点
//【算法2-14】单链表中删除重复结点

[例2-4]两个集合的差集

2-15两个集合的差集.c

//  [例2-4]两个集合的差集
// 【算法2-15】两个集合的差集

[例] 两个单链表的合并

两个单链表的合并.c

循环链表

3-循环链表.c

双向链表

4-双向链表.c

静态链表

5-静态链表.c

第三章 栈和队列

顺序栈

1-顺序栈.h

1-顺序栈测试.c

共享栈

2-共享栈.c

链栈

3-链栈.h

3-链栈.c

多个链栈

4-多个链栈.c

5-括号匹配.c

循环队列

6-循环队列.c

链队列

7-链队列.c

第四章 串

定长顺序串

1-定长顺序串.c

//(1)串插入函数 
//【算法4-2】串插入函数 
//(2)串删除函数
//【算法4-3】 串删除函数
//(3)串连接函数
//【算法4-4】 串连接函数
//(4)求子串函数
//【算法4-5】 求子串函数

堆串

2-堆串.c

//(1)串初始化函数
//【算法4-6】串初始化函数
//(2)串赋值函数
//【算法4-7】串赋值函数
//(3)串插入函数 
//【算法4-8】 串插入函数 
//(4)串删除函数
//【算法4-9】 串删除函数
//(5)串连接函数
//【算法4-10】 串连接函数
//(6)求子串函数
//【算法4-11】求子串函数

4-12BF模式匹配算法.c

//【算法4-12】BF模式匹配算法

4-13KMP模式匹配算法

//【算法4-13】KMP模式匹配算法
//【算法4-14】next算法
//【算法4-15】 nextval算法

块链串

3-块链串.c

第五章 多维数组和广义表

第六章 树

二叉树

1-二叉树的递归实现.c

//【算法6-1】递归 先序
//【算法6-2】递归 中序
//【算法6-3】递归 后序

2-二叉树的非递归实现.c

//【算法6-4】非递归 先序
//【算法6-5】非递归 中序-1
//【算法6-6】非递归 中序-2
//【算法6-7】非递归 后序
//【算法6-8】二叉树的层次遍历

3-二叉树的遍历算法应用.c

// 【算法6-9】先序遍历统计二叉树的结点数
// 【算法6-10】中序遍历输出二叉树的叶子结点
// 【算法6-11】后序遍历输出二叉树的叶子结点数目 
//【算法6-12】全局变量法求二叉树的高度
//【算法6-13】求二叉树的高度
//【算法6-14】求二叉树中某一结点的双亲 
//【算法6-15】二叉树相似性判定 
//【算法6-16】按树状打印二叉树

第七章 图

1-邻接矩阵.c

//【算法7.1】用邻接矩阵创建无向网

2-邻接矩阵plus.c

3-邻接表.c

4-邻接表plus.c

5-DFSAdjMatrix.c

6-DFSAdjList.c

//【算法 7-2】递归深度优先搜索遍历连通子图
//【算法 7-3】深度优先遍历图g 
//【算法 7-4】非递归深度优先搜索遍历连通子图

7-BFSAdjMatrix.c

8-BFSAdjList.c

//【算法7-5】广度优先搜索遍历连通子图
//【算法7-6】广度优先遍历图g

9-Prim.c

//【算法7-7】Prim算法求得最小生成树

10-拓扑排序.c

//【算法7-8】获取图中每个顶点入度值 
//【算法7-9】 拓扑排序

11-单源最短路径.c

//【算法7-11】采用Dijkstra算法求得从源点到其余各顶点的最短路径

12-多源最短路径.c

//【算法7-12】Floyd算法求得任意两顶点之间的最短路径

第八章 查找

1-顺序查找.c

//【算法8-1】顺序查找
//【算法8-2】加“监视哨”的顺序查找

2-折半查找.c

//【算法 8-3】折半查找的非递归实现

3-二叉排序树.c

//【算法8-4】基于二叉排序树查找的非递归实现
//【算法8-5】 基于二叉排序树查找的递归实现
//【算法8-6】二叉排序树的插入
//【算法8-7】  二叉排序树的建立
//【算法8-8】 二叉排序树的删除

4-哈希表查找.c

// 【算法8-10】采用除留余数法构造哈希函数
//【算法8-11】采用线性探测再散列处理冲突
//【算法8-12】哈希表的查找
//【算法8-13】  哈希表的插入
//【算法8-14】哈希表的创建
//【算法8-15】  哈希表的删除

第九章 排序

插入类排序

1-直接插入排序.c

// 【算法9-1】直接插入排序
// 【算法9-2】改进的直接插入排序

2-折半插入排序.c

//【算法9-3】折半插入排序

3-希尔排序.c

//【算法9-4】希尔排序

交换类排序

4-冒泡排序.c

//【算法9-5】冒泡排序
//【算法9-6】改进冒泡排序

5-快速排序.c

//【算法9-7】一趟快速排序 
//【算法9-8】快速排序

选择类排序

6-简单选择排序.c

//【算法9-9】简单选择排序

7-堆排序.c

//【算法9-10】堆的筛选
//【算法9-11】建立初始堆
//【算法9-12】堆排序

归并类排序

8- 二路归并排序.c

//【算法9-13】二路归并排序
//【算法9-14】二路归并排序

9-自然归并排序.c

//【算法9-15】自然归并排序

分配类排序

10-多关键字排序.c

11-链式基数排序.c

//【算法9-16】基于链队列的基数排序
//【算法9-17】提取关键字中第m位的数字值

习题

第一章 习题

9.1 在数组A[1…n]中查找值为K的元素,若找到则输出其位置i(1<=i<=n),否则输出0作为标志

9.2 找出数组A[1…n]中元素的最大值和次最大值

第二章 习题

(1) 设有一线性表e=(e1,e2,…,e[n-1],en,其逆线性表定义为e’=(en,e[n-1],…,e2,e1)。请设计一个算法,将线性逆置,要求逆线性表仍占用原线性表的空间,并且用顺序表和单链表两种方法来表示,写出不同的处理函数。

(3) 已知线性表A的长度为n,并且采用顺序存储结构。请编写算法,删除线性表中所有值为x的元素。

(5) 假设有一个循环链表的长度大于1,且表中既无头结点也无头指针。已知s为指向链表中某结点的指针,试编写算法,在链表中删除指针s所指结点的前驱结点。

(8)设指针la和lb分别指向两个无头结点单链表中的首元结点,试设计算法,从表la中删除自第i个元素起共len个元素,并将它们插入表lb的第j个元素之后。

(9)设带头结点的线性单链表A=(a1,a2,…,am),B=(b1,b2,…bn)。试编写算法按下列规则合并A、B为线性单链表C,使得

  C=(a1,b1,…,am,bm,b_(m+1),…,bn),m<=n

或者

  C=(b1,a1,…,bn,an,a_(n+1),…,am),m>n

第三章 习题

(2) 回文是指正读反读均相同的字符序列,如“abba”和“abdba"均是回文,但“good"不是回文。试写一个算法判定给定的字符串是否为回文。

(6) 假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点,试编写相应的置空队、判队空、入队和出队算法。

(8) 在循环队列中,可以设置一个标志域tag,以区分当尾指针和头指针相等时,队列状态是“空”还是“满”(tag的值为0表示“空”,tag的值为1表示“满”),编写此结构相应的队列初始化、入队、出队算法。

第六章 习题

(1)编写算法,在以二叉链表存储的二叉树中,求度为2的结点的个数。

(2)编写算法,在以二叉链表存储的二叉树中,交换二叉树各结点的左右子树。

实验

约瑟夫环

约瑟夫环.c

//【算法2-16】约瑟夫环

一元多项式运算器

多项式.c

//【算法2-17】建立多项式
//【算法2-18】输出多项式
//【算法2-19】两个多项式相加
//【算法2-20】两个多项式相减

迷宫求解

马踏棋盘

计算器

哈夫曼编码的实现

相关文章
|
2月前
|
算法 开发者 计算机视觉
燃爆全场!Python并查集:数据结构界的网红,让你的代码炫酷无比!
在编程的世界里,总有一些数据结构以其独特的魅力和高效的性能脱颖而出,成为众多开发者追捧的“网红”。今天,我们要介绍的这位明星,就是Python中的并查集(Union-Find)——它不仅在解决特定问题上大放异彩,更以其优雅的设计和强大的功能,让你的代码炫酷无比,燃爆全场!
40 0
|
26天前
|
算法
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
|
1月前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
40 3
|
1月前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
2月前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
31 1
|
2月前
|
存储 缓存 算法
如何通过优化算法和代码结构来提升易语言程序的执行效率?
如何通过优化算法和代码结构来提升易语言程序的执行效率?
|
2月前
|
搜索推荐
插入排序算法的讲解和代码
【10月更文挑战第12天】插入排序是一种基础的排序算法,理解和掌握它对于学习其他排序算法以及数据结构都具有重要意义。你可以通过实际操作和分析,进一步深入了解插入排序的特点和应用场景,以便在实际编程中更好地运用它。
|
2月前
|
缓存 分布式计算 监控
优化算法和代码需要注意什么
【10月更文挑战第20天】优化算法和代码需要注意什么
21 0
|
2月前
|
存储 算法 索引
HashMap底层数据结构及其增put删remove查get方法的代码实现原理
HashMap 是基于数组 + 链表 + 红黑树实现的高效键值对存储结构。默认初始容量为16,负载因子为0.75。当存储元素超过容量 * 负载因子时,会进行扩容。HashMap 使用哈希算法计算键的索引位置,通过链表或红黑树解决哈希冲突,确保高效存取。插入、获取和删除操作的时间复杂度接近 O(1)。
29 0
|
2月前
05(数据结构考研)树相关操作代码
05(数据结构考研)树相关操作代码
29 0