天之道

享受编程的乐趣。
posts - 118, comments - 7, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

栈的应用——扑克洗牌

Posted on 2012-02-28 00:36 hoshelly 阅读(190) 评论(0)  编辑 收藏 引用 所属分类: DS && Algorithm
#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#define MAXSTACK 100//栈的最大容量
int stack[MAXSTACK];//栈的数组声明
int top =-1; //栈的顶端
//栈的数据存入
int push(int value)
{
   if(top>=MAXSTACK)//是否超过容量
   {
      printf("栈的内容全满\n");
      return -1;
    }
    top++;
    stack[top]=value;//栈指针加1,存入栈
}
//栈数据的取出
int pop()
{
   int temp;
   if(top<0)
   {
      printf("栈内容是空的\n");
      return -1;
    }
    temp = stack[top];
    top--;
    return temp;
}
//检查栈是否是空的
int empty()
{
  if(top == -1)
  return 1;
  else
  return 0;
 }
 
 //主程序:运用empty()检查牌是否发完
 
//红心:数组0~12,方块:数组13~25,梅花:数组26~38,黑桃:数组39~51
 
 void main()
 {
    int card[52];
    int pos;
    int i,temp;
    for(i=0;i<52;i++)
      card[i]=0;
    i=0;
    while(i!=5)//洗五张牌循环
    {
       pos=rand()%52;//随机数取值0~51
       if(card[pos] == 0) //是否是未洗牌
       {
          push(pos);//存此张牌进栈
          card[pos]=1;//设置此张牌洗过
          i++;//下一张牌
        }
    }
    
    while(!empty())//发完栈全部的牌
    {
       temp=pop(); //取出栈数据
       printf("[%c%3d]",temp/13+3,temp%13+1);
    }
    printf("\n");
}

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理