用循环队列解决下面问题有1——n号卡片放成一叠,背面朝上1)、将最上面的一张放到最下面2)、打开目前的最上面的一张卡片,

用循环队列解决下面问题
有1——n号卡片放成一叠,背面朝上
1)、将最上面的一张放到最下面
2)、打开目前的最上面的一张卡片,并将此卡片放在边上的一叠的最上面
3)、重复1)2)直到所有的卡片均打开为止
4)、新的这叠卡片的编号依次为1、2、……、n
求原来这叠卡片的顺序
xuke3333 1年前 已收到1个回答 举报

暮色碧水 花朵

共回答了18个问题采纳率:88.9% 举报

初始化队列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

1年前

2
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 16 q. 0.037 s. - webmaster@yulucn.com