参考书:《啊哈算法》——啊哈磊
基础知识:
队列:先进先出
栈:后进先出
完整代码如下:
#include <iostream>
using namespace std;
//创建一个结构体用来实现队列
struct queue
{
int data[1000];
int head;
int tail;
};
//创建一个结构体用来实现栈
struct stack
{
int data[10];
int top;
};
void DrawCard(queue &q,stack &s,int *book)
{
int temp=q.data[q.head]; //
if(book[temp]==0) //桌面上没有牌面为temp的牌。
{
q.head++;
s.top++;
s.data[s.top]=temp;
book[temp]=1;
}
else
{
q.head++;
q.data[q.tail]=temp;
q.tail++;
//把桌子上可以赢得的牌依次放回手中牌的末尾。
//放入到手中——入队
while(s.data[s.top]!=temp)
{
book[s.data[s.top]]=0; //取消标记
q.data[q.tail]=s.data[s.top];
q.tail++;
s.top--;
}
//收回桌上牌面为temp的牌——出栈
book[s.data[s.top]]=0;
q.data[q.tail]=s.data[s.top];
q.tail++;
s.top--;
}
}
int main()
{
struct queue q1={
{0,2,4,1,2,5,6},1,7};
struct queue q2={
{0,3,1,3,5,6,4},1,7};
struct stack sk; sk.top=0;//用来记录桌面上的牌面
int book[10]={0}; //用来记录桌面上有哪些牌
//初始化队列和栈 队列head=tail表示队列为空
/