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

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程式实例: 5_2b.c                     */
  3. /*    使用链结串列来构建两个栈            */
  4. /* ======================================== */
  5. #include <stdlib.h>
  6. struct stack_node                 /* 栈的结构宣告     */
  7. {
  8.    int data;                      /* 栈资料           */
  9.    struct stack_node *next;       /* 指向下一节点       */
  10. };
  11. typedef struct stack_node stack_list; /* 串列新型态     */
  12. typedef stack_list *link;         /* 串列指标新型态     */
  13. link stack1 = NULL;               /* 栈指标1          */
  14. link stack2 = NULL;               /* 栈指标2          */
  15. /* ---------------------------------------- */
  16. /*  栈资料的存入                          */
  17. /* ---------------------------------------- */
  18. link push(link stack,int value)
  19. {
  20.    link new_node;                 /* 新节黠指标         */
  21.    /* 配置节点记忆体 */
  22.    new_node = ( link ) malloc(sizeof(stack_list));
  23.    if ( !new_node )
  24.    {
  25.       printf("记忆体配置失败! n");
  26.       return NULL;                /* 存入失败           */
  27.    }
  28.    new_node->data = value;        /* 建立节点内容       */
  29.    new_node->next = stack;        /* 新节点指向原开始   */
  30.    stack = new_node;              /* 新节点成为栈开始 */
  31.    return stack;
  32. }
  33. /* ---------------------------------------- */
  34. /*  栈资料的取出                          */
  35. /* ---------------------------------------- */
  36. link pop(link stack,int *value)
  37. {
  38.    link top;                      /* 指向栈顶端       */
  39.    if ( stack != NULL )
  40.    {
  41.       top = stack;                /* 指向栈顶端       */
  42.       stack = stack->next;        /* 栈指标指向下节点 */
  43.       *value = top->data;         /* 取出资料           */
  44.       free(top);                  /* 释回节点记忆体     */
  45.       return stack;               /* 传回栈指标       */
  46.    }
  47.    else
  48.       *value = -1;
  49. }
  50. /* ---------------------------------------- */
  51. /*  检查栈是否是空的                      */
  52. /* ---------------------------------------- */
  53. int empty(link stack)
  54. {
  55.    if ( stack == NULL )           /* 是否是空           */
  56.       return 1;                   /* 空的               */
  57.    else
  58.       return 0;                   /* 不是空的           */
  59. }
  60. /* ---------------------------------------- */
  61. /*  主程式: 用数组建立两个栈.             */
  62. /* ---------------------------------------- */
  63. void main()
  64. {
  65.    int list1[6] = { 1, 2, 3, 4, 5, 6 };  /* 数组1内容   */
  66.    int list2[6] = { 7, 6, 9, 4, 3, 0 };  /* 数组2内容   */
  67.    int i,temp;
  68.    for ( i = 0; i < 6; i++ )      /* 推入数组内容       */
  69.    {
  70.       stack1 = push(stack1,list1[i]);    /* 存入至栈1 */
  71.       stack2 = push(stack2,list2[i]);    /* 存入至栈2 */
  72.    }
  73.    printf("原来的数组顺序(1): ");
  74.    for ( i = 0; i < 6; i++ )
  75.       printf("[%d]",list1[i]);
  76.    printf("n");                  /* 换行               */
  77.    printf("栈取出的顺序(1): ");
  78.    while ( !empty(stack1) )       /* 取出全部栈内容   */
  79.    {
  80.       stack1 = pop(stack1,&temp); /* 取出栈1资料      */
  81.       printf("[%d]",temp);
  82.    }
  83.    printf("n");                  /* 换行               */
  84.    printf("原来的数组顺序(2): ");
  85.    for ( i = 0; i < 6; i++ )
  86.       printf("[%d]",list2[i]);
  87.    printf("n");                  /* 换行               */
  88.    printf("栈取出的顺序(2): ");
  89.    while ( !empty(stack2) )       /* 取出全部栈内容   */
  90.    {
  91.       stack2 = pop(stack2,&temp); /* 取出栈1资料      */
  92.       printf("[%d]",temp);
  93.    }
  94.    printf("n");                  /* 换行               */
  95. }