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

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程式实例: 5_1b.c                      */
  3. /*    使用数组来构建栈                    */
  4. /* ======================================== */
  5. #include <stdlib.h>
  6. #include <time.h>
  7. #define MAXSTACK 100              /* 最大栈容量     */
  8. int stack[MAXSTACK];              /* 栈的数组宣告   */
  9. int top = -1;                     /* 栈的顶端       */
  10. /* ---------------------------------------- */
  11. /*  栈资料的存入                          */
  12. /* ---------------------------------------- */
  13. int push(int value)
  14. {
  15.    if ( top >= MAXSTACK )         /* 是否超过容量     */
  16.    {
  17.       printf("栈内容全满n");
  18.       return -1;                  /* 存入失败         */
  19.    }
  20.    top++;                         /* 栈指标加一     */
  21.    stack[top] = value;            /* 存入栈         */
  22. }
  23. /* ---------------------------------------- */
  24. /*  栈资料的取出                          */
  25. /* ---------------------------------------- */
  26. int pop()
  27. {
  28.    int temp;
  29.    if ( top < 0 )                 /* 是否栈是空     */
  30.    {
  31.       printf("栈内容是空的n");
  32.       return -1;                  /* 取出失败         */
  33.    }
  34.    temp = stack[top];             /* 取出资料         */
  35.    top--;                         /* 栈指标减一     */
  36.    return temp;                   /* 栈取出         */
  37. }
  38. /* ---------------------------------------- */
  39. /*  检查栈是否是空的                      */
  40. /* ---------------------------------------- */
  41. int empty()
  42. {
  43.    if ( top == -1 )               /* 是否是空         */
  44.       return 1;                   /* 空的             */
  45.    else
  46.       return 0;                   /* 不是空的         */
  47. }
  48. /* ---------------------------------------- */
  49. /*  主程式: 运用empty()检查牌是否发完.      */
  50. /*     红心: 数组  0 - 12                   */
  51. /*     方块: 数组 13 - 25                   */
  52. /*     梅花: 数组 26 - 38                   */
  53. /*     黑桃: 数组 39 - 51                   */
  54. /* ---------------------------------------- */
  55. void main()
  56. {
  57.    int card[52];                  /* 朴克牌数组       */
  58.    int pos;                       /* 牌代码           */
  59.    int i,temp;
  60.    long temptime;
  61.    srand(time(&temptime) % 60);   /* 使用时间初始乱数 */
  62.    for ( i = 0; i < 52; i++ )
  63.       card[i] = 0;                /* 清除朴克牌数组   */
  64.    i = 0;
  65.    while ( i != 5 )               /* 洗5张牌回路      */
  66.    {
  67.       pos = rand() % 52;          /* 乱数取值 0-51    */
  68.       if ( card[pos] == 0 )       /* 是否是未洗牌     */
  69.       {
  70.          push(pos);               /* 存此张牌进栈   */
  71.          card[pos] = 1;           /* 设定此张牌洗过   */
  72.          i++;                     /* 下一张牌         */
  73.       }
  74.    }
  75.    while ( !empty() )             /* 发完栈全部的牌 */
  76.    {
  77.       temp = pop();               /* 取出栈资料     */
  78.       printf(" [%c%2d] ",temp / 13 + 3,temp % 13 + 1);
  79.    }
  80.    printf("n");                  /* 换行             */
  81. }