DEMO1:堆栈的数组实现,循环控制元素压入或弹出操作,最后输出堆栈内元素
#include <iostream>
#include <iomanip>
#define MAXSTACK 100 //定义堆栈的最大容量
using namespace std;
int stack[MAXSTACK]; //声明用于堆栈操作的数组
int top=-1; //堆栈的顶端
//判断是否为空堆栈
int isEmpty()
{
if(top==-1) return 1;
else return 0;
}
//将指定的数据压入堆栈
int push(int data)
{
if(top>=MAXSTACK)
{
cout<<"堆栈已满,无法再压入"<<endl;
return 0;
}
else
{
stack[++top]=data; //将数据压入堆栈
return 1;
}
}
//从堆栈弹出数据
int pop()
{
if(isEmpty()) //判断堆栈是否为空,如果是则返回-1
return -1;
else
return stack[top--]; //将数据弹出后,再将堆栈指针往下移
}
//主程序
int main(void)
{
int value;
int i;
cout<<"请按序输入10个数据:"<<endl;
for(i=0;i<10;i++)
{
cin>>value;
push(value);
}
cout<<"===================="<<endl;
while(!isEmpty()) //将数据陆续从顶端弹出
cout<<"堆栈弹出的顺序为:"<<setw(2)<<pop()<<endl;
cout<<"===================="<<endl;
system("pause");
return 0;
}
DEMO2:数组仿真扑克牌洗牌与发牌的全过程。随机数生成扑克牌后放入堆栈,满52张牌后开始发牌,使用堆栈给4人发发牌。
#include <iostream>
#include <iomanip>
#include <ctime>
#include <cstdlib>
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));
for (i = 0; i < 52; i++)
card[i] = i + 1;
cout << "[洗牌中...请稍后!]" << endl;
while (k < 30)
{
for (i = 0; i < 51; i++)
for (j = i + 1; j < 52; j++)
if (rand() % 52 == 2)
Swap(&card[i], &card[j]);//洗牌
k++;
}
i = 0;
while (i != 52)
{
push(stack, 52, card[i]);//将52张牌压入堆栈
i++;
}
cout << "[逆时针发牌]" << endl;
cout << "[显示各家拿到的牌]" << endl;
cout << "\t\t东家\t 北家\t 西家\t 南家" << endl;
cout << "=========================================================" << endl;
while (top >= 0)
{
style = stack[top] / 13; //计算扑克牌的花色
switch (style) //扑克牌花色对应的图标
{
case 0: //梅花
ascVal = 0;
break;
case 1: //方块
ascVal = 1;
break;
case 2: //红心
ascVal = 2;
break;
case 3: //黑桃
ascVal = 3;
break;
}
cout << "[" << suit[ascVal] << setw(3) << stack[top] % 13 + 1 << "]\t";
if (top % 4 == 0)
cout << endl;
top--;
}
system("pause");
return 0;
}
void push(int stack[], int MAX, int val)
{
if (top >= MAX - 1)
cout << "[堆栈已经满了]" << endl;
else
{
top++;
stack[top] = val;
}
}
int pop(int stack[])
{
if (top < 0)
cout << "[堆栈已经空了]" << endl;
else
top--;
return stack[top];
}
void Swap(int* a, int* b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
。