7-2 队列操作
请实现一个MyQueue类,实现出队,入队,求队列长度.
实现入队函数 void push(int x); 实现出队函数 int pop(); 实现求队列长度函数 int size();
输入格式:
每个输入包含1个测试用例。每个测试用例第一行给出一个正整数 n (n <= 10^6) ,接下去n行每行一个数字,表示一种操作: 1 x : 表示从队尾插入x,0<=x<=2^31-1。 2 : 表示队首元素出队。 3 : 表示求队列长度。
输出格式:
对于操作2,若队列为空,则输出 “Invalid”,否则请输出队首元素。 对于操作3,请输出队列长度。 每个输出项最后换行。
输入样例:
5
3
2
1 100
3
2
输出样例:
0
Invalid
1
100
#include<iostream>
using namespace std;
#define MAXQSIZE 100
typedef struct
{
int *base;
int front;
int rear;
}SqQueue;//定义队列元素
int InitQueue(SqQueue& q)
{
q.base = new int[MAXQSIZE];
if (!q.base)
return 0;
q.front = 0;
q.rear = 0;
return 1;
}
int push(SqQueue& q, int x)
{
if ((q.rear + 1) % MAXQSIZE == q.front)
return 0;
q.base[q.rear] = x;
q.rear=q.rear + 1;
return 1;
}
int pop(SqQueue& q)
{
int e=0;
if (q.rear == q.front)
e=-1;
else
{
e = q.base[q.front];
q.front = q.front + 1;
}
return e;
}
int size(SqQueue& q)
{
return q.rear-q.front;
}
int main()
{
SqQueue q;
InitQueue(q);
int i, n, a, x,e;
cin >> n;
for (i = 0; i < n; i++)
{
cin >> a;
switch (a)
{
case 1:
{
cin >> x;
push(q, x);
break;
}
case 2:
{
e=pop(q);
if (e == -1)
{
cout << "Invalid" << endl;
break;
}
cout <<e<< endl;
break;
}
case 3:
{
cout << size(q) << endl;
break;
}
}
}
return 0;
}