自己啃算法书整理了一个同时运用堆栈和队列的代码,对这块内容还比较模糊的可以看看~,以下是代码和注解。(留个赞再走呗!)
//游戏:小哼和小哈玩小猫钓鱼的纸牌游戏。刚开始每人手中有6张牌,打到最后谁的手中还有牌谁就获胜
//提示:小哼和小哈手中的牌用队列表示,桌上的牌用堆栈表示,所有要定义3个结构体,两个队列,一个堆栈
#include
//队列结构体
struct queue
{
int data[100];
int head;
int tail;
};
//堆栈结构体
struct stack
{
int data[10];
int top;
};
int main()
{
struct queue q1,q2;
struct stack s;
int i,t;
int book[10]={0};//若桌上纸牌1有3张,则book[1]=3;若桌上纸牌5有6张,则book[5]=6
//对队列的head和tail初始化,刚开始队列为空,所以head和tail都是1
q1.head=1;q1.tail=1;//小哼
q2.head=1;q2.tail=1;//小哈
//游戏开始时,桌上没有纸牌
s.top=0;
//给小哼发牌
for (i=1;i<=6;i++)
{
scanf("%d",&q1.data[q1.tail]);
q1.tail++;
}
//给小哈发牌
for (i=1;i<=6;i++)
{
scanf("%d",&q2.data[q2.tail]);
q2.tail++;
}
//6个数字都进入队列后,tail指向队列最后一个数的后面一位
while(q1.head0)//s.top>0表示桌上还有牌
{
printf("桌上剩余的纸牌为:");
for (i=1;i<=s.top;i++)
{
printf("%d ",s.data[i]);
}
printf("\n");
}
else
printf("桌上没有纸牌剩余");
}
else
{
printf("小哼获胜\n");
printf("小哼手中的牌为:");
for (i=q1.head;i<=q1.tail-1;i++)
{
printf("%d ",q1.data[i]);
}
printf("\n");
if (s.top>0)//s.top>0表示桌上还有牌
{
printf("桌上剩余的纸牌为:");
for (i=1;i<=s.top;i++)
{
printf("%d ",s.data[i]);
}
printf("\n");
}
else
printf("桌上没有纸牌剩余");
}
return 0;
}
测试数据:
在这里插入图片描述