C 数组中的移位元素
这是基本的,但我的谷歌搜索并不能解决这个问题。我知道我必须做一些其他的事情来逐个移动数组的值,但是下面的编码为items[k]到items[infinity]提供了相同的值,所有相等的items[k]。我不明白的是,当我将k值复制到k+1插槽中时,如何保留原始k+1值C 数组中的移位元素,c,arrays,recursion,copy,C,Arrays,Recursion,Copy,这是基本的,但我的谷歌搜索并不能解决这个问题。我知道我必须做一些其他的事情来逐个移动数组的值,但是下面的编码为items[k]到items[infinity]提供了相同的值,所有相等的items[k]。我不明白的是,当我将k值复制到k+1插槽中时,如何保留原始k+1值 if ( i < numItems) //if i is inside the used boundaries of the array { for (int k = i; k < numItems; k++)
if ( i < numItems) //if i is inside the used boundaries of the array
{
for (int k = i; k < numItems; k++) //shift the array values from point i
{
double temp = 0.0;
temp = items[k];
items[k+1] = temp;
}
items[i] = value; //and insert value into i
}
if(i
它必须是递归方法吗?一个简单的选择是反向迭代数组
for(int k=numItems;k>i;k--){
项目[k]=项目[k-1];
}
选项2:
如果您想保持方法的完整性,那么也可以使用不同的temp变量
在for循环将temp初始化为之前
然后在循环中,您可以使用temp将[k+1]值存储在temp中,而不是存储[k]值。
此外,还应注意边界,以便k+1不会超过数组中的最后一个元素。您可以使用类似numItems-1的东西并在前面进行检查,以确保数组不是空的。您也可以使用memmove,它处理区域重叠
memmove(&items[k+1], &items[k], (numItems-k-1)*sizeof(double));
items[k] = value;
你能试试反转法吗 这是一个例子
// reverse array from start to end
void reverse(int a[], int start, int end)
{
int i;
int temp;
while(start++ < end--)
{
temp = a[start];
a[start] = a[end];
a[end] = temp;
}
}
// function that will rotate array by d elements
void rotateArray(int a[], int d, int n)
{
reverse(a, 0, d-1);
reverse(a, d, n-1);
reverse(a, 0, n-1);
}
//从头到尾反转数组
无效反向(整数a[],整数开始,整数结束)
{
int i;
内部温度;
while(开始+++<结束--)
{
温度=一个[开始];
a[开始]=a[结束];
a[结束]=温度;
}
}
//将数组旋转d个元素的函数
void rotatarray(int a[],int d,int n)
{
反向(a,0,d-1);
反向(a、d、n-1);
反向(a,0,n-1);
}
#包括
#包括
#包括
#包括
int main(){
int i,j=0,s;
int n,k;
int A[n];
scanf(“%d%d”、&n和&k);
如果((n>=0)和&(n=0)){
对于(i=0;i=n){
k=k-n;
}否则{
对于(j=0;jn){
s-=n;
A[j]=A[s];
}否则{
A[j]=A[s];
}
}
对于(i=0;iOf当然,在memmove
之后,您应该设置items[0]=value;
您是对的,我还更正了答案以反映问题(插入第k个位置)。您可以在此处找到关于此问题的精彩讨论:
memmove(&items[k+1], &items[k], (numItems-k-1)*sizeof(double));
items[k] = value;
// reverse array from start to end
void reverse(int a[], int start, int end)
{
int i;
int temp;
while(start++ < end--)
{
temp = a[start];
a[start] = a[end];
a[end] = temp;
}
}
// function that will rotate array by d elements
void rotateArray(int a[], int d, int n)
{
reverse(a, 0, d-1);
reverse(a, d, n-1);
reverse(a, 0, n-1);
}
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int i,j=0,s;
int n,k;
int A[n];
scanf("%d %d",&n,&k);
if(((n>=0) && (n<=100000))&&(k>=0)){
for(i=0;i<n;i++){
scanf(" %d", &A[i]);
}
if(k>=n){
k=k-n;
}else{
for(j=0;j<n;j++){
s=j+k;
if(s>n){
s-=n;
A[j]=A[s];
}else{
A[j]=A[s];
}
}
for(i=0;i<n;i++){
printf("%d ",A[i]);
}
}
}
return 0;
}