数组实现堆栈完成扑克洗牌发牌过程

2019-04-14 08:25发布

#include #include #include #include using namespace std; void Swap(int*,int*); void push(int statck[],int MAX,int val); int pop(int stack[]); int top=-1; int main(void) { int card[52],stack[52]={0}; int i,j,k=0, ascVal; char suit[4][10]={"草花","方块","红桃","黑桃"}; int style; //只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟。如果想在一个程序中生成随机数序列, //需要至多在生成随机数之前设置一次随机种子。 // 即:只需在主程序开始处调用srand((unsigned)time(NULL)); 后面直接用rand就可以了。 //不要在for等循环放置srand((unsigned)time(NULL)); srand((unsigned)time(NULL)); for (i=0;i<52;i++) card[i]=i+1; //card[i]里边存了牌的序号 cout<<"[洗牌中...请稍后!]"<=0) { style = stack[top]/13; //计算扑克牌的花 {MOD} switch(style) //扑克牌花 {MOD}对应的图标 { case 0: //梅花 ascVal=0; break; case 1: //方块 ascVal=1; break; case 2: //红心 ascVal=2; break; case 3: //黑桃 ascVal=3; break; } cout<<"["<=MAX-1) cout<<"[堆栈已经满了]"< 核心代码模块: //栈顶为stack[Max-1],栈底为stack[0] void push(int stack[],int MAX,int val) { if(top>=MAX-1) cout<<"[堆栈已经满了]"< 链表实现堆栈核心代码 using namespace std; class Node //声明堆栈链表节点 { public: int data; //声明存放堆栈数据的变量 class Node *next; //堆栈中用来指向下一个节点的指针 }; typedef class Node Stack_Node; //定义堆栈中节点的新类型,Node是一个类型,相当于int,此处定 //义一个新类型,stack_Node也就具有了Node的属性 typedef Stack_Node *Linked_Stack; //定义链表堆栈的新类型,此处Stack_Node *是一个指针类型, //相当于int*,此处Linked_Stack便有了Node*的属性 Linked_Stack top=NULL; //指向堆栈顶端的指针 //可根据top的值判断堆栈的状态 //判断是否为空堆栈 int isEmpty() { if(top==NULL) return 1; else return 0; } //将指定的数据压入堆栈 void push(int data) { Linked_Stack new_add_node; //新加入节点的指针 //分配内存给新节点 new_add_node=new Stack_Node; //Test* pTest = new Test() new_add_node->data=data; //将传入的值赋值给节点的数据变量 new_add_node->next=top; //将新节点指向堆栈的顶端,top是一个栈顶指针 top=new_add_node; //新节点成为堆栈的顶端 } //从堆栈弹出数据 int pop() { Linked_Stack ptr; //指向堆栈顶端的指针 int temp; if(isEmpty()) //判断堆栈是否为空,如果是则返回-1 { cout<<"===目前为空堆栈==="<next; //将堆栈顶端的指针指向下一个节点,让top保持在链表最后面 temp=ptr->data; //取出堆栈的数据 free(ptr); //将节点占用的内存释放 return temp; //将从堆栈取出的数据返回给主程序 } }