• ベストアンサー

C言語で、配列の要素を削除したい

構造体からなる配列において、 データを追加/削除したいのですが、 どうしたらいいのでしょうか? 学校の課題なのですが、問題から読み取る限り リスト構造じゃなくて配列でつくるみたいなのです。。 追加データ数は限られてるので、数はだいじょうぶと 思うのですが、データを消したあと その消した部分をどうやってつめればいいですか?? また、数字を追加/削除した後に数字のならびを ソートして昇順にそろえなければいけないのですが、 バブルソート法では遅いでしょうか? (それしか習ってないのですが) 何かもっと早くできる方法があれば教えていただきたいです。 どうかよろしくお願いします!

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

> 追加データ数は限られてるので、数はだいじょうぶと > 思うのですが、データを消したあと > その消した部分をどうやってつめればいいですか?? i番目の内容を消してしまうのですから、 '配列のi番目にi+1番目の内容をコピー' '配列のi+1番目にi+2番目の内容をコピー' ...を繰り返します。 > また、数字を追加/削除した後に数字のならびを > ソートして昇順にそろえなければいけないのですが、 > バブルソート法では遅いでしょうか? 要素数とコピーの手間によりますが、 数十/数百程度であれば大した時間ではありません。 # どっちみちバブルソートしか習っていないならそれでいいのでは?

その他の回答 (1)

noname#5537
noname#5537
回答No.2

> その消した部分をどうやってつめればいいですか?? memmove とか使うとほんのちょっとだけ楽ちんかも。 > 何かもっと早くできる方法があれば教えていただきたいです。 qsort 関数とか使うと、手っ取り早く速く出来ますが、 #1 で επιστημη さんがご指摘のとおり要素数が少ないと あんまり効果ないですし(かえって遅くなるかも)、 使い方が初心者にはややこしいので手っ取り早くないかもしれません。 また、課題の性質によっては使うと怒られるかもしれないので、慎重に検討してください。 興味がおありでしたら、 クイックソート, マージソート, ヒープソート などの各種ソートアルゴリズムについて調べてみるといいでしょう。 上で挙げた3つはいずれも'速い'といわれているアルゴリズムです。(あくまで「計算量のうえでは」ですが)

asao_asao
質問者

お礼

回答ありがとうございます。 ソート法は結局バブルソートでやりました(^^; でもほかの方法も機会があれば使ってみたいと 思います。 どうもありがとうございました。

関連するQ&A

専門家に質問してみよう