数据结构:两个顺序表合并算法

这篇具有很好参考价值的文章主要介绍了数据结构:两个顺序表合并算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.问题描述

        将a,b两个有序顺序表进行合并,放在c顺序表当中,并且要保证顺序表c仍然有序。

2.解题思路

        因为a,b两个顺序表是有序的,所有可以从前往后一起查找a,b当中最小的一个数值,放入到c中。

        如果遍历到最后,a遍历完了,b没有遍历完,就把b剩下的放入c中;反之,b遍a没有遍历完,就把a剩下的放入c中。文章来源地址https://www.toymoban.com/news/detail-716995.html

3.实现代码

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100

typedef int ElemType;

typedef struct {    //顺序表的结构
	ElemType *data;
	int length;
	int listsize;
}List;

int InitList(List *L)    //初始化顺序表
{
	L->data = (ElemType*)malloc(MAXSIZE*sizeof(ElemType));
	if(!(L->data))
		exit(0);
	L->length=0;
	L->listsize=MAXSIZE;
	return 1;
}

void CreatList(List *L)    //创建一个顺序表
{
	
	int i;
	printf("请输入测试的数据总数:\n");
	scanf("%d",&L->length);
	printf("请输入测试的数据:\n");
	for(i=0;i<L->length;i++)
		scanf("%d",&L->data[i]);
}

void Printf(List *L)    //打印顺序表中的值
{
	int i;
	if(L->length==0)
	{
		printf("顺序表为空!");
		return ;
	}
	else
		for(i=0;i<L->length;i++)
			printf("%d ",L->data[i]);
	printf("\n"); 
}

void MergeList(List *a,List *b,List *c){        //合并两个顺序表放入c中

	int i=0;
	int j=0;
	int k=0;
	int La_len=a->length;
	int Lb_len=b->length;
	c->length=a->length+b->length;
	while((i<La_len)&&(j<Lb_len)){
		if(a->data[i]<=b->data[j])    //如果a当前的值小于b
		{
			c->data[k]=a->data[i];    //c放入当前a的值
			i++;                    //a,c都往后移一位
			k++;
			
		}
		else{                        //如果a当前值大于等于b
			c->data[k]=b->data[j];       //c放入当前b的值
			j++;                          //b,c都往后移一位
			k++;

		}
	}
	while(i<La_len){            //如果b遍历完,a还没遍历完,把a剩余的全放入c中
		c->data[k]=a->data[i];
		  k++;
		  i++;
	}
	while(j<Lb_len){            //如果a遍历完,b还没遍历完,把b剩余的全放入c中
		c->data[k]=b->data[j];
		  k++;
		  j++;
	}
}
	
int main()
{
	List *L1;
	List  *L2;
	List  *L3;
	L1 = (List*) malloc(sizeof(List));
	L2 = (List*) malloc(sizeof(List));
	L3 = (List*) malloc(sizeof(List));
	InitList(L1);
	InitList(L2);
	CreatList(L1);
	CreatList(L2);
	printf("输入顺序表A:");  
	Printf(L1);
	printf("输入顺序表B:");
	Printf(L2);
	L3->data = (ElemType*)malloc(MAXSIZE*sizeof(ElemType));
	MergeList(L1,L2,L3);
	getchar();
	printf("输入顺序表C:");
	Printf(L3);
	getchar();
	return 0;
}

 

到了这里,关于数据结构:两个顺序表合并算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构与算法】二、线性表的顺序表示【硬核】

    图书表的顺序存储结构类型定义: 在调用函数的过程中,当形参为引用类型时,实参和形参占用了相同的空间 2.4.1 线性表的基本操作: 2.4.2 线性表L的初始化 2.4.3 销毁和清空线性表L 2.4.4 求线性表L的长度以及判断线性表L是否为空 2.4.5 顺序表的取值(根据位置i获取相应位置

    2023年04月26日
    浏览(48)
  • 【每日算法 && 数据结构(C++)】—— 03 | 合并两个有序数组(解题思路、流程图、代码片段)

    An inch of time is an inch of gold, but you can’t buy that inch of time with an inch of gold. An inch of time is an inch of gold, but you can\\\'t buy that inch of time with an inch of gold 给你两个有序数组,请将两个数组进行合并,并且合并后的数组也必须有序 这个题目要求将两个有序数组合并成一个有序数组。在数

    2024年02月11日
    浏览(52)
  • 数据结构2.2,将两个非递减的有序链表合并为一个非递增的有序链表,要求结果链表仍使用原来两个链表的存储空间,不占用其他的存储空间。表中允许有重复的数据。

    大概思路:1.先写出建立链表的函数(creatlist):分配头节点,尾指针置空。 2.写出插入节点的代码函数:申请一片空间存放要插入的节点,把新插入的节点置空,令指向链表的头节点的下一个指针指向该节点,在把该指针指向新插入的节点。用if函数写出当输入的指小于零时

    2024年02月05日
    浏览(44)
  • 【数据结构和算法初阶(C语言)】复杂链表(随机指针,随机链表的复制)题目详解+链表顺序表结尾

    目录  1.随机链表的复制 1.2题目描述  1.3题目分析 1.4解题: 2.顺序表和链表对比 2.1cpu高速缓存利用率 3.结语 一个长度为  n  的链表,每个节点包含一个额外增加的随机指针  random   该指针可以指向链表中的任何节点或空节点。        构造这个链表的  深拷贝 。 深拷贝

    2024年03月10日
    浏览(83)
  • 【数据结构】顺序表的学习

    前言:在之前我们学习了C语言的各种各样的语法,因此我们今天开始学习数据结构这一个模块,因此我们就从第一个部分来开始学习\\\" 顺序表 \\\"。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:数据结构 👈 💯代码仓库:卫卫周大胖的学习日记💫 💪关注博主和博主一起学

    2024年02月05日
    浏览(44)
  • 【数据结构】顺序表的定义

    🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:数据结构 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 在数据结构的世界里,顺序表是一种常见且基础的线性数据结构。它以其简洁、直观的特性,广

    2024年04月08日
    浏览(51)
  • 【(数据结构)- 顺序表的实现】

    先来看两张图片 数据结构是由“数据”和“结构”两词组合⽽来。 什么是数据? 常见的数值1、2、3、4…、教务系统里保存的用户信息(姓名、性别、年龄、学历等等)、网页里肉眼可以看到的信息(文字、图片、视频等等),这些都是数据 什么是结构? 当我们想要使用大

    2024年02月07日
    浏览(48)
  • 数据结构--顺序表的查找

    目标: GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。 代码实现 时间复杂度 O(1) 由于顺序表的各个数据元素在内存中连续存放,因此可以根据起始地址和数据元素大小立即找到第i个元素——“随机存取”特性 目标: LocateElem(Le):按值查找操作。在表L中查找具有给

    2024年02月11日
    浏览(52)
  • 【数据结构】--顺序表的实现

    什么是顺序表?顺序表(SeqList)是线性表中的一类。而线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、字符串、栈、队列... 注意:线性表在逻辑上是线性结构,也就是说是一条连续的直线。但在

    2024年04月17日
    浏览(44)
  • 数据结构:顺序表的奥秘

    🎉个人名片: 🐼作者简介: 一名乐于分享在学习道路上收获的大二在校生 🐻‍❄个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN🎉🎉🎉 🕊系列专栏:零基础学习C语言----- 数据结构的学习之路 🐓每日一句:如果没有特别幸运,那就请特别努力!🎉

    2024年03月10日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包