1~11を表示する線形リスト

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 1~11を表示する線形リスト

Re: 1~11を表示する線形リスト

#6

by じゃみ » 2年前

みけCATさん

ご回答ありがとうございます。前回の返信でみけCATさんの名前を間違えてしまい申し訳ないですm(_ _)m
複合リテラルというものがあるんですね、初耳でした。。。
forループで構造体の各メンバに代入する方法でなかなか i の使い方が思い浮かばなかったので大変参考になりました。
また、構造体の配列の最後の要素 Listdata[10]も if 文を使って for ループに入れてみまして・・・。

コード:

	List listdata[11];

	for(int i = 0; i < 11; i++)
	{
		if(i < 10)
		{
			listdata[i].next = &listdata[i + 1];
			listdata[i].data = 1 + i;
		}
		else
		{
			listdata[10].next = NULL;
			listdata[10].data = 1 + i;
		}
	}
上のコードでもコンパイルでき、新たな発見ができました。
ありがとうございました。

Re: 1~11を表示する線形リスト

#5

by みけCAT » 2年前

compound literal を使うといいでしょう。
また、配列の要素は十分な数確保しないといけません。
【C言語】複合リテラル【完全解説、生存期間、注意点、構造体/配列リテラル】 | MaryCore

コード:

	List listdata[11];

	for(int i = 0; i < 10; i++)
	{
		listdata[i] = (List){&listdata[i + 1], 1 + i};
	}
	listdata[10] = (List){NULL, 11};
また、メンバに対し1個ずつ代入する方法もあります。

コード:

	List listdata[11];

	for(int i = 0; i < 10; i++)
	{
		listdata[i].next = &listdata[i + 1];
		listdata[i].data = 1 + i;
	}
	listdata[10].next = NULL;
	listdata[10].data = 11;

追記:線形リストの生成を簡略化したい: 1~11を表示する線形リスト

#4

by じゃみ » 2年前

1~11を表示する線形リストにおいて
リスト生成とheadのポインタ(main(void){ から List *p; まで)を構造体の配列を使って

コード:

	List listdata[] = {
		{&listdata[1], 1},
		{&listdata[2], 2},
		{&listdata[3], 3},
		{&listdata[4], 4},
		{&listdata[5], 5},
		{&listdata[6], 6},
		{&listdata[7], 7},
		{&listdata[8], 8},
		{&listdata[9], 9},
		{&listdata[10], 10},
		{NULL, 11},
	};
	List *head = &listdata[0];
として昇順でコードを書けたのですが、
ループを使ってもっと簡略化したい場合、どのように書けばいいでしょうか?
試しに

コード:

	List listdata[10];

	for(int i = 0; i < 10; i++)
	{
		listdata[i] = {&listdata[i + 1], 1 + i};
	}
	listdata[10] = {NULL, 11};
として書くとエラーになりアイデアが思い浮かびません。
よろしくお願いします。

Re: 1~11を表示する線形リスト

#3

by じゃみ » 2年前

みけACTさん

ありがとうございます。
参考にした動画を見てみたら、ご指摘の通り p = p -> next になってましたね・・・
ケアレスミスでした、申し訳ないです。

Re: 1~11を表示する線形リスト

#2

by みけCAT » 2年前

ループ内で p の値を更新していないですね。

p -> next を、 p = p -> next とするといいでしょう。

1~11を表示する線形リスト

#1

by じゃみ » 2年前

YouTubeにある「線形リストを作る」という動画を参考にして、1~11までを表示するリストを作ったのですが
コンパイルすると先頭のデータの1がずっと表示されて処理が終わりません。
リストとして表示するにはどのようにすればいいでしょうか?

よろしくお願いします

コード:

#include <stdio.h>

typedef struct list
{
	struct list *next;
	int data;
}List;	

int main(void)
{
	List node11 = {NULL, 11};
	List node10 = {&node11, 10};
	List node9 = {&node10, 9};
	List node8 = {&node9, 8};
	List node7 = {&node8, 7};
	List node6 = {&node7, 6};
	List node5 = {&node6, 5};
	List node4 = {&node5, 4};
	List node3 = {&node4, 3};
	List node2 = {&node3, 2};
	List node1 = {&node2, 1};


	List *head = &node1;
	List *p;

	for(p = head; p != NULL; p -> next)
	{
		printf("%d ", p -> data);
	}
	return 0;
}

ページトップ