c语言版数据结构之线性表归并大概

线性表:n个具有相同特性的数据元素的有限序列。较为灵活,可根据需要増长或缩短。


两线性表归并算法(此时已知其元素按值非递减排列)

void MergeList(List La, List Lb, List &Lc) {
	//已知线性表La和Lb中的数据元素按值非递减排列。归并La和Lb得到新的线性表Lc,Lc的数据元素也按值非递减排列
	InitList(Lc);
	int ai, bj;
	int i = j = 1;
	int k = 0;
	La_len = ListLength(La);
	Lb_len = ListLength(Lb);
	while( (i <= La_len) && (j <= Lb_len) ) {
		GetElem(La, i, ai);
		GetElem(Lb, j, bj);
		if(ai <= bj) {
			ListInsert(Lc, ++k, ai);
			++i;
		}
		else {
			ListInsert(Lc, ++k, bj);
			++j;
		}
	}
	while(i <= La_len) {
		GetElem(La, i++,ai);
		ListInsert(Lc, ++k, ai);
	}
	while (j <= Lb_len) {
		GetElem(Lb, j++, bj);
		ListInsert(Lc, ++k, bj);
	}
} //MergeList
在程序中,定义函数的形参取&Lc,是因为调用函数时,是将实参的函数值拷贝后在传给实参,如若不取地址无法改变所要得到的线性表中的值。同理,此函数中应用相同原理调用的函数的原型分别是 InitList(&L)、GetElem(L, i,&e)、ListInsert(&L,i,e)

总体思想:对已经排好序的两链表,依次比较其大小,将小的值存入所要得到的线性表,当其中一个线性表元素判别完后,将另一线性表的元素直接接在所要得到的线性表后。


此篇文章仅代表作为本小白的观点,若是有错还请大神不吝赐教大笑

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构》(c语言)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参数教材。学了数据结构后,许多以前写起来很繁杂的代码现在写起来很清晰明了. 本书的前半部分从抽象数据类型的角度讨论各种基本类型的数据结构及其应用;后半部分主要讨论查找和排序的各种实现方法及其综合分析比较。 全书采用类C语言作为数据结构和算法的描述语言。 本书概念表述严谨,逻辑推理严密,语言精炼,用词达意,并有配套出的《数据结构题集》(C语言),便于教学,又便于自学。 本书后附有光盘。光盘内容可在DOS环境下运行的以类C语言描述的“数据结构算法动态模拟辅助教学软件,以及在Windows环境下运行的以类PASCAL或类C两种语言描述的“数据结构算法动态模拟辅助教学软件”。 目录: 第1章 绪论 1.1 什么是数据结构 1.2 基本概念和术语 1.3 抽象数据类型的表现与实现 1.4 算法和算法分析 第2章 线性表 2.1 线性表的类型定义 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示和实现 2.4 一元多项式的表示及相加 第3章 栈和队列 3.1 栈 3.2 栈的应有和举例 3.3 栈与递归的实现 3.4 队列 3.5 离散事件模拟 第4章 串 4.1 串类型的定义 4.2 串的表示和实现 4.3 串的模式匹配算法 4.4 串操作应用举例 第5章 数组和广义表 5.1 数组的定义 5.2 数组的顺序表现和实现 5.3 矩阵的压缩存储 5.4 广义表的定义 5.5 广义表的储存结构 5.6 m元多项式的表示 5.7 广义表的递归算法第6章 树和二叉树 6.1 树的定义和基本术语 6.2 二叉树 6.2.1 二叉树的定义 6.2.2 二叉树的性质 6.2.3 二叉树的存储结构 6.3 遍历二叉树和线索二叉树 6.3.1 遍历二叉树 6.3.2 线索二叉树 6.4 树和森林 6.4.1 树的存储结构 6.4.2 森林与二叉树的转换 6.4.3 树和森林的遍历 6.5 树与等价问题 6.6 赫夫曼树及其应用 6.6.1 最优二叉树(赫夫曼树) 6.6.2 赫夫曼编码 6.7 回溯法与树的遍历 6.8 树的计数 第7章 图 7.1 图的定义和术语 7.2 图的存储结构 7.2.1 数组表示法 7.2.2 邻接表 7.2.3 十字链表 7.2.4 邻接多重表 7.3 图的遍历 7.3.1 深度优先搜索 7.3.2 广度优先搜索 7.4 图的连通性问题 7.4.1 无向图的连通分量和生成树 7.4.2 有向图的强连通分量 7.4.3 最小生成树 7.4.4 关节点和重连通分量 7.5 有向无环图及其应用 7.5.1 拓扑排序 7.5.2 关键路径 7.6 最短路径 7.6.1 从某个源点到其余各顶点的最短路径 7.6.2 每一对顶点之间的最短路径 第8章 动态存储管理 8.1 概述 8.2 可利用空间表及分配方法 8.3 边界标识法 8.3.1 可利用空间表的结构 8.3.2 分配算法 8.3.3 回收算法 8.4 伙伴系统 8.4.1 可利用空间表的结构 8.4.2 分配算法 8.4.3 回收算法 8.5 无用单元收集 8.6 存储紧缩 第9章 查找 9.1 静态查找表 9.1.1 顺序表的查找 9.1.2 有序表的查找 9.1.3 静态树表的查找 9.1.4 索引顺序表的查找 9.2 动态查找表 9.2.1 二叉排序树和平衡二叉树 9.2.2 B树和B+树 9.2.3 键树 9.3 哈希表 9.3.1 什么是哈希表 9.3.2 哈希函数的构造方法 9.3.3 处理冲突的方法 9.3.4 哈希表的查找及其分析 第10章 内部排序 10.1 概述 10.2 插入排序 10.2.1 直接插入排序 10.2.2 其他插入排序 10.2.3 希尔排序 10.3 快速排序 10.4 选择排序 10.4.1 简单选择排序 10.4.2 树形选择排序 10.4.3 堆排序 10.5 归并排序 10.6 基数排序 10.6.1 多关键字的排序 10.6.2 链式基数排序 10.7 各种内部排序方法的比较讨论 第11章 外部排序 11.1 外存信息的存取 11.2 外部排序的方法 11.3 多路平衡归并的实现 11.4 置换一选择排序 11.5 最佳归并树 第12章 文件 12.1 有关文件的基本概念 12.2 顺序文件 12.3 索引文件 12.4 ISAM文件和VSAM文件 12.4.1 ISAM文件 12.4.2 VSAM文件 12.5 直接存取文件(散列文件) 12.6 多关键字文件 12.6.1 多重表文件 12.6.2 倒排文件 附录A 名词索引 附录B 函数索引 参考书目
数据结构在很多地方用的到,在计算机行业,很有用的 。 第1章 绪论  1.1 什么是数据结构  1.2 基本概念和术语  1.3 抽象数据类型的表现与实现  1.4 算法和算法分析 第2章 线性表  2.1 线性表的类型定义  2.2 线性表的顺序表示和实现  2.3 线性表的链式表示和实现  2.4 一元多项式的表示及相加 第3章 栈和队列  3.1 栈  3.2 栈的应有和举例  3.3 栈与递归的实现  3.4 队列  3.5 离散事件模拟 第4章 串  4.1 串类型的定义  4.2 串的表示和实现  4.3 串的模式匹配算法  4.4 串操作应用举例 第5章 数组和广义表  5.1 数组的定义  5.2 数组的顺序表现和实现  5.3 矩阵的压缩存储  5.4 广义表的定义  5.5 广义表的储存结构  5.6 m元多项式的表示  5.7 广义表的递归算法第6章 树和二叉树 6.1 树的定义和基本术语 6.2 二叉树   6.2.1 二叉树的定义   6.2.2 二叉树的性质   6.2.3 二叉树的存储结构  6.3 遍历二叉树和线索二叉树   6.3.1 遍历二叉树   6.3.2 线索二叉树  6.4 树和森林   6.4.1 树的存储结构   6.4.2 森林与二叉树的转换   6.4.3 树和森林的遍历  6.5 树与等价问题  6.6 赫夫曼树及其应用   6.6.1 最优二叉树(赫夫曼树)   6.6.2 赫夫曼编码  6.7 回溯法与树的遍历  6.8 树的计数 第7章 图  7.1 图的定义和术语  7.2 图的存储结构   7.2.1 数组表示法   7.2.2 邻接表   7.2.3 十字链表   7.2.4 邻接多重表  7.3 图的遍历   7.3.1 深度优先搜索   7.3.2 广度优先搜索  7.4 图的连通性问题   7.4.1 无向图的连通分量和生成树   7.4.2 有向图的强连通分量   7.4.3 最小生成树   7.4.4 关节点和重连通分量  7.5 有向无环图及其应用   7.5.1 拓扑排序   7.5.2 关键路径  7.6 最短路径   7.6.1 从某个源点到其余各顶点的最短路径   7.6.2 每一对顶点之间的最短路径 第8章 动态存储管理  8.1 概述  8.2 可利用空间表及分配方法  8.3 边界标识法   8.3.1 可利用空间表的结构   8.3.2 分配算法   8.3.3 回收算法  8.4 伙伴系统   8.4.1 可利用空间表的结构   8.4.2 分配算法   8.4.3 回收算法  8.5 无用单元收集  8.6 存储紧缩 第9章 查找  9.1 静态查找表   9.1.1 顺序表的查找   9.1.2 有序表的查找   9.1.3 静态树表的查找   9.1.4 索引顺序表的查找  9.2 动态查找表   9.2.1 二叉排序树和平衡二叉树   9.2.2 B树和B+树   9.2.3 键树  9.3 哈希表   9.3.1 什么是哈希表   9.3.2 哈希函数的构造方法   9.3.3 处理冲突的方法   9.3.4 哈希表的查找及其分析 第10章 内部排序  10.1 概述  10.2 插入排序   10.2.1 直接插入排序   10.2.2 其他插入排序   10.2.3 希尔排序  10.3 快速排序  10.4 选择排序   10.4.1 简单选择排序   10.4.2 树形选择排序   10.4.3 堆排序  10.5 归并排序  10.6 基数排序   10.6.1 多关键字的排序   10.6.2 链式基数排序  10.7 各种内部排序方法的比较讨论 第11章 外部排序  11.1 外存信息的存取  11.2 外部排序的方法  11.3 多路平衡归并的实现  11.4 置换一选择排序  11.5 最佳归并树 第12章 文件  12.1 有关文件的基本概念  12.2 顺序文件  12.3 索引文件  12.4 ISAM文件和VSAM文件   12.4.1 ISAM文件   12.4.2 VSAM文件  12.5 直接存取文件(散列文件)  12.6 多关键字文件   12.6.1 多重表文件   12.6.2 倒排文件
一、 功能简介 本课件是一个动态演示数据结构算法执行过程的辅助教学软件, 它可适应读者对算法的输入数据和过程执行的控制方式的不同需求, 在计算机的屏幕上显示算法执行过程中数据的逻辑结构或存储结构的变化状况或递归算法执行过程中栈的变化状况。整个系统使用菜单驱动方式, 每个菜单包括若干菜单项。每个菜单项对应一个动作或一个子菜单。系统一直处于选择菜单项或执行动作状态, 直到选择了退出动作为止。 二、 系统内容 本系统内含84个算法,分属13部分内容,由主菜单显示,与《数据结构》教科书中自第2章至第11章中相对应。各部分演示算法如下: 1. 顺序表 (1)在顺序表中插入一个数据元素(ins_sqlist) (2)删除顺序表中一个数据元素(del_sqlist) (3)合并两个有序顺序表(merge_sqlist) 2. 链表 (1)创建一个单链表(Crt_LinkList) (2)在单链表中插入一个结点(Ins_LinkList) (3)删除单链表中的一个结点(Del_LinkList) (4)两个有序链表求并(Union) (5)归并两个有序链表(MergeList_L) (6)两个有序链表求交(ListIntersection_L) (7)两个有序链表求差(SubList_L) 3. 栈和队列 (1)计算阿克曼函数(AckMan) (2)栈的输出序列(Gen、Perform) (3)递归算法的演示  汉诺塔的算法(Hanoi)  解皇后问题的算法(Queen)  解迷宫的算法(Maze)  解背包问题的算法(Knap) (4)模拟银行(BankSimulation) (5)表达式求值(Exp_reduced) 4. 串的模式匹配 (1)古典算法(Index_BF) (2)求Next 函数值(Get_next)和按Next 函数值进行匹配 (Index_KMP(next)) (3)求 Next 修正值(Get_nextval)和按 Next 修正值进行匹配(Index_KMP(nextval)) 5. 稀疏矩阵 (1)矩阵转置 (Trans_Sparmat) (2)快速矩阵转置 (Fast_Transpos) (3)矩阵乘法 (Multiply_Sparmat) 6. 广义表 (1)求广义表的深度(Ls_Depth) (2)复制广义表(Ls_Copy) (3)创建广义表的存储结构(Crt_Lists) 7. 二叉树 (1)遍历二叉树  二叉树的线索化  先序遍历(Pre_order)  中序遍历(In_order)  后序遍历(Post_order) (2) 按先序建二叉树(CrtBT_PreOdr) (3) 线索二叉树  二叉树的线索化  生成先序线索(前驱或后继) (Pre_thre)  中序线索(前驱或后继) (In_thre)  后序线索(前驱或后继) (Post_thre)  遍历中序线索二叉树(Inorder_thlinked)  中序线索树的插入(ins_lchild_inthr)和删除(del_lchild_inthr)结点 (4)建赫夫曼树和求赫夫曼编码(HuffmanCoding) (5)森林转化成二叉树(Forest2BT) (6)二叉树转化成森林(BT2Forest) (7)按表达式建树(ExpTree)并求值(CalExpTreeByPostOrderTrav) 8. 图 (1)图的遍历  深度优先搜索(Travel_DFS)  广度优先搜索(Travel_BFS) (2)求有向图的强连通分量(Strong_comp) (3)有向无环图的两个算法  拓扑排序(Toposort)  关键路径(Critical_path) (4)求最小生成树  普里姆算法(Prim)  克鲁斯卡尔算法(Kruscal) (5)求关节点和重连通分量(Get_artical) (6)求最短路径  弗洛伊德算法(shortpath_Floyd)  迪杰斯特拉算法(shortpath_DIJ) 9. 存储管理 (1)边界标识法 (Boundary_tag_method) (2)伙伴系统 (Buddy_system) (3)紧缩无用单元 (Storage_compactio
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
数据结构是计算机科学中的一门重要基础课程,也是程序员必备的技能之一。数据结构主要研究数据的组织、存储和管理方式,以及对数据进行操作的算法和技巧。针对题目中的C语言微课答案,我将简要介绍一下相关内容。 首先,基本数据结构包括线性表、栈、队列、树、图等。线性表是最基本的数据结构,它包括顺序表和链表两种实现方式。顺序表通过数组实现,可以随机访问元素;链表则通过指针实现,适合频繁插入和删除操作。栈是一种先进后出的数据结构,常用于实现函数调用栈、表达式求值等场景。队列是一种先进先出的数据结构,常用于实现任务调度、消息队列等场景。树是由节点和边组成的非线性数据结构,常用于实现二叉树、平衡树、堆等。图是由边和节点组成的非线性数据结构,常用于解决图论问题。 其次,常用的数据结构算法包括查找、排序、图算法等。线性表的查找算法包括顺序查找和二分查找,前者按顺序逐个比较元素,后者通过二分法快速缩小查找范围。排序算法包括冒泡排序、插入排序、选择排序、快速排序、归并排序等,每种算法都有其适用的场景和优化策略。图算法包括广度优先搜索、深度优先搜索、最短路径算法、最小生成树算法等,用于解决与图相关的问题。 最后,C语言是一门广泛应用于系统编程的高级编程语言,也是实现数据结构和算法的常用语言。通过C语言可以实现各种数据结构,例如使用结构体实现链表、使用数组实现栈和队列等。同时,C语言提供了丰富的库函数和操作符,使得实现和操作数据结构变得更加便捷和高效。 综上所述,数据结构C语言微课答案主要涵盖了基本数据结构、常用算法以及使用C语言实现数据结构和算法的能力。掌握这些知识和技能,对于进一步学习和应用计算机科学领域具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值