6_3B.C
上传用户:wyn840322
上传日期:2007-01-13
资源大小:294k
文件大小:2k
源码类别:

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程式实例: 6_3b.c                      */
  3. /*    递归的链表建立和反向列印              */
  4. /* ======================================== */
  5. #include <stdlib.h>
  6. struct list                       /* 链表结构宣告     */
  7. {
  8.    int data;                      /* 节点资料         */
  9.    struct list *next;             /* 指向下一节点     */
  10. };
  11. typedef struct list node;         /* 定义新型态       */
  12. typedef node *link;               /* 定义新型态指标   */
  13. /* ---------------------------------------- */
  14. /*  递归链表反向列印函数                    */
  15. /* ---------------------------------------- */
  16. void print_list(link ptr)
  17. {
  18.    if ( ptr != NULL )             /* 终止条件         */
  19.    {
  20.       /* 递归链表列印函数调用 */
  21.       print_list(ptr->next);
  22.       printf("[%d]",ptr->data);   /* 列印节点资料     */
  23.    }
  24. }
  25. /* ---------------------------------------- */
  26. /*  递归链表建立函数                        */
  27. /* ---------------------------------------- */
  28. link create_list(int *array,int len,int pos)
  29. {
  30.    link head;                     /* 链表节点的指标   */
  31.    if ( pos == len )              /* 终止条件         */
  32.       return NULL;
  33.    else
  34.    {
  35.       /* 建立节点记忆体 */
  36.       head = ( link ) malloc(sizeof(node));
  37.       if ( !head )
  38.          return NULL;
  39.       head->data = array[pos];    /* 建立节点内容     */
  40.       head->next = create_list(array,len,pos + 1);
  41.       return head;
  42.    }
  43. }
  44. /* ---------------------------------------- */
  45. /*  主程式: 建立链表后将内容印出.           */
  46. /* ---------------------------------------- */
  47. void main()
  48. {
  49.    int list[6] = { 1, 2, 3, 4, 5, 6 };  /* 数组内容   */
  50.    link head;                     /* 指向链表开始     */
  51.    head = create_list(list,6,0);  /* 建立链表         */
  52.    if ( !head )
  53.    {
  54.       printf("记忆体配置失败! n");
  55.       exit(1);
  56.    }
  57.    printf("链表的内容:n");
  58.    print_list(head);              /* 列印链表         */
  59.    printf("n");                  /* 换行             */
  60. }