/* 連結リストを表示する */
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
} NODE, *Nodep;
void displist(Nodep fp);
Nodep first_p; /* 先頭ノードを指すポインタ */
main()
{
/* [1, 5, 9] というリストを作成 */
first_p = (Nodep)malloc(sizeof(NODE));
first_p->data = 1;
first_p->next = (Nodep)malloc(sizeof(NODE));
first_p->next->data = 5;
first_p->next->next = (Nodep)malloc(sizeof(NODE));
first_p->next->next->data = 9;
first_p->next->next->next = NULL;
displist(first_p);
}
void displist(Nodep fp)
{
printf("List");
if( fp == NULL )
{
printf(" is empty\n");
return;
}
for( ; fp != NULL; fp = fp->next )
{
printf("%5d", fp->data );
}
printf("\n");
}
/* end of llist1.c */
|
|
/* 連結リストを表示する */
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
} NODE, *Nodep;
void displist(Nodep fp);
NODE first; /* 先頭ノードを指すポインタを含むノード */
main()
{
/* [1, 5, 9] というリストを作成 */
first.next = (Nodep)malloc(sizeof(NODE));
first.next->data = 1;
first.next->next = (Nodep)malloc(sizeof(NODE));
first.next->next->data = 5;
first.next->next->next = (Nodep)malloc(sizeof(NODE));
first.next->next->next->data = 9;
first.next->next->next->next = NULL;
displist(&first);
}
void displist(Nodep fp)
{
printf("List");
if( fp->next == NULL )
{
printf(" is empty\n");
return;
}
for( fp = fp->next ; fp != NULL; fp = fp->next )
{
printf("%5d", fp->data );
}
printf("\n");
}
/* end of llist2.c */
|
|
ポインタをどのように付け替えたら良いかを考えよう!
| 先頭ノードへのポインタ(first_p)版 | ヘッダノード(first)版 |
![]() |
![]() |
| Nodep *fpp; Nodep p;・・・2種類のポインタ | Nodep fp; Nodep p;・・・1種類のポインタ |
/*
Nodep first_p;
delhead(&first_p); // 関数呼び出し
*/
// リストの先頭要素を削除する関数
void delhead(Nodep *fpp)
{
Nodep p;
if( p = *fpp )
{
*fpp = p->next;
free(p);
}
}
|
/*
NODE first;
delhead(&first); // 関数呼び出し
*/
// リストの先頭要素を削除する関数
void delhead(Nodep fp)
{
Nodep p;
if( p = fp->next )
{
fp->next = p->next;
free(p);
}
}
|
/* リストの先頭要素を削除する
先頭ノードへのポインタ(first_p)版 */
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
} NODE, *Nodep;
void displist(Nodep fp);
void delhead(Nodep *fp);
Nodep first_p; /* 先頭ノードを指すポインタ */
main()
{
/* [1, 5, 9] というリストを作成 */
first_p = (Nodep)malloc(sizeof(NODE));
first_p->data = 1;
first_p->next = (Nodep)malloc(sizeof(NODE));
first_p->next->data = 5;
first_p->next->next = (Nodep)malloc(sizeof(NODE));
first_p->next->next->data = 9;
first_p->next->next->next = NULL;
displist(first_p);
delhead(&first_p);
/* [5, 9] というリストになっているはず */
displist(first_p);
delhead(&first_p);
/* [9] というリストになっているはず */
displist(first_p);
delhead(&first_p);
/* empty リストになっているはず */
displist(first_p);
delhead(&first_p);
/* empty リストのままのはず */
displist(first_p);
}
void displist(Nodep fp)
{
printf("List");
if( fp == NULL )
{
printf(" is empty\n");
return;
}
for( ; fp != NULL; fp = fp->next )
{
printf("%5d", fp->data );
}
printf("\n");
}
void delhead(Nodep *fpp)
{
Nodep p;
if( p = *fpp )
{
*fpp = p->next;
free(p);
}
}
/* end of llist3.c */
|
|
/* リストの先頭要素を削除する ヘッダノード(first)版 */ #include |
|