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

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程式实例:5_1a.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. /*     红心: 数组  0 - 12                   */
  41. /*     方块: 数组 13 - 25                   */
  42. /*     梅花: 数组 26 - 38                   */
  43. /*     黑桃: 数组 39 - 51                   */
  44. /* ---------------------------------------- */
  45. void main()
  46. {
  47.    int card[52];                  /* 朴克牌数组     */
  48.    int pos;                       /* 牌代码         */
  49.    int i,temp;
  50.    long temptime;
  51.    srand(time(&temptime) % 60);   /* 使用时间初始乱数 */
  52.    for ( i = 0; i < 52; i++ )
  53.       card[i] = 0;                /* 清除朴克牌数组 */
  54.    i = 0;
  55.    while ( i != 52 )              /* 洗牌回路       */
  56.    {
  57.       pos = rand() % 52;          /* 乱数取值0-51   */
  58.       if ( card[pos] == 0 )       /* 是否是未洗牌   */
  59.       {
  60.          push(pos);               /* 存此张牌进栈 */
  61.          card[pos] = 1;           /* 设定此张牌洗过 */
  62.          i++;                     /* 下一张牌       */
  63.       }
  64.    }
  65.    printf("    1      2      3      4 n");
  66.    printf(" ==========================n");
  67.    for ( i = 0; i < 5; i++ )    /* 发牌给四人的回路 */
  68.    {
  69.       temp = pop();               /* 取出栈资料   */
  70.       printf(" [%c%2d] ",temp / 13 + 3,temp % 13 + 1);
  71.       temp = pop();               /* 取出栈资料   */
  72.       printf(" [%c%2d] ",temp / 13 + 3,temp % 13 + 1);
  73.       temp = pop();               /* 取出栈资料   */
  74.       printf(" [%c%2d] ",temp / 13 + 3,temp % 13 + 1);
  75.       temp = pop();               /* 取出栈资料   */
  76.       printf(" [%c%2d] ",temp / 13 + 3,temp % 13 + 1);
  77.       printf("n");               /* 换行           */
  78.    }
  79. }