栈和队列

卡片游戏

桌面上有一叠牌,从第一张牌开始从上往下一次编号为1-n.当至少还剩下两张牌时进行一下操作:把第一张牌扔掉,然后把新的第一张放到整叠牌的最后。输入n,输出每次扔掉的牌,以及最后剩下的牌。

样例输入:7

样例输出:1 3 5 7 4 2 6

 1 #include "stdafx.h"
 2 #include<iostream>
 3 using namespace std;
 4 
 5 int _tmain(int argc, _TCHAR* argv[])
 6 {
 7 int num[100];
 8 int inputNum;
 9 cin>>inputNum;
10 for(int i = 1;i<=inputNum;++i)
11 {
12     num[i-1]=i;
13 }
14 int renum=0;//用于记录输出字数
15 int curnum=0;
16 int len = inputNum-1;
17 while(renum!=inputNum)
18 {
19     cout<<num[curnum]<<" ";
20     curnum++;
21     len++;
22     num[len]=num[curnum];
23     curnum++;
24     renum++;
25 }
26 return 0;
27 }

运行结果没有错误,但是存在bug.像用curnum记录当前的下标. 最后会达到2倍inputNum的大小,也就是说可能运行到后期,会读写非法内存,除非把数组空间开大或者才去一种称为循环队列的技术.

 1 #include "stdafx.h"
 2 #include<iostream>
 3 #include<queue>
 4 using namespace std;
 5 
 6 queue<int> q;
 7 int _tmain(int argc, _TCHAR* argv[])
 8 {
 9     int n;
10     cin>>n;
11     for(int i = 0;i!=n;++i) q.push(i+1);
12     while(!q.empty())
13     {
14         cout<<q.front()<<endl;
15         q.pop();
16         if(q.empty())
17         {
18             break;
19         }
20         q.push(q.front());
21         q.pop();
22     }
23 return 0;
24 }

这就是STL队列.

原文地址:https://www.cnblogs.com/crazycodehzp/p/3519866.html