数组中数据块移动(国二模拟题)

数组中数据块移动(C语言国二模拟题)

请编写程序,实现功能:移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。
例如,一维数组中的原始内容为:11,22,33,44,15,66,78,18,90,110;p的值为3。移动后,一维数组中的内容应为: 15,66,78,18,90,110,11,22,33,44。

方法1:辅助空间法

(1)分配与原始空间大小相同的辅助空间;
(2)将下标0-p的数据块先保存在辅助空间中;
(3)将原始空间中余下的数据块前移;
(4)将辅助空间中p+1个数据接到原始空间的后面。

#include <stdio.h>
#define N 10
int main()
{
	int a[N]={1,2,3,4,5,6,7,8,9,10},p=3;
	int b[N],i;				//(1)辅助空间b 
	for(i=0;i<=p;i++)		//(2)备份p+1
		b[i]=a[i];				
	for(i=0;i<N-p-1;i++)	//(3)n-p-1个前移 
		a[i]=a[p+i+1];		
	//for(i=p+1;i<N;i++)a[i-p-1]=a[i];
	for(i=0;i<=p;i++)		//(4)接上 p+1
			a[N-p+i-1]=b[i];		
	for(i=0;i<N;i++)
		printf("%d,",a[i]);
}

方法2:数据块移动法

示意图如下:
在这里插入图片描述
代码如下:

#include <stdio.h>
#define N 10
int main()
{
	int a[N]={1,2,3,4,5,6,8,8,9,10},p=3;
	int temp,i,j;
	for(j=0;j<=p;j++)		//移动p+1次	
	{
		temp=a[0];
		for(i=1;i<N;i++)	//每次移动n-1 
				a[i-1]=a[i];		
		a[N-1]=temp;
	}
	for(i=0;i<N;i++)
		printf("%d,",a[i]);		
}

结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值