リスト構造にしたいのですがどうすればいいでしょうか。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct toy
{
char name[10];
int number;
struct toy next;
};
/*プロトタイプ宣言*/
void omocha_toy(struct toy *x);
int main( void )
{
struct toy *x;
if((x =(struct toy *)malloc(sizeof(struct toy))) == NULL)
{
fprintf(stderr,"エラー\n");
exit(1);
}
sprintf("x -> name,"Osarusan");
x->score = 12;
omocha_toy(x);
return 0;
}
void omocha_toy(struct toy *x)
}
printf("%s",x->name);
printf("%d\n",x->number);
}
このプログラムで2つ目3つ目をリスト構造を使って作りたいんです。
お願いします。
No.3ベストアンサー
- 回答日時:
コードのコピペミスだったようで。
自己参照構造体はできたけど、どうやってリスト構造にするのか解らない…ということでしょうか?
検索すれば出てくると思うんですが……
/*プロトタイプ宣言*/
struct toy *add_toy(struct toy *x, char *name, int num);
struct toy *add_toy(struct toy *x, char *name, int num)
{
struct toy *add = (struct toy *)malloc(sizeof(struct toy));
if(add != NULL) {
add->next = NULL;
strcpy(add->name, name);
add->number = num;
x->next = add;
}
return add;
}
って感じでしょうか。
コールされると「現在指している」もの(第1引数で渡されたモノ)の次に追加します。
失敗した場合はNULLを返却…です。
いろいろエラー処理省いていますが。(nameのバッファオーバラン考慮していないとか、x->nextが入っていた場合に問答無用で上書きするとか)
3つめ以降に追加する場合は呼び出し元の責任で処理して下さい。
# x->next = add; の前に工夫すれば、最後尾に追加…というのも可能です。
# 何度も呼ぶ場合に無駄が多くなりますが。
ちなみに、リスト構造では先端(終端)の場合、その先を指すポインタはNULLとするのがたいていの場合で取られる手段ですので…
x =(struct toy *)malloc(sizeof(struct toy))
でmalloc()に成功したらポインタはNULLにしておくべきかと。
No.2
- 回答日時:
コンパイラは通りましたか?
取りあえず、
struct toy next;
を
struct toy *next;
にした方がよいと思われます。
No.1
- 回答日時:
>struct toy
>{
>char name[10];
>int number;
>struct toy next;
>};
コレでは構造体の入れ子では?
というか、コンパイルエラーにならないのでしょうか?
sizeof(struct toy)はいくつになるのでしょうか???
リスト構造を作る場合、自己参照構造体になるかと。
http://www.google.co.jp/search?hl=ja&source=hp&q …
http://www.booran.com/menu/c/algo_list.html
とか。
ちなみに、繋ぎ替えや項目をたぐり易かったりするので、私は双方向リストを好んで使用します。
ポインタ2つ操作する必要があるので、場合によっては面倒ですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 リスト
-
リスト構造
-
2÷3などの余りについて
-
C言語で%を使わない余りの出し方
-
比較回数と交換回数表示について
-
信頼区間の1.96や1.65ってどこ...
-
nCmの関数
-
複数桁10進数の*桁目だけを抽出...
-
Notepad++の関数リスト表示の変...
-
C言語のfor文です。 繰り返しの...
-
break文でループを一気に抜ける...
-
正負を反転させて出力するプロ...
-
#define _CRT_SECURE_NO_WARNIN...
-
error C2143: 構文エラー : ';'...
-
プログラムでの数字につく”f”の...
-
既定のコンストラクタがありま...
-
hit&bolwのプログラミングがで...
-
C言語 配列と関数の練習問題
-
c言語
-
std::set<int> で、ある値が何...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
InvokeMemberメソッドとは何を...
-
構造体のリスト削除
-
C# ref引数のnull判定
-
双方向リストのバブルソートに...
-
コールバック関数はnullになら...
-
今度はdoubly linked listの問...
-
C♯ 2段構造のcontextMenuStrip?
-
空のカラムを挿入
-
C#でのEXCEL出力に関して
-
「Nz」は何て読むのでしょうか?
-
ソートを自作
-
ばばぬきプログラムについて
-
バブルソートを使って文字列を...
-
ポインタを使った連結リストへ...
-
C言語 dequeue
-
API 録音 MCI
-
マイナスからプラスへ転じた時...
-
Enterキーを押されたら次の処理...
-
2÷3などの余りについて
-
C言語での引数の省略方法
おすすめ情報