38. 連結リストの操作:初期化後
struct CELL {
struct CELL *next;
int value;
} header;
insert(int a)
{
struct CELL *p, *q, *new;
p = header.next;
q = &header:
while(p != NULL && a > p->value) {
q = p;
p = p->next;
}
}
- 2 5 7 12
q p
header
始めのセルは連結リスト自身を表すための
ダミーで、次のセルへのポインタはあるが、
値は入らない。
39. 連結リストの操作:a=4(途中)
- 2 5 7 12
q p
4
new
if((new = malloc(sizeof(struct CELL))) = NULL)
fatal_error(メモリがたりない)
① new->next = p;
② new->value = a;
③ q->next = new;
①
③ ②
struct CELL {
struct CELL *next;
int value;
} header;
境界条件ではない
40. 連結リストの操作:a = 1(先頭)
- 2 5 7 12
q p
1
new
if((new = malloc(sizeof(struct CELL))) = NULL)
fatal_error(メモリがたりない)
① new->next = p;
② new->value = a;
③ q->next = new;
①
③
②
struct CELL {
struct CELL *next;
int value;
} header; 境界条件1
41. 連結リストの操作:a=15(末尾)
- 2 5 7 12
q
p = NULL
15
new
if((new = malloc(sizeof(struct CELL))) = NULL)
fatal_error(メモリがたりない)
① new->next = p;
② new->value = a;
③ q->next = new;
③
②
①
struct CELL {
struct CELL *next;
int value;
} header;
境界条件2
42. 連結リストの操作:空リストに2を挿入
-
q p=NULL
- 2
q p=NULL
new
if((new = malloc(sizeof(struct CELL))) = NULL)
fatal_error(メモリがたりない)
① new->next = p;
② new->value = a;
③ q->next = new;
②
③
①
struct CELL {
struct CELL *next;
int value;
} header; 境界条件3