关于C语言队列操作 参考http://blog.csdn.net/hopeyouknow/article/details/6736987
下面为C++队列的例题及讲解:
题目描述
经过补考,天天感到无聊,因为他现在并不需要复习数字电路课程。所以他决定去计算队列中成员的个数。多么无聊的少年啊!(我们的TA很有想象力)
这里会有三种队列的操作:
In x:把x(x<=10000)放到队列的末位。
Out:输出队列中的第一个元素并让其出队。如果队列是空的,则输出 -1。
Count:返回此时队列的长度。
输入格式
第一个数字 T(T<=20)意味着测试的次数。(也就是会有几次测试)
每次测试包含一个数字N(n<=1000) ,意味着接下来会有N次操作。下面的N行为对队列的操作(也就是In x 、Out 或Count操作)
输出格式
对于每一个Out和Count操作,输出其对应的答案。
样例输入
2
10
Count
Count
In 9035
Out
Out
In 9809
In 4983
Out
Count
Out
10
In 1589
Count
Count
Count
Count
In 7173
Count
In 4567
In 120
Out
样例输出
0
0
9035
-1
9809
1
4983
1
1
1
1
2
1589
讲解:
其实C或者C++中都有库里面自带的队列操作函数,自己看一下第一行的网站。基本操作就3种 入队,出队,还有判断是否为空。这道题中涉及到一个count ,也就是你需要在每组测试时申请一个count值,然后每次进行入队时(In操作)count+1,出队时(out操作)count-1。然后对于C++的代码看一下我写的注释 应该可以懂。那个boring(曾)是运用库里函数写的,我的是自己写的入队和出队操作。(看我的可以理解一下队列操作的原理)
代码:
#include<iostream>
#include<string>
using namespace std;
class Boring//新建类boring(名字是我随便起的)这里是我自己写的队列操作 在c++函数库里是有相同函数的 但记得加上 #include<queue>
{
public:
Boring();//构建函数,也就是新建一个队列
int getBoring();//返回队列长度的函数
void append(int item );//入队函数(item为入队的元素)
int retrieve();//队首出队并输出队首元素
private:
int count;
int front , rear;//标记队首和队尾位置
int maxqueue;
int B[10000];//队列元素会存在这个数组里面
};
//以下为函数实现,以上为函数声明
Boring::Boring()//队列初始化(新申请的队列count=0,自己理解以下为什么队尾元素位置为-1)
{
rear = - 1;
front = 0;
count = 0;
}
int Boring::getBoring()
{
return count;
}
void Boring::append(int item)
{
count ++;//计数
rear = rear + 1;
B[rear] = item ;
}
int Boring::retrieve()
{
count --;//计数
if(count < 0) //如果队列为空 则返回-1
{
count ++;
return -1;
}
else
{
int s;
s = B[front];
front = front + 1;
return s;
}
}
int main()
{
int t;
cin>>t;
{
for(int j = 0 ; j < t ; j ++)
{
Boring B;
int n;//同理
cin>>n;
for(int i = 0 ; i < n ; i++)
{
string S;
cin>>S;
if(S == "In")// 当输入IN的时候
{
int b;
cin >> b;//输入x 合起来就是输入的 In x
B.append(b);
}
else if(S == "Out")//当输入Out的时候
{
int c = B.retrieve();
cout << c << endl;
}
else if(S == "Count")//当输入Count的时候
{
int d = B.getBoring();
cout << d <<endl;
}
}
}
}
return 0;
}