C言語による配列への要素の追加と削除
配列は要素の挿入(追加)、削除が苦手です。配列の利点は、連続的であるため、データを見つけるのが速いことです。しかし、これはデメリットの一つでもあります。連続なので、要素を挿入するときは挿入点以降のすべての要素を後方に、要素を削除するときは削除点以降のすべての要素を前方に移動させなければならないのです。
挿入アルゴリズム
# 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をよりサポートしてくれることを願っています!
関連
-
ASPでimgタグのstyle属性を削除し、srcの正規関数だけを残す。
-
ASPは、コンテンツ内のすべての画像パスSRCを正規表現で抽出するためのコードです。
-
FluentValidationを使ったルール検証のためのNET Core
-
ASPとPHPのファイル操作速度の比較
-
SELECT ドロップダウンメニューで VALUE と TEXT 値を同時に取得する ASP コード
-
ASP Baidu アクティブプッシュのコード例
-
perl による生物学的突然変異のランダムシミュレーションコード
-
Perl 変数の使い方を説明するための Perl 構文
-
Perl 構文による Perl 演算子の使用法ガイド
-
perlの尖ったブラケット演算子(<>)について
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Visual studio 2019 初心者向けサードパーティライブラリ追加チュートリアル(入門編)
-
ASPでAdodbを経由して大容量ファイルをマルチスレッドでダウンロードするためのストリーム。
-
ASPで短い日付を0から長い2つの日付に書式設定する
-
JSONデータを扱うASP実装コード
-
aspはプロジェクトの終了時刻を計算するためにWeekday関数を使用します。
-
asp は整数の mod を受け取り、小数点以下がある場合は自動的に 1 を加算します。
-
ASPでフォルダーの存在を検出し、存在しない場合は自動的に作成する方法
-
aspのドメインアクセス制限コード
-
perl スクリプティング スタディガイド - 読書メモ
-
windows perlでフラッシュ後にスクリプトが終了しないようにする方法