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

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程式实例: 3_3.c                     */
  3. /*    链结串列的走访                        */
  4. /* ======================================== */
  5. #include <stdlib.h>
  6. struct llist                      /* 串列结构宣告      */
  7. {
  8.    int num;                       /* 邮寄编号          */
  9.    char name[10];                 /* 邮寄姓名          */
  10.    struct llist *next;            /* 指向下一标签      */
  11. };
  12. typedef struct llist node;        /* 定义新型态        */
  13. typedef node *llink;               /* 定义新型态指标    */
  14. /* ---------------------------------------- */
  15. /*  链结串列的建立                          */
  16. /* ---------------------------------------- */
  17. llink createllist()
  18. {
  19.    llink head;                     /* 串列的开始指标    */
  20.    llink ptr,ptr1;
  21.    int i;
  22.    /* 建立第一个节点 */
  23.    head = ( llink ) malloc(sizeof(node)); /* 配置记忆体 */
  24.    if ( !head )                   /* 检查指标          */
  25.       return NULL;
  26.    printf("输入六项邮寄资料:n");
  27.    printf("请输入编号 ==> ");
  28.    scanf("%d",&head->num);        /* 读取编号          */
  29.    printf("请输入编号(%d)的姓名 ==> ",head->num);
  30.    scanf("%s",head->name);        /* 读取姓名          */
  31.    head->next = NULL;             /* 设定指标初值      */
  32.    ptr = head;                    /* 将ptr指向串列开始 */
  33.    for ( i = 1; i < 6; i++ )      /* 建立其它节点回路  */
  34.    {
  35.        ptr1 = ( llink ) malloc(sizeof(node));
  36.        if ( !ptr1 )
  37.           return NULL;
  38.        printf("请输入编号 ==> ");
  39.        scanf("%d",&ptr1->num);    /* 读取编号          */
  40.        printf("请输入编号(%d)的姓名 ==> ",ptr1->num);
  41.        scanf("%s",ptr1->name);    /* 读取姓名          */
  42.        ptr1->next = NULL;         /* 设定指标初值      */
  43.        ptr->next = ptr1;          /* 连结节点          */
  44.        ptr = ptr->next;           /* 指向下一节点      */
  45.    }
  46.    return head;
  47. }
  48. /* ---------------------------------------- */
  49. /*  链结串列的节点走访                      */
  50. /* ---------------------------------------- */
  51. llink findnode(llink head,int num)
  52. {
  53.    llink ptr;
  54.    ptr = head;                    /* 指向串列起始      */
  55.    while ( ptr != NULL )          /* 走访串列          */
  56.    {
  57.       if ( ptr->num == num )      /* 找寻编号          */
  58.          return ptr;
  59.       ptr = ptr->next;            /* 指向下一节点      */
  60.    }
  61.    return ptr;
  62. }
  63. /* ---------------------------------------- */
  64. /*  主程式: 输入编号找寻邮寄姓名            */
  65. /* ---------------------------------------- */
  66. void main()
  67. {
  68.    llink head;                     /* 串列的开始指标    */
  69.    llink ptr;
  70.    int num;                       /* 邮寄编号变数      */
  71.    head = createllist();          /* 建立链结串列      */
  72.    if ( !head )                   /* 检查指标          */
  73.    {
  74.       printf("记忆体配置失败! n");
  75.       exit(1);
  76.    }
  77.    while ( 1 )
  78.    {
  79.       printf("请输入欲找寻的邮寄编号 ==> ");
  80.       scanf("%d",&num);           /* 读取邮寄编号      */
  81.       if ( num != 0 )
  82.       {
  83.          ptr = findnode(head,num);  /* 串列走访        */
  84.          if ( !ptr )              /* 是否找到          */
  85.             printf("没有找到n");
  86.          else
  87.             printf("  姓名: %sn",ptr->name);
  88.       }
  89.       else
  90.          exit(1);                 /* 结束离开          */
  91.    }
  92. }