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

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程式实例: 12_5_1.cpp                  */
  3. /*    堆叠类别实作 - 阵列                   */
  4. /* ======================================== */
  5. #include <iostream.h>
  6. #include <time.h>
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. #define MAXSTACK 100              /* 堆叠的最大容量     */
  10. class stack                       /* stack类别宣告      */  
  11. {
  12. private:
  13.    int data[MAXSTACK];            /* 宣告堆叠阵列       */
  14.    int top;                       /* 堆叠指标           */
  15. public:
  16.    stack() { top = -1; }          /* 建构函数           */
  17.    ~stack() { }                   /* 除构函数           */
  18.    int isEmpty();                 /* 成员函数宣告       */
  19.    int push(int);
  20.    int pop();
  21. };
  22. /* ---------------------------------------- */
  23. /*  成员函数: 检查堆叠是否是空的            */
  24. /* ---------------------------------------- */
  25. int stack::isEmpty()
  26. {
  27.    if ( top == -1 )               /* 检查top指标        */
  28.       return 1;                   /* 是空的             */
  29.    else
  30.       return 0;                   /* 不是空的           */
  31. }
  32. /* ---------------------------------------- */
  33. /*  成员函数: 将资料存入堆叠                */
  34. /* ---------------------------------------- */
  35. int stack::push(int d)
  36. {
  37.    if ( top >= MAXSTACK )         /* 是否超过堆叠容量   */
  38.      return -1;                   /* 存入失败           */
  39.    else
  40.    {
  41.       top++;                      /* 堆叠指标加一       */
  42.       data[top] = d;              /* 存入堆叠           */
  43.       return 1;                   /* 存入成功           */
  44.    }
  45. }
  46. /* ---------------------------------------- */
  47. /*  成员函数: 从堆叠取出资料                */
  48. /* ---------------------------------------- */
  49. int stack::pop()
  50. {
  51.    int temp;
  52.    if ( isEmpty() )                /* 是否堆叠是空      */
  53.       return -1;                   /* 取出失败       */
  54.    else
  55.    {
  56.       temp = data[top];            /* 取出资料       */
  57.       top --;                      /* 堆叠指标减一   */
  58.       return temp;                 /* 堆叠取出       */
  59.    }
  60. }
  61. /* ---------------------------------------- */
  62. /*  主程式: 洗牌後, 将牌发给四个人.         */
  63. /*     红心: 阵列  0 - 12                   */
  64. /*     方块: 阵列 13 - 25                   */
  65. /*     梅花: 阵列 26 - 38                   */
  66. /*     黑桃: 阵列 39 - 51                   */
  67. /* ---------------------------------------- */
  68. void main()
  69. {
  70.    stack playcard;
  71.    int card[52];                  /* 朴克牌阵列     */
  72.    int pos;                       /* 牌代码         */
  73.    int i,temp;
  74.    long temptime;
  75.    
  76.    srand(time(&temptime) % 60);   /* 使用时间初始乱数 */
  77.    for ( i = 0; i < 52; i++ )
  78.       card[i] = 0;                /* 清除朴克牌阵列 */
  79.    i = 0;
  80.    while ( i != 52 )              /* 洗牌回路       */
  81.    {
  82.       pos = rand() % 52;          /* 乱数取值0-51   */
  83.       if ( card[pos] == 0 )       /* 是否是未洗牌   */
  84.       {
  85.          playcard.push(pos);      /* 存此张牌进堆叠 */
  86.          card[pos] = 1;           /* 设定此张牌洗过 */
  87.          i++;                     /* 下一张牌       */
  88.       }
  89.    }
  90.    cout << "    1      2      3      4 n";
  91.    cout << " ==========================n";
  92.    for ( i = 0; i < 5; i++ )      /* 发牌给四人的回路 */
  93.    {
  94.       temp = playcard.pop();      /* 取出堆叠资料   */
  95.       printf(" [%c%2d] ",temp / 13 + 3,temp % 13 + 1);
  96.       temp = playcard.pop();      /* 取出堆叠资料   */
  97.       printf(" [%c%2d] ",temp / 13 + 3,temp % 13 + 1);
  98.       temp = playcard.pop();      /* 取出堆叠资料   */
  99.       printf(" [%c%2d] ",temp / 13 + 3,temp % 13 + 1);
  100.       temp = playcard.pop();      /* 取出堆叠资料   */
  101.       printf(" [%c%2d] ",temp / 13 + 3,temp % 13 + 1);
  102.       cout << "n";               /* 换行           */
  103.    }
  104. }