整数型配列 array とそれに入っているデータの数 n に対して,次の操作を行う二つの関数 arrayInsert と arrayDelete とを作れ。
void arrayInsert(int array[], int n, int newdata, int k) { int i; for (i = n; i > k; i--) { array[i] = array[i-1]; } array[k] = newdata; }
array[k], ..., array[n-1] までの要素にある値は、array[k+1], ..., array[n] に移す必要がある.これを次のようにしてしまうと、誤りである.
for (i = k; i < n; i++) { /* */ array[i+1] = array[i]; /* 誤り */ } /* */
これでは、 array[k] の内容を array[k+1] に移した時点で、それまでに array[k+1] にあったデータが失われてしまう.これを避けるには、 配列の内容を後ろの方から順に移せばよい.
void arrayDelete(int array[], int n, int k) { int i; for (i = k+1; i < n; i++) { array[i-1] = array[i]; } }
array[k+1], ..., array[n-1] の内容をarray[k], ..., array[n-2] に移すので、
array[i-1] = array[i]
という代入を、配列の先頭の方から行えばよい.
以上のテクニックをまとめると、次のようになる.