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

数据结构

开发平台:

C/C++

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