A.5顺序表练习——元素合并倒置

题目

给定两个递增有序的顺序表,将他们传给另一个顺序表并递减有序** 

代码


// An highlighted block
var foo = 'bar';#include<stdio.h>
#define Max 100
//给定两个递增有序的顺序表,将他们传给另一个顺序表并递减有序 
typedef struct{
	int data[Max];
	int length;
}node;
void Creat(node &L)									//创建顺序表
{
	int n;
	printf("共输入元素个数:");
	scanf("%d",&n);
	int i;
	for(i=0;i<n;i++){
	scanf("%d",&L.data[i]);
	}
	L.length =n;
} 
int deliver(node L,node L1,node &L2)				//传递操作 
{
	int i=0,j=0,k=0;
	if(L.length <= 0 ||L1.length <= 0) return 0;
	if(L.length <= 0 && L1.length > 0){				//如果L无元素L1有元素则把L1复制到L2中 
		for(i=0;i<L1.length ;i++){
			L2.data[i]=L1.data[i];
		}
		L2.length =L1.length ;
		return 1;
	} 
	if(L1.length <= 0 && L.length > 0){				//如果L1无元素L有元素则把L复制到L2中 
		for(i=0;i<L.length ;i++){
			L2.data[i]=L.data[i];
		}
		L2.length =L.length ;
		return 1;
	} 
	while(i<L.length && j<L1.length ){				//用两个变量的移动和比较,将数组传入L2中,并构成递增有序 
		if(L.data[i]<L1.data[j]){					//L小 复制给L2 
			L2.data[k++]=L.data[i++];
			continue;
		}if(L.data[i]>L1.data[j]){					//L1小 复制给L2 
			L2.data[k++]=L1.data[j++];
			continue;
		}if(L.data[i] == L1.data[j]){				//L等于L1,均复制给L2 
			L2.data[k++]=L.data[i++];
			L2.data[k++]=L1.data[j++];
			continue;
		}
	} 
	if(i == L.length ){								//若L先传完,则将L1剩余部分传入L2中(本身为递增,直接传入即可) 
		while(j<L1.length ){
			L2.data[k++]=L1.data[j++];
		}
		L2.length =L.length +L1.length ;
		return 1;
	}
	if(j == L1.length ){							//若L1先传完,则将L剩余部分传入L2中 
		while(i<L.length ){
			L2.data[k++]=L.data[i++];
		}
		L2.length =L.length +L1.length ;
		return 1;
	}
}
node  inversion(node L2)							//倒置,将L2中递增倒置成L3中的递减,并返回L3 
{
	int i;
	node L3;
	L3.length =L2.length ;
	for(i=0;i<L2.length ;i++)
	{
		L3.data[L2.length-i-1]=L2.data[i];
	}
	return L3;
}
int Dis(node L)										//打印
{
	if(L.length <=0) return 0;
	int i=0;
	for(i=0;i<L.length ;i++){
	printf("%d ",L.data[i]);
	}
	printf("\n");
	return 1;
}
int main()
{
	node L,L1,L2,L3;
	Creat(L);
	Creat(L1);
	deliver(L,L1,L2);
	L3=inversion(L2);
	Dis(L3); 
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值