動的な構造体について – プログラミング – Home

通知
すべてクリア

[解決済] 動的な構造体について

固定ページ 1 / 2

クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
Topic starter  

どうも、クリリンです。
早速ですが、質問させてください。
ファイルから約100~1000件ぐらい入っているレコードの情報を、それぞれのデータごと
に格納するには、構造体を使うのが最も有効的だと判断しているのですが、レコード数がファイ
ルによって未知数の為、動的な構造体を定義しないといけないと思っております。
その為には、どのように記述したらよろしいのでしょうか?
どうか、みなさんの知恵をお貸しください。
よろしくお願いします。


引用未解決
トピックタグ
NGA
 NGA
(@NGA)
ゲスト
結合: 23年前
投稿: 98
 

質問です。
1レコードを格納する構造体そのものが動的なのか?
それとも複数レコードを格納したいがレコード数が未知数な為、
構造体配列の配列数が動的なのか?
どちらでしょうか?


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
Topic starter  

どうも、クリリンです。
NGA さん、ありがとうございます。
質問があいまいですいません。
1レコードを格納する構造体自体は動的ではなく、
単に、レコードの数が未知数な為、構造体配列を動的にしたいのです。
どうか宜しくお願いします。


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 23年前
投稿: 448
 

「配列」にこだわるなら、malloc()やGlobalAlloc()などで任意の件数分のメモリを確保し、
足りなくなったら再確保...という感じでしょうか。
あまりよろしいやり方ではありませんけどね。

「配列」である必要がなければ、自己参照構造体にしてリスト構造にするとか。
MFCでもよければ、CArrayを使うとか。


返信引用
NGA
 NGA
(@NGA)
ゲスト
結合: 23年前
投稿: 98
 

質問です。
ファイル上における1レコードのサイズは固定長ですか?
それとも可変長ですか?


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
Topic starter  

みなさん、ご回答ありがとうございます。
ファイル上における1レコードのサイズは固定長です。


返信引用
NGA
 NGA
(@NGA)
ゲスト
結合: 23年前
投稿: 98
 

>ファイル上における1レコードのサイズは固定長です。

ファイルサイズからレコード数が計算できますよね?
格納するだけなら、構造体配列を動的に確保するのが簡単かと思います。


返信引用
ん
 ん
(@ん)
ゲスト
結合: 23年前
投稿: 81
 

自分がよくやるやり方としては、

typedef struct
{
CString a ;
CString b ;
CString c ;
}aaa_t ;

CArray<aaa_t,aaa_t> m_aaaArray ;

こんな感じです。
他の方々の回答といってることは同じですが、ご参考ってことで。


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
Topic starter  

とりあえず、ん さんのやり方を試してみたいと思います。
ところで、双方向リストを思いついたのですが、これを使用した場合、[qsort]は難しいのでし
ょうか?また、構造体内に連番用の変数を入れており、ソート終了後に連番を振りなおしたいの
ですが、やはり、双方向リストでは、処理が遅くなってしまうのでしょうか?
結論的には、固定長ファイルのデータ取得および追加、削除、更新、参照はどの方法が一番適切
なのか教えていただけないでしょうか?
よろしくお願いします。


返信引用
NGA
 NGA
(@NGA)
ゲスト
結合: 23年前
投稿: 98
 

>結論的には、固定長ファイルのデータ取得および追加、削除、更新、参照はどの方法が一番適

>なのか教えていただけないでしょうか?

ファイルサイズが固定長ならただの動的配列でもよいと思いますが、
そうでないならリスト構造にするのが無難な気がします。

>ところで、双方向リストを思いついたのですが、これを使用した場合、[qsort]は難しいので

>ょうか?

配列でないと……。


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
Topic starter  

NGA さん、いつも回答くださいまして、ありがとうございます。
やはり、双方向リストはバブルソートしかできないのでしょうか?
でも、qsortの理屈は、ポインタの入れ替えですよね?
だったら、双方向リストのqsort版を作るのでは駄目ですか?
っていうか、そうゆうのは無いのですか?
色々と質問してすいません。


返信引用
NGA
 NGA
(@NGA)
ゲスト
結合: 23年前
投稿: 98
 

>でも、qsortの理屈は、ポインタの入れ替えですよね?

ポインタの入替ではなく、要素そのものの入替です。

>クイックソートでは(昇順ソートの場合)、まず適当な値Xを選ぶ。
>その時、配列のX以下の要素数とX以上の要素の数とはなるべく同じになるようにする。
>X以下の要素を配列の前半に、X以上の要素を配列の後半に集める。
>配列の前半が要素数が2以上なら、配列の前半を再帰的にクイックソートする。
>配列の後半が要素数が2以上なら、配列の後半を再帰的にクイックソートする。
>このように配列を次々に2つにして、それぞれについてソートを行う。

だそうです。


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
Topic starter  

>ポインタの入替ではなく、要素そのものの入替です。
あ、すいません。勘違いしてました。


返信引用
NGA
 NGA
(@NGA)
ゲスト
結合: 23年前
投稿: 98
 

リストポインタの配列を作り、ポインタで参照してソートをする
クイックソートを作るというのはどうでしょう?


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
Topic starter  

>リストポインタの配列を作り、ポインタで参照してソートをする
>クイックソートを作るというのはどうでしょう?
そうです。そのことを言いたかったのですが・・・


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました