* 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 件のコメント:
コメントを投稿