#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; //将从堆栈取出的数据返回给主程序
}
}