2012-09-28 37 views
7

Bu temeldir, ancak googling'im bunu kesmiyor. Bir dizinin değerlerini tek tek değiştirmek için başka bir şey yapmam gerektiğini biliyorum, ancak aşağıdaki kodlama bana [k] öğelerinden [sonsuzluk] tüm eşit öğeleri [k] öğelerine aynı değerleri verir. Anlamıyorum, k değerini k + 1 yuvasına kopyalarken orijinal k + 1 değerini nasıl koruyacağım.Dizideki kaydırma öğeleri

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 
} 

Yinelemeli bir yöntem mi olmalı?

cevap

5

Kolay bir seçenek ters

for (int k = numItems; k > i; k--){   
    items[k]=items[k-1]; 
} 

2. seçenekte dizi yineleme olacaktır:

o zaman da

farklı geçici değişkeni kullanabilirsiniz bozulmadan yönteminizi tutmak istiyorsanız
for döngüsü önce

double temp = items[i]; 
için temp başlatmak

ve daha sonra döngüde [k] değerini saklamak yerine [k + 1] değerini geçici olarak saklamak için kullanabilirsiniz. k + 1 dizideki son öğenin ardına gitmiyor böylece

items [k+1] = temp; 
temp = items [k+1]; 
items[k+1] = items[k]; 

Ayrıca size sınırlarını izlemelisin. Dizinin boş olmadığından emin olmak için numItems gibi bir şey kullanabilirsiniz.

17

Bölgelerin üst üste binmesini sağlayan memmove'u da kullanabilirsiniz.

memmove(&items[k+1], &items[k], (numItems-k-1)*sizeof(double)); 
items[k] = value; 
+0

, ürün [0] = value; ' –

+0

Haklısınız, ben de soruyu yansıtmak cevabını düzeltilmiş ettik (insert de k-th konumu). – Teudimundo

+0

Memove'un döngü – Nick

0

Bunun bir örneği ters yöntemini

deneyebilir miyim. `Memmove` sonra, sen` belirlesin Tabii

// 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); 
} 
0
#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; 
} 
İlgili konular