2007年7月24日火曜日

1組のデータを読み込みメモリ上に展開する

* 引数で、メンバにセットする、ID, 名前、生年月日(年、月、日)を渡す。
* crPersonal関数を使ってPersonal構造体の領域を確保し、メンバを初期化する。
* メンバでポインタ変数の場合は、メモリ確保。Personal構造体は、メンバnameがポインタであるため、名前を保存するために必要な領域を確保し、その領域の場所をセットする。
* 1つ目のデータの場合には、リストの先頭topにセットする。
* 1つ目のデータでない場合は、最後に追加する。

int addPersonal(int id, char *name, int y, int m, int d)
{
Personal *ip = crPersonal();
if ((Personal *)NULL == ip) {
return 1;
}

ip->id = id;
ip->name = (char *)malloc(strlen(name)+1);
strcpy(ip->name, name);
ip->birthday_y = y;
ip->birthday_m = m;
ip->birthday_d = d;

ip->next = (Personal *)NULL;

if ( top == (Personal *)NULL ) {
top = ip;
} else {
Personal *cp;
for ( cp = top; cp != (Personal *)NULL; cp = cp->next ) {
if ( cp->next == (Personal *)NULL ) {
cp->next = ip;
break;
}
}
}

return 0;
}

※あくまでも学習用なので冗長な処理を書いています。毎回、先頭から最後の要素を検索しているのは無駄なので、本来であれば、最後に登録した要素のアドレスをグローバルに保存しておくことで、一発で追加することができます。


1つ目のデータを読み込んだイメージ


2つ目のデータを読み込んだイメージ

0 件のコメント: