[ create a new paste ] login | about

Link: http://codepad.org/mGZF188g    [ raw code | output | fork ]

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:
1
2
3
4
5
6
7
8
9
10
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)


Create a new paste based on this one


Comments: