ある名簿のリストを作りました。
以下のような構造体で、
typedef struct meibo{
char name[10];
int old;
struct meibo *next;
}MEIBO;
これを、ポインタp->next->nameをたどっていって、名前が辞書順になるようにリストを作ったのですが、
これを年齢順にソートして表示させたいんです。
どんな方法があるんでしょうか?
一旦すべてを配列に格納して、クイックソート…とかも考えたのですが、すごく領域をとるし、なんか2度手間(最初から配列に順に格納していけばよかったなぁ・・・と。
それでもやっぱり最初から名列順にするときから配列に入れておくほうがいいのでしょうか?
教えてください。
(最初から年齢を比較してリストを作れば・・ってのはなしで、名列順のリストが存在するものとしてください。)
No.4ベストアンサー
- 回答日時:
ソートの方法は既に回答があるので、配列とリストについて。
データ構造として配列を選ぶか,リストを選ぶかは使い方とか目的等によります。
リストを選んだ方がいいケースは、例えばデータの追加、削除が頻繁に発生しデータ数が多い場合です。
具体的に言えば10万のデータがあって、先頭でデータの追加,削除が発生し、データが配列の場合は、99999のデータの移動が生じます。
リストの場合はリンクのつけかえだけですので、
データの移動は発生しません。
この質問の場合は現状ではどちらがいいかはわかりません。
ところで、この場合はクイックソートは向かない気がします。
というのはクイックソートでは比較の結果が同じ場合,
順番が保存されないからです。
例えば,
...
佐藤、10才
鈴木、10才
田中、10才
...
というデータがあった場合、年齢でソートして名前の順番が変わることがあります。
No.3
- 回答日時:
なにもひとつの構造体でひとつのリスト構造しか作れないわけではないのですから、メンバにもうひとつポインタを追加して、年齢順リストを作ってあげる、という方法は如何でしょうか。
No.2
- 回答日時:
MEIBOのポインタ配列をつくり、そこに各要素のポインタを格納して、年齢順に並べ替える方法はどうでしょうか?元々のリスト構造を壊すことなく、年齢順に要素を取得することができるようになります。
MEIBO *tmpList["要素数"]; // 要素数が可変なら動的に割り当てる
// tmpListに各要素のポインタを格納
// qsortでも何でも使ってソートする
// tmpListを参考に出力する
No.1
- 回答日時:
malloc関数でメモリを一時作業領域としてソートする方法もあります。
また何もメモリ上【だけ】で作業をする必要は無いですよ。方法としてはファイルに書き出すとか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- その他(プログラミング・Web制作) python コードについて(初学者です) 3 2023/07/20 14:44
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) エクセルについて教えてください。 2 2023/06/14 11:11
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
C# DataGridView のヘッダーセ...
-
リスト構造のソートで悩んでま...
-
excel VBA の条件をつけての列...
-
n個の要素で出来る順列組み合...
-
ファイル名「1.jpg ~10.jpg~...
-
C言語でリストのソートについて...
-
あるディレクトリ内のファイル...
-
配列の問題
-
DataGridViewの複数列を連動し...
-
n番目に大きい数を求めるアル...
-
線形リストのソートについて
-
VB.NET DataGridView.Sortについて
-
数字文字列のソート方法
-
列のどこをクリックしてもソー...
-
昇順ソート
-
mysqlで日本語の並び替え
-
2次元配列を複数項目でソートし...
-
C# DataTableの行をソートしてD...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
C言語・要素除去
-
C# DataGridView のヘッダーセ...
-
Excelですべての組合せ(重複組...
-
VBA基本構文の作り方 2列の...
-
なぜ?counterintuitive
-
ファイル名「1.jpg ~10.jpg~...
-
リスト構造のソートで悩んでま...
-
配列の問題
-
C# DataTableの行をソートしてD...
-
あるディレクトリ内のファイル...
-
excel VBA の条件をつけての列...
-
10個の整数を入力して小さい順...
-
文字列をソートする方法
-
excel VBA リストビューの行...
-
DataGridViewの複数列を連動し...
-
2次元配列を複数項目でソートし...
-
csvファイル内にてソートす...
-
n番目に大きい数を求めるアル...
おすすめ情報