已知两个线性升序表LA,LB,然后合并两个表为LC,并保持升序

将La和Lb合并为一个新的线性表Lc的几种结构的归纳 在数据结构线性表一章中,提出了三种方法。1、总的方法,并没有涉及具体的存储类型。此处给出了具体的思想。void MergeList(List La, List Lb, List &Lc) { //已知线性表La和Lb中的数据元素按值非递减排列 //归并La和Lb得到新的线性表Lc,Lc的数据元素也按值非递减排列 InitList(Lc); int ai, bj; int 阅读详情

问题一:若两表都是顺序表,则可以运用归并排序的思想直接合并两张表,从而达到时间复杂度最小。

核心代码如下:

Conlink Conbine(Conlink LA,Conlink LB,Conlink LC)
{
	cout<<"conbine:";
	int i=0,j=0,k=0;
	while(i<=LA.last&&j<=LB.last)      //table A and B is not empty
	{
		if(LA.date[i]<LB.date[j])       //while is the little,which insert into the C
		{
			LC.date[k]=LA.date[i];
			i++;
			k++;
		}
		else
		{
			LC.date[k]=LB.date[j];
			j++;
			k++;
		}
	}
	
	while(i<=LA.last)                 //to save the rest of the List A
	{
		LC.date[k]=LA.date[i];
		i++;
		k++;
	}
	
	while(j<LB.last)                 //to save the rest of the List B
	{
		LC.date[k]=LB.date[j];
		k++;
		j++;
	}
	LC.last=k-1;                     //to check the last
	return LC;
}

上述核心算法即运用已经有序这一个条件,来合并两表,比一个一个数遍历起来时间复杂度小得多。

完整代码如下:

//creat two Sequential table and conbine the two to the third 
#include<iostream> 
using namespace std;
typedef int elemtype;                                  //the true type you can define it yourself
#define MAXSIZE 100                                    //you can define it yourself
typedef struct ConLinklist
{
	elemtype date[MAXSIZE];
	int last;
}Conlink;

Conlink Creat(Conlink L,int n);                             //creat new Sequential table
Conlink Conbine(Conlink LA,Conlink LB,Conlink LC);    //conbine the two table
void Output(Conlink L);                               //to display the two

Conlink Creat(Conlink L)
{
	int i=0,n;
	L.last=-1;
	cout<<"please input the number of the figure in the list:";
	cin>>n;
	cout<<endl;
	for(i=0;i<n;i++)
	{
		if(L.last<MAXSIZE)
		{
     	L.last++; 
	    cout<<"please input the  "<<i+1<<"  figure:";
	    cin>>L.date[L.last];
        }
    }
    return L;
}

Conlink Conbine(Conlink LA,Conlink LB,Conlink LC)
{
	cout<<"conbine:";
	int i=0,j=0,k=0;
	while(i<=LA.last&&j<=LB.last)      //table A and B is not empty
	{
		if(LA.date[i]<LB.date[j])       //while is the little,which insert into the C
		{
			LC.date[k]=LA.date[i];
			i++;
			k++;
		}
		else
		{
			LC.date[k]=LB.date[j];
			j++;
			k++;
		}
	}
	
	while(i<=LA.last)                 //to save the rest of the List A
	{
		LC.date[k]=LA.date[i];
		i++;
		k++;
	}
	
	while(j<LB.last)                 //to save the rest of the List B
	{
		LC.date[k]=LB.date[j];
		k++;
		j++;
	}
	LC.last=k-1;                     //to check the last
	return LC;
}
	
	void Output(Conlink L)
	{
		int i=0;
		cout<<"the result is:"<<endl;
		for(i=0;i<=L.last;i++)
		cout<<L.date[i]<<" ";
		cout<<endl;
	}
	
int main()
{
	Conlink LA,LB,LC;
	LA=Creat(LA);
	Output(LA);
	LB=Creat(LB);
	Output(LB);
	LC=Conbine(LA,LB,LC);
	Output(LC);
	return 0;
}

问题二:若两表为链表,该如何合并:

算法思想:采用归并排序逆向用的最基本的思想来合并,从而保证有序而且时间复杂度为O(m+n)。

具体代码如下:

//to conbine two Linklist to be one
#include<iostream>
using namespace std;
typedef int elemtype;
typedef struct ConLinklist
{
	elemtype date;
	struct ConLinklist *next;
}*Linklist,Conlink;

Linklist Creat(Linklist L);    //creat a new Linklist
Linklist Conbine(Linklist LA,Linklist LB);  // conbine two Linklist
void Output(Linklist LD);         //to show the linklist

//the function to creat two Linklist
Linklist Creat(Linklist L,int n)
{
	Linklist p,r;
	int i;
	L=new(Conlink);
	L->next=NULL;
	p=L;
	for(i=0;i<n;i++)
	{
		r = new(Conlink);
		p->next=r;
		p=r;
		cout<<"please input the "<<i+1<<"  number:";
		cin>>p->date;
	}
	p->next=NULL;
	return L;
}


//the function to link the two list
Linklist Conbine(Linklist LA,Linklist LB,Linklist LC)
{
    Linklist p,q,r;
	p=LA->next;
	q=LB->next;
	r=LC;
	cout<<"Conbine:";
	while(p!=NULL&&q!=NULL)
		if(p->date<q->date)
		{
		 r->next=p;
		 r=p;
	     p=p->next;
		}

	    else
		{
		r->next=q;
		r=q;
		q=q->next;
		}

	while(p)
	{
		r->next=p;
		r=p;
		p=p->next;
	}

	while(q)
	{
        r->next=q;
		r=q;
		q=q->next;
	}

	r->next=NULL;
	return LC;

}

//the function to display the list
void Output(Linklist LD)
{
	Linklist p;
	p=LD->next;
	while(p)
	{
	cout<<p->date<<" ";
	p=p->next;
	}
	cout<<endl;
}

//main
int main()
{
	Linklist LA=NULL,LB=NULL,LC;
	LC=new(Conlink);
	LA=Creat(LA,6);
	Output(LA);
	LB=Creat(LB,3);
	Output(LB);
	LC=Conbine(LA,LB,LC);
	Output(LC);
	return 0;
}

代码计算结果为成功合并,其中核心为Conbine函数,链表的构建用的是尾插法,保证和自己输入的升序一样保持升序。

手把手教你用FPGA+AD9822搭建300DPI的CIS高速图像采集系统(附时序调试心得) 本文详细介绍了如何利用FPGA作为核心控制器,结合AD9822三通道采样保持放大器/ADC,构建一套完整的300DPI CIS高速图像采集系统。内容涵盖从CIS传感器驱动时序、AD9822寄存器配置与协同调试,到采用千兆以太网替代USB实现稳定高速数据传输的完整实战指南,并分享了关键的时序调试心得与系统集成经验。 阅读详情

相关推荐

Oracle19c SYSAUX表空间爆满?手把手教你清理SM/ADVISOR和AUDSYS占用(附完整SQL)

本文详细解析了Oracle19c中SYSAUX表空间爆满的常见原因及解决方案,重点针对SM/ADVISOR和AUDSYS组件的空间占用问题提供了完整的SQL清理脚本。通过诊断查询、空间清理和预防性维护策略,帮助DBA有效管理SYSAUX表空间,确保数据库稳定运行。

weixin_28338005的博客 236

数据结构 实验二:(线性表实验-顺序存储) 代码部分

数据结构 实验二:(线性表实验-顺序存储) 实验内容: 内容 问题描述: 编制一个能演示将两个有序表合并为一个有序表的程序。 基本要求: 已知递增有序线性表LA和LB,现将LA和LB合并到LC,LC也是递增有序的。 代码: /* 时间:2021/03/21 作者:小贾龙龙 功能:1.实现将线性表LA=(3,5,8,11) 、 LB=(2,6,8,9,11,15,20)合并到LC,其中LC也是递增有序的。 */ #include<bits/stdc++.h> const int Max

m0_47161653的博客 2063

MiniMax H3本地部署实战:ComfyUI整合包安装与提速插件验证指南

在AIGC工具链快速演进的当下,本地部署内容生成模型成为许多创作者和开发者的关注焦点。本地部署意味着数据不出本机、可按需定制工作流,还能规避云端排队与外部依赖,其核心价值在于为内容生产提供可控、私密且可编程的生成环境。ComfyUI作为模块化节点式AI绘画工具,凭借灵活的工作流编排和API接口能力,成为承载这类模型的热门平台。MiniMax H3作为支持文本、参考图等多种输入的内容生成模型,与ComfyUI结合后,既适合个人进行概念验证,也能用于团队私有化流程搭建。实际落地过程中,中文整合包显著降低了环境配

weixin_29042035的博客 294

2.2线性表LA和LB按照非递减序列排序,合并为LC,LC仍为非递减序列2

需要注意的是: *L.elem=L.elem[0] *(L.elem+i)=L.elem[i] 指针程序(线性表从L.elem[0]开始): //通过指针比较合并la、lb为lc,使得lc仍为非递减序列 #include<stdio.h> #include<malloc.h> #include<iostream> using namespace std; #d...

qq_42717239的博客 8928

金融科技数据源

数字金融开放研究平台

平平淡淡,戒急用忍,一生学闭嘴。 1758

17 指挥AI写Mamba相关模型代码,快速适配大模型场景

本文为《30天掌控AI编程:从指令到落地,手把手教你指挥AI写代码》系列第十七篇,属于第三阶段多场景实战核心内容。本篇聚焦当下大模型领域热门的**Mamba架构**,针对零基础大模型开发、无深度学习基础的使用者,拆解指挥AI生成Mamba基础模型、微调适配、推理部署代码的核心方法,覆盖Mamba基础模块搭建、简易序列建模、小样本微调、本地推理等高频场景,提供可直接复用的高质量指令模板、完整可运行代码、环境配置与避坑指南,无需精通Transformer、状态空间模型等底层原理,轻松上手Mamba大模型开发。

coreopt的博客 61

12.线性表的合并详解

线性表的合并 问题描述:假设利用两个线性表La和Lb分别表示两个集合A,B,现要求一个新的集合A=A∪B La=(7,5,3,11)Lb=(2,6,3)A=(7,5,3,11,2,6) 算法步骤:(A既是参数又是操作的结果) 依次(需要循环)取出Lb中的每个元素 在La中查找该元素如果没有插入到La表尾 这里的算法是通用的与La Lb的具体存储方式无关(不关心他们是用顺序表还是链表) 算法复杂度是两线性表表长的乘积 有序表的合并 问题描述:已知线性表La和Lb中的数据元素按值非递减有序排列,现要求

YZSS17的博客 6490

CKS-CN考试之路----04

根据上面信息我们知道,这个pod运行在default命名空间下,pod名字为cpu-77cd5ddcbf-bvb8w。可以从/etc/falco/falco_rules.yaml中获得相关内容,大概在文件的460行左右.编辑/etc/falco/falco_rules.local.yaml。7c688a8bfd69即是我们想要获得的docker id。将行为不当 Pod 的 Deployment 缩放为零副本。根据我们刚才定义的rule生成报告。访问/dev/mem 的 Pod。那么如果考试记不住怎么办?

Q先生 602

顺序表合并(C语言实现)

两个顺序表LA,LB 合并生成一个升序表LC。 算法:将LA中的元素1与LB中的元素1比较,若LA1>LB1,则LB1移入LC1,然后将LA1与LB2比较,将较小的数填入LC2,依次进行,直至全部元素比较完毕。 #include<stdio.h> #include<stdlib.h> //要使用的malloc()函数定义在这个头文件中 ,动态分配内存 #include<process.h> //系统库文件, #define MAX 100 typ

LSP522的博客 6154

使用SIMD思想进行memcpy的优化

arm64平台的memcpy的性能优化,相比C库提升30~40%,SIMD优化思路

zhaoxin1989的博客 1万+

数字信号处理(一):Xilinx Vivado DDS IP核设计实例(文末附源码)

前言 在数字信号处理时我们经常会用到数字变频,包数字下变频(DDC)和数字上变频(DUC),这其中会用到Xilinx公司的DDS IP核或者Altera公司的NCO IP核来产生本振频率,以现数字域信号频谱搬移。本文我们通过例化Xilinx公司的DDS IP核来产生混频器本振输入频率,并给出Modelsim仿真测试结果。 1、Xilinx DDS IP简介 Xilinx公司的DDS IP核使用AX...

FPGA_Designer 1万+

数据结构【线性表(二)链表】项目之合并有序表

/*   *数据结构【线性表(二)链表】项目之合并有序表   *Copyright (c) 2015 烟台大学计算机与控制工程学院   *All right reserved.   *文件名称:danlianbiao.cpp   *标题:数据结构【线性表(二)链表】项目之合并有序表   *分类:合并有序表   *writer:罗海员   *date:2015年10月05日   *

Sailor_luo的博客 844

Ardupilot EKF3核心算法《开篇》

Ardupilot EKF3核心算法本专栏重点,透彻,详细的分析了ardupilot的EKF3,保证是你看到的最完美的EKF3资料,相信你的选择不会错误。网上EKF资料真是太多,说真的没有一篇讲解好的。!!

陌城烟雨 1413

有序表合并问题的解决方法

线性表结合算法的一般顺序

qq_64177152的博客 913

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

算法编程题精选3

3.已知线性表LA和LB分别采用顺序存储,且表中元素都按照升序排序,设计算法实现将LA和LB合并,合并后的线性表仍按照升序排序。

weixin_52589218的博客 177

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数据结构算法题

//获取叶子节点个数 int getLevers(BiTree p) { int leftCount;rightCount; if(p == null) return 0; else if(p->lchild == null && p->rchild == null) rururn 1; else return getLevers(p->lchild) + getLevers(p->rchild); } 设计算法,从顺序表L中删除所有值为x的元素。要求算法的时间复杂度

flysnownet的博客 1932

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C语言实现动态顺序表:从核心原理到秋招手撕代码实战

数据结构是计算机科学的基石,它定义了数据在计算机中的组织、存储和管理方式。线性表作为最基本的数据结构之一,其顺序表示(顺序表)通过连续的内存单元存储元素,实现了高效的随机访问。理解其连续存储的核心原理,是掌握内存管理和算法复杂度分析的关键。在工程实践中,动态顺序表通过malloc、realloc等机制灵活管理内存,解决了静态分配容量固定的痛点,体现了C语言对内存的精细控制能力。这种数据结构广泛应用于需要快速按索引访问的场景,如数组缓存、动态数组实现等。本文聚焦于**动态顺序表**的C语言实现,深入剖析了**

weixin_30667649的博客 403

实验报告 线性表的基本操作及应用 选做内容 归并La和Lb为Lc

选作内容: 两个线性表合并算法的实现。已知顺序表LA和LB中的数据元素按值非递减有序排列,现要将LA和LB归并为一个新的顺序表LC,且LC中的数据元素仍按值非递减有序排序。例如:LA=(3,5,8,11) LB=(2,6,9,15,20)。 实验代码: #include<stdio.h> #include<stdlib.h> #define OK 1 #define FALSE 0 typedef int Status; typedef float ElemType; typede

绿色水杯 1817

C++ 实现顺序表合并(数据结构)

C++ 实现顺序表合并(数据结构)

m0_54158068的博客 3557

线性表La和线性表Lb合并

线性表La与Lb合并。 输入:两个线性表La和Lb. 过程:循环集合B中的每个元素,判断当前元素是否存在A中,若不存在,则插入到A中即可。 输出:合并后的线性表La。 代码如下 #include using namespace std; #define MAXSIZE 100 #define ElemType int typedef struct { ElemType Data[

HAN Kai 7682

数据结构 合并两个有序表

//有两个 有序表 LA和 LB,将它们合并成一个有序表 LC,要求 LC 也是有序 //链表 #include <stdio.h> #include <stdlib.h> typedef int ElementType; typedef struct Node *PtrToNode; struct Node { ElementType Data; PtrToNode Next; }; typedef PtrToNode List; List Create

qq_52801315的博客 1821

实现La和Lb的交集、并集、差集,并把结果存入Lc中(数据结构)

需要用到线性表的12个基本操作

j2013210855的专栏 4267

将两个递增的有序链表La和Lb合并为一个递增的有序链表Lc

将两个递增的有序链表La和Lb合并为一个递增的有序链表Lc

weixin_46899589的博客 3672

c语言两个线性表la lb,线性表La和线性表Lb合并

线性表La与Lb合并。输入:两个线性表La和Lb.过程:循环集合B中的每个元素,判断当前元素是否存在A中,若不存在,则插入到A中即可。输出:合并后的线性表La。代码如下#includeusing namespace std;#define MAXSIZE 100#define ElemType inttypedef struct{ElemType Data[MAXSIZE];int length;...

weixin_32752827的博客 3995

有序链表的合并问题

题目:两个递增的有序单链表la和lb,编程把la和lb合并成新的递增的有序单链表lc; 分析:无论你解决什么问题,记住一句话,一定要省题,有时在解决问题时,没有省题,最后怎么也解决不出来,后来才发现题目都没有看清楚。 所以省题也是十分重要。 光是文字,我们都不是很喜欢,所以我找了一些图片帮助你们去理解。 我之前在想两个有序链表合并时,我就想到集合的并集,以至于我在合并链表把相同的节点删除了就剩下一个。但是我发现这个想法是错误的,这里的合并是包含所有元素。 这个题目...

weixin_63311772的博客 1395

将la,lb链表合并成lc。

#include #include typedef struct list  { int data; struct list *next; }node,*link; //============================ //创建链表 //============================ void  create(link &l, int n) { i

小白菜 6014
下一篇: Leetcode:14. Longest Common Prefix
acgl
博客等级 码龄10年 19粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值