連結リストについて

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

連結リストについて

#1

投稿記事 by I-sya » 11年前

初めまして。
最近アルゴリズムを勉強し始めた者ですが、連結リストについて質問があります。
以下のコードなのですが、

コード:

typedef struct _list{
	int value;
	struct _list* next; 
} list;
 
// node の直後に value を追加する 
void list_new(list* node, int value) {
	list* n = (list*)malloc(sizeof(list));
	n->value = value;
	n->next = node->next;
	node->next = n;
}
 
// node の直後の要素を削除する
void list_delete(list* node) {
	if(node->next == NULL) return;
	list* next = node->next;
	node->next = next->next;
	free(next);
}
 
int main(void) {
	int i; 
	list a = {-1, NULL};
	list *last = &a, *p; 
	
	for(i=0; i<10; ++i){ 
	// 値の追加 
	if(a.value == -1){ 
	a.value = i*i;
	}else{ 
		list_new(last, i*i);
		last = last->next;
	} 
} 
 
for(p = &a; p != NULL; p = p->next){ 
// 値の表示 
	printf(“%d\n”, p->value);
} 
 
while(a.next != NULL){ 
	// 後処理(値の削除) 
	list_delete(&a);
	return 0; 
}
25行目のlist *last = &a, *p; の部分が良く分からないです。
*lastは構造体のポインタで、aは24行目で作った構造体、*pも新しく作った構造体のポインタですよね?
これが*lastとイコールとはどういうことですか?

nil
記事: 428
登録日時: 12年前

Re: 連結リストについて

#2

投稿記事 by nil » 11年前

list *last = &a, *p;
これはつまり
list *last = &a;
list *p;
と同じ事です。

non
記事: 1097
登録日時: 13年前

Re: 連結リストについて

#3

投稿記事 by non » 11年前

I-sya さんが書きました:これが*lastとイコールとはどういうことですか?
=は代入のこと。

list *last = &a; は
list *last;
lasy=&a;
と分解できる。
だから、lastに構造体aのアドレスを代入している。
言い方を変えると
lastがaという構造体を指している。
non

I-sya

Re: 連結リストについて

#4

投稿記事 by I-sya » 11年前

なるほど!
list *last = &a;
list *p;
と分けて書いても良かったのですね。もう少しポインタの理解が必要なようです。
回答有難うございました。

閉鎖

“C言語何でも質問掲示板” へ戻る