关于C++队列操作(并附上一道Boring题目)

关于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;       
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值