2018-01-22

知识点:队列

        队列是一种先进先出的线性表。它只允许在表的前端进行删除操作,在表的后端进行插入操作。进行插入的端称为队尾(rear),进行删除操作的端称为队头(front)。队中没有元素的时候称为空队列。

题目:

http://acm.hdu.edu.cn/showproblem.php?pid=1276

题目解析:

遇到0表示队列结束,构造函数创建新队列。可以用queue容器和stack容器解决问题。

要加头文件#<queue>,基本操作有:

1.定义一个队列:queue<int> q;

2.判断空队列:q.empty()  注意:为空返回true

3.计算元素个数:q.size()

4.队尾压入新元素:q.push()

5.队首返回元素值,不删除:q.front()

6.删除队首元素,不返回值:q.pop()

7.返回队尾元素值,不删除:q.back()

解题代码:

#include  

#include  

#include  

#include  

#include  

using namespace std;  

queue q;  

int cmp(int k)  

{int i=1;  

while(q.front()!=0)  

{if(i%k!=0) q.push(q.front());  

q.pop();i++;  

}q.push(0);

q.pop();  

}  

int main()  

{  

int n,i;  

scanf("%d",&n);  

while(n--)  

{int w;  

scanf("%d",&w);  

for(i=1;i<=w;i++) q.push(i); 

q.push(0);  

    i=1;  

while(q.size()>4)  

{if(i%2==0) cmp(3);  

else cmp(2);  

    i++;  

    }  

int flag=0;  

while(!q.empty())  

{if(q.front()!=0)  {if(flag) printf(" "); flag=1;printf("%d",q.front());}  

         q.pop();  

}printf("\n");  

    }  

推荐阅读更多精彩内容