数组元素的左右旋转

我们定义一组数组元素,例如:1 2 3 4 5 6

右旋一位:2 3 4 5 6 1

左旋一位:6 1 2 3 4 5

如果右旋一位,我们会想到把数组元素整体右旋一位,本来的首元素放到最后一位,之后的每一位都向左移动一位。我们可以先把首元素取出标记一下tmp=arr[0],之后的每一位都向前移动一位,arr[i-]=arr[i],最后把tmp放到最后一位。

同理,右旋n位与右旋一位原理相同,不同的就是在一个循环中每旋一次,n--,直到为零。

代码:

#include <stdio.h>
void RVast(int arr[],int len,int n)
{
	int i;
	int tmp;
	while(n)
	{
	tmp=arr[0];
	for(i=1;i<len;i++)
	{
		arr[i-1]=arr[i];
	}
	arr[i-1]=tmp;
	n--;
	}
}
int main()
{
	int arr[]={1,2,3,4,5,6};
	int sz=sizeof(arr)/sizeof(arr[0]);
	int n=3;
	int i;
	RVast(arr,sz,n);
	for(i=0;i<sz;i++)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}

左旋一位或者n位原理与右旋类似,左旋一位是将整体向左旋转一位,最后一位元素会旋到首地址,将最后一位元素取出做个标记tmp=arr[len-1];它前面的每一位都向后移动一位,最后将它放到首地址上。

代码:

#include <stdio.h>
void LVest(int arr[],int len ,int i)
{
	int n=0;
	int tmp;
	while (i)
	{
	tmp=arr[len-1];
	for(n=len-1;n>0;n--)
	{
		arr[n]=arr[n-1];
	}
	arr[0]=tmp;
	i--;
	}
}
int main()
{
	int arr[]={1,2,3,4,5,6};
	int sz=sizeof(arr)/sizeof(arr[0]);
	int i=2;
	LVest(arr,sz,i);
	for(i=0;i<sz;i++)
	{
		printf("%d",arr[i]);
	}
	return 0;
}
时间: 2024-10-13 05:26:51

数组元素的左右旋转的相关文章

leetcode(2) 数组元素右移

描述:数组元素个数为n,右移k位,如12345,右移3位后是34512 解答思路:将12345全旋转得到54321 将前3位旋转34521 将后两位旋转34512 处理核心是旋转reverse(vector<int> &nums,int begin,int end) 旋转分隔点是k=k%n  (k是移动位数,n是数组长度) class Solution {public:    void reverse(vector<int>& num,int begin,int e

1008. 数组元素循环右移问题 (20)

1008. 数组元素循环右移问题 (20) 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1--AN-1)变换为(AN-M -- AN-1 A0 A1--AN-M-1)(最后M个数循环移至最前面的M个位置).如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法? 输入格式:每个输入包含一个测试用例,第1行输入N ( 1<=N<=100).M(M>=0):第2行输入N个整数,之间用空格

js删除数组元素中的指定值

js删除数组元素中的指定值:所谓删除数组元素中指定的值,就是删除具有指定的数组项,下面就通过实例代码代码介绍一下如何实现此功能.代码如下: var theArray=["蚂蚁部落",2,"青岛市南区","antzone","蚂蚁部落"]; for(var i=0;i<theArray.length;i++){ if(theArray[i]=="蚂蚁部落"){ theArray.splice(i,1);

用指针引用数组元素并打印输出

<span style="font-size:18px;">#include<stdio.h> void main() { int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int (*p)[4];//数组指针变量声明 int row,col; p=a;//指针p指向数组元素为4的数组 //打印输出数组指针p指向的数组的值 for(row=0;row<3;row++) { for(col=0;col<4;

php统计数组元素个数

count():对数组中的元素个数进行统计; sizeof():和count()具有同样的用途,这两个函数都可以返回数组元素个数.可以得到一个常规标量变量中的元素个数,如果传递给这个函数的数组是一个空数组,或者是一个没有经过设定的变量,返回的数组元素个数就是0; array_count_value():统计每个特定的值在数组$array中出现过的次数; 如: $array=array(4,5,1,2,3,1,2,1); $ac=array_count_value($array); 将创建一个名为

js删除数组元素、清空数组的简单方法

一.清空数组 var ary = [1,2,3,4]; ary.splice(0,ary.length);//清空数组 console.log(ary); // 输出 [],空数组,即被清空了 二.删除数组元素 var ary = [1,2,3,4]; ary.splice(0,1); 或 ary.splice($.inArray(2, ary), 1); 其中$.inArray(2, ary)用来查找某元素在数组中的索引位置.

数组元素循环右移及静态链表

1. 静态链表 https://github.com/BodhiXing/Data_Structure/tree/master/StaticListDemo 2. 数组元素循环右移 https://pta.patest.cn/pta/test/17/exam/4/question/262 思路:不做循环,只是换方式打印输出. 1 #include <stdio.h> 2 #include <math.h> 3 4 5 int main() { 6 int n,m,i; 7 scan

JavaScript中数组元素的线性搜索

线性搜索:将给定的数组元素一个接一个的与我们需要查找的元素进行比较. 示例:1.该示例通过prompt()函数实现用于输入需要查找的元素. 2.给定一组数组元素 3.将查询结果通过set_innerHTML()函数输出到指定页面标签内. (注:set_innerHTML()函数弥补JavaScript的innerHTML属性,JavaScript的innerHTML属性不能进行网页交互时输出.即网页交互时使用innerHTML属性JavaScript程序无响应.) <!doctype html>

【C语言】12-指向一维数组元素的指针

一.用指针指向一维数组的元素 1 // 定义一个int类型的数组 2 int a[2]; 3 4 // 定义一个int类型的指针 5 int *p; 6 7 // 让指针指向数组的第0个元素 8 p = &a[0]; 9 10 // 修改所指向元素的值 11 *p = 10; 12 13 // 打印第一个元素的值 14 printf("a[0] = %d", a[0]); 输出结果:,说明已经通过指针间接修改了数组元素的值,跟指向一个普通int类型变量是一样的. 由于数组名代表