1. ホーム
  2. Web プログラミング
  3. ASP プログラミング
  4. アプリケーションのヒント

C言語による配列への要素の追加と削除

2022-01-18 04:40:19

配列は要素の挿入(追加)、削除が苦手です。配列の利点は、連続的であるため、データを見つけるのが速いことです。しかし、これはデメリットの一つでもあります。連続なので、要素を挿入するときは挿入点以降のすべての要素を後方に、要素を削除するときは削除点以降のすべての要素を前方に移動させなければならないのです。

挿入アルゴリズム

# include <stdio.h>
int main(void)
{
  int a[23] = {1, 5, 66, 8, 55, 9, 1, 32, 5, 65, 4, 8, 5, 15, 64, 156, 1564, 15, 1, 8, 9, 7, 215};
  int b[24]; // the new array after inserting the number, because another value is inserted, so the length is 24
  int Index; // the subscript of the inserted value, Index is the English word for "subscript"
  int num; // the inserted value
  int i; //loop variable
  printf("Please enter the subscript of the inserted value: ");
  scanf("%d", &Index);
  printf("Please enter the inserted value: ");
  scanf("%d", &num);
  for (i=0; i<24; ++i)
  {
    if (i < Index)
    {
      b[i] = a[i]; /* loop variable i is less than the inserted value position Index, the position of each element placed unchanged */
    }
    else if (i == Index)
    {  
      b[i] = num; //if i equals Index, assign the inserted value to the array b
    }
    else
    {
      b[i] = a[i-1]; /* Because a new element is inserted, the position of each element after the insertion position is shifted back by one */
    }
  }
  for (i=0; i<24; ++i)
  {
    printf("%d\x20", b[i]);
  }
  printf("\n");
  return 0;
}

と出力されます。
挿入した値の添え字を入力してください: 10 挿入した値を入力してください: 22
1 5 66 8 55 9 1 32 5 65 22 4 8 5 15 64 156 1564 15 1 8 9 7 215

削除アルゴリズム

# include <stdio.h>
int main(void)
{
  int a[23] = {1, 5, 66, 8, 55, 9, 1, 32, 5, 65, 4, 8, 5, 15, 64, 156, 1564, 15, 1, 8, 9, 7, 215};
  int b[22]; /* the new array to store the deleted numbers, because one value is deleted, so the length is 22*/
  int Index; //Subscript of the value to be deleted
  int i; // loop variable
  printf("Please enter the subscript of the value to be deleted: ");
  scanf("%d", &Index);
  for (i=0; i<23; ++i)
  {
    if (i < Index)
    {
      b[i] = a[i]; /* loop variable i is less than the inserted value position Index, each element stored in the position remains unchanged */
    }
    else
    {
      b[i] = a[i+1]; /* The elements after the deleted value are shifted forward by one, and the value to be deleted is directly overwritten*/
    }
  }
  for (i=0; i<22; ++i)
  {
    printf("%d\x20", b[i]); // \x20 means space
  }
  printf("\n");
  return 0;
}

と出力されます。
削除する値の添え字を入力してください。5
1 5 66 8 55 1 32 5 65 4 8 5 15 64 156 1564 15 1 8 9 7 215


37, 49, 51, 61. 配列のデータに対して、削除と挿入の操作を1回で行うプログラムを設計しなさい。

getchar()関数を使用してキーボード入力を受信する。
文字 'D' が入力されたとき、配列に存在する整数 n のキーボード入力を受け取り、配列に存在するその整数を削除します。
要件 データ削除後のソート操作にバブルメソッドやセレクションメソッドを使用しないでください。
文字'I'が入力されたとき、配列に存在しない整数mをキーボードから入力し、配列に挿入します。
要件 データ挿入後のソート操作にバブルメソッドやセレクションメソッドを使用しないでください。

入出力例です。
でソートされた配列。5, 9, 11, 16, 24, 34, 37, 49, 51, 61

実行する操作を入力してください('I'を挿入し、'D'を削除してください)。D
削除する整数を入力してください。9
削除された配列は、5、11、16、24、34、37、49、51、61です。

実行する操作を入力してください('I'を挿入、'D'を削除)。I
挿入する整数を入力してください。13
挿入された配列は、次のようになります。5, 11, 13, 16, 24, 34, 37, 49, 51, 61

#include <stdio.h>

int main()
{
 int a[10] = { 5, 9, 11, 16, 24, 34, 37, 49, 51, 61 };
 int i = 0,n=0,k=0;
 char get;
 
 for (i = 0; i < 10; i++)
  printf("%3d", a[i]);
 printf("\n");
 printf("Please enter the operation to be performed (insert 'I',delete 'D')\n");
 
 get = getchar();
 getchar();
 
 if (get=='D')
 {
  printf("Please enter the integer to delete: \n");
  n = getchar(); 
  getchar();
  n -= 48;
  for (i = 0; i < 10; i++)
  {
  if (a[i]==n)
  {
   for (; i < 10; i++)
   {
    a[i] = a[i + 1];
   }
   a[9] = 0;
   break;
  }
  }
 for (i = 0; i < 9; i++)
  printf("%3d", a[i]);
 printf("\n");
 }
 
 printf("Please enter the operation to be performed (insert 'I',delete 'D')\n");
 get = getchar();
 getchar();
 
 if (get='I')
 {
 printf("Please enter the integer to be inserted:\n");
 scanf_s("%d", &n); // note the trap, you can't use getchar(), because 13 is actually two characters, after the carriage return, n only absorbs '1', so you can only use scanf_s().
 for (i = 0; i < 10; i++)
 {
  if (a[i] < n&&n < a[i + 1])
  {
  k = i;
  for (i = 8; i > k; i--)
  {
   a[i + 1] = a[i];
  }
  a[k+1] = n;
  break;
  }
 }
 for (i = 0; i < 10; i++)
  printf("%3d", a[i]);
 }
 return 0;
}

C言語配列の追加と削除要素の実装に関するこの記事はこれで終わりです、より関連するC言語配列の追加と削除要素の内容は、BinaryDevelopの過去の記事を検索するか、以下の関連記事を引き続き閲覧してくださいBinaryDevelopをよりサポートしてくれることを願っています!