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

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程式实例: 4_1_1.c                   */
  3. /*    环状链结串列的建立                    */
  4. /* ======================================== */
  5. #include <stdlib.h>
  6. struct clist                      /* 环状串列结构宣告   */
  7. {
  8.    int data;                      /* 节点资料           */
  9.    struct clist *next;            /* 指向下一节点的指标 */
  10. };
  11. typedef struct clist cnode;       /* 环状串列新型态     */
  12. typedef cnode *clink;             /* 环状串列指标新型态 */
  13. /* ---------------------------------------- */
  14. /*  使用阵列值建立环状链结串列              */
  15. /* ---------------------------------------- */
  16. clink createclist(int *array,int len)
  17. {
  18.    clink head;                    /* 环状串列的指标     */
  19.    clink before;                  /* 前一节点的指标     */
  20.    clink new_node;                /* 新节点的指标       */
  21.    int i;
  22.    /* 建立第一个节点 */
  23.    /* 配置节点记忆体 */
  24.    head = ( clink ) malloc(sizeof(cnode));
  25.    if ( !head )                   /* 检查记忆体指标     */
  26.       return NULL;
  27.    head->data = array[0];         /* 建立节点内容       */
  28.    head->next = NULL;             /* 设定指标初值       */
  29.    before = head;                 /* 指向第一个节点     */
  30.    for ( i = 1; i < len; i++ )    /* 用回路建立其它节点 */
  31.    {
  32.       /* 配置节点记忆体 */
  33.       new_node = ( clink ) malloc(sizeof(cnode));
  34.       if ( !new_node )            /* 检查记忆体指标     */
  35.          return NULL;
  36.       new_node->data = array[i];  /* 建立节点内容       */
  37.       new_node->next = NULL;      /* 设定指标初值       */
  38.       before->next = new_node;    /* 将前节点指向新节点 */
  39.       before = new_node;          /* 新节点成为前节点   */
  40.    }
  41.    new_node->next = head;         /* 建立环状链结       */
  42.    return head;                   /* 传回串列起始指标   */
  43. }
  44. /* ---------------------------------------- */
  45. /*  主程式:                                 */
  46. /*  使用阵列的内容来建立环状链结串列        */
  47. /* ---------------------------------------- */
  48. void main()
  49. {
  50.    clink head;                    /* 环状链结串列指标   */
  51.    clink ptr;                     /* 列印用的串列指标   */
  52.    int list[6] = { 9, 7, 3, 4, 5, 6 };   /* 阵列内容    */
  53.    int i;
  54.    head = createclist(list,6);   /* 建立环状链结串列   */
  55.    if ( head == NULL )
  56.    {
  57.       printf("记忆体配置失败! n");   /* 串列建立失败   */
  58.       exit(1);                    /* 结束程式           */
  59.    }
  60.    printf("数组内容: ");
  61.    for ( i = 0; i < 6; i++ )
  62.       printf("[%d]",list[i]);     /* 列印阵列内容       */
  63.    /* 串列的列印 */
  64.    printf("n链表内容: ");
  65.    ptr = head;                    /* 指向串列开始       */
  66.    do                             /* 串列走访回路       */
  67.    {
  68.       printf("[%d]",ptr->data);   /* 列印串列内容       */
  69.       ptr = ptr->next;            /* 指向下一个节点     */
  70.    } while ( head != ptr );
  71.    printf("n");                  /* 换行               */
  72. }