はじめての C

typedef 宣言を使って mklist.2.c を書き換えよ。

まずは ヘッダーファイルを作成。

  1. /* list1.h */
  2. struct List {
  3. int data;
  4. struct List *next;
  5. };
  6. typedef struct list LIST; /* ここで宣言 */

つぎに mklist.6.c として書き換える。

  1. /* mklist.6 */
  2. #include
  3. #include "list1.h"
  4. LIST *get_mem(void);
  5. void show_list(LIST *);
  6. main()
  7. {
  8. LIST *start, *curr, *prev;
  9. int n;
  10. prev = NULL;
  11. while (scanf("%d", &n) != EOF) {
  12. curr = get_mem();
  13. curr->data = n;
  14. if (prev == NULL) {
  15. start = curr;
  16. } else {
  17. prev->next = curr;
  18. }
  19. prev = curr;
  20. }
  21. curr->next = NULL;
  22. show_list(start);
  23. printf("\n");
  24. }
  25. LIST *get_mem(void) {
  26. LIST *pm;
  27. pm = (LIST *)malloc(sizeof(LIST));
  28. return pm;
  29. }
  30. void show_list(LIST *pd) {
  31. while (pd != NULL) {
  32. printf("%d ", pd->data);
  33. pd = pd->next;
  34. }
  35. }

双方向リストの場合も list2.h としてヘッダーファイルを作成するといいかもしれない(もちろん 型の名前は変えて)。