2012-09-28 13 views
7

में शिफ्ट तत्व यह प्राथमिक है, लेकिन मेरा गुगल सिर्फ इसे काट नहीं देता है। मुझे पता है कि मुझे एक सरणी के मूल्यों को एक-एक करके स्थानांतरित करने के लिए कुछ और करना है, लेकिन नीचे कोडिंग मुझे आइटम [के] वस्तुओं [अनंत] वस्तुओं के समान मूल्यों [के] के समान मूल्य देता है। मुझे समझ में नहीं आता कि मूल के + 1 मान को कैसे संरक्षित किया जाए, जबकि मैं के मान को के + 1 स्लॉट में कॉपी करता हूं।सरणी

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 
} 

क्या यह एक पुनरावर्ती विधि होनी चाहिए?

उत्तर

5

एक आसान विकल्प रिवर्स

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

विकल्प 2 में सरणी के माध्यम से पुनरावृति करने के लिए होगा:

आप अपने विधि बनाए रखने के लिए तो आप भी अलग अस्थायी चर का उपयोग कर सकते हैं

चाहते हैं

पाश के लिए अपने पहले

double temp = items[i]; 
को अस्थायी प्रारंभ

और फिर लूप में आप [k] मान को संग्रहीत करने के बजाय temp में [k + 1] मान संग्रहीत करने के लिए temp का उपयोग कर सकते हैं।

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

भी आप अपनी सीमाओं ताकि k + 1 सरणी में अंतिम तत्व के नहीं जा रहा है देखना चाहिए। आप यह सुनिश्चित करने के लिए कि सरणी खाली नहीं है, आप पहले चेक के साथ numItems - 1 जैसे कुछ का उपयोग कर सकते हैं।

17

आप मेममोव का भी उपयोग कर सकते हैं, जो क्षेत्रों के ओवरलैप को संभालता है।

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

, 'memmove' के बाद, आप स्थापित करना चाहिए' आइटम [0] = मूल्य; ' –

+0

आप ठीक कह रहे हैं, और मैं भी इस सवाल का जवाब सही कर लेने पर सवाल प्रतिबिंबित करने के लिए (डालने पर के-वें स्थान)। – Teudimundo

+0

मुझे आश्चर्य है कि अगर memmove चक्र – Nick

0

आप उलट विधि का प्रयास कर सकते हैं

इस एक उदाहरण है।

// 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; 
} 
बेशक