C,
pasted
on Dec 8:
|
#include <stdio.h>
#include <stdlib.h>
struct cell {
int element;
struct cell *next;
};
/* root で示されるリストの先頭に データ x を追加する */
struct cell *insert(int x, struct cell *root) {
struct cell *r;
/* 新しい cell を確保->r */
r = malloc(sizeof(struct cell));
if (r == NULL)
return NULL;
/* 新しい cell の element にデータをコピー */
r->element = x;
/* 線形リストのリンクを構築 */
/* root が NULL ならリストの最初 */
/* root->rのセル->NULL の順にリンク */
if (root == NULL) {
r->next = NULL;
root = r;
/* root の値を呼び出し元に返す */
return root;
}
/* root が NULL 出ない場合 */
/* root->rのセル->元のrootのセルの順にリンク */
r->next = root;
root = r;
/* root の値を呼び出し元に返す */
return root;
}
#define N 10
int main() {
struct cell *root, *p;
int i;
for (i = 0; i < N; i++) {
/* こういう使い方をする。一種のパターンとして丸暗記 */
root = insert(i, root);
}
p = root;
while (p != NULL) {
printf("cell's data: %d, cell's address: %p, cell's next: %p\n",
p->element, p, p->next);
p = p->next;
}
return 0;
}
/* end */
|
Output:
|
cell's data: 9, cell's address: 0x804a1e0, cell's next: 0x804a1b8
cell's data: 8, cell's address: 0x804a1b8, cell's next: 0x804a190
cell's data: 7, cell's address: 0x804a190, cell's next: 0x804a168
cell's data: 6, cell's address: 0x804a168, cell's next: 0x804a140
cell's data: 5, cell's address: 0x804a140, cell's next: 0x804a118
cell's data: 4, cell's address: 0x804a118, cell's next: 0x804a0f0
cell's data: 3, cell's address: 0x804a0f0, cell's next: 0x804a0c8
cell's data: 2, cell's address: 0x804a0c8, cell's next: 0x804a0a0
cell's data: 1, cell's address: 0x804a0a0, cell's next: 0x804a078
cell's data: 0, cell's address: 0x804a078, cell's next: (nil)
|
|