作业帮 > 综合 > 作业

用循环队列解决下面问题

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/27 01:29:23
用循环队列解决下面问题
有1——n号卡片放成一叠,背面朝上
1)、将最上面的一张放到最下面
2)、打开目前的最上面的一张卡片,并将此卡片放在边上的一叠的最上面
3)、重复1)2)直到所有的卡片均打开为止
4)、新的这叠卡片的编号依次为1、2、……、n
求原来这叠卡片的顺序
初始化队列q中元素为0到n-1(表示虚拟的卡片,意为该下标存放的卡片),然后进行n次操作:把队头元素接到队尾,并移除当前队头元素.
执行完成后堆栈s中存储了一个序列,由于新的卡片序列是0,1,2...n,所以映射回去即可.
#include
//q模拟队列,s模拟堆栈,front,rear分别是队列头尾指标
int n,q[256],s[256],card[256],
front,rear;
//队列上指标移动
void stepback(int *t) //指标后移
{
if(*t==0)*t = n;
else --*t;
}
void stepforward(int *t) //指标前移
{
*t = (*t+1)%n;
}
int main()
{
int i,k;
n = 3; //n张卡片
for(i=0; i