7-2 队列操作 (10分)

请实现一个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,请输出队列长度。 每个输出项最后换行。

输入样例:

1
2
3
4
5
6
5
3
2
1 100
3
2

输出样例:

1
2
3
4
0
Invalid
1
100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include<iostream>
using namespace std;

#define MAXQSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int QElemType;
typedef char SElemType;
typedef int Status;

typedef struct {
QElemType *base;
int front;
int rear;
} SqQueue;

class MyQueue {

public:
Status EnQueue(SqQueue &Q, QElemType e) {
if (
Q.front == (Q.rear + 1) % MAXQSIZE
)
return ERROR;
Q.base[Q.rear] = e;

Q.rear = (Q.rear + 1) % MAXQSIZE;
return OK;
}


Status DeQueue(SqQueue &Q) {
if (
Q.front == Q.rear
) {
cout << "Invalid" << endl;
return 0;
}
int e = Q.base[Q.front];

Q.front = (Q.front + 1) % MAXQSIZE;
cout<<e<<endl;
}
Status size(SqQueue &Q)
{
return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}


Status InitQueue(SqQueue &Q) {

Q.base = new QElemType[MAXQSIZE];
if (!Q.base)
exit(OVERFLOW);

Q.rear = Q.front = 0;
return OK;
}
};

int main() {
SqQueue q;
MyQueue q1;
q1.InitQueue(q);
int n;
cin>>n;
for (int i = 0; i < n; ++i) {
int t;
cin>>t;
switch(t) {
case 1:
int temp;
cin>>temp;
q1.EnQueue(q,temp);
continue;
case 2:
q1.DeQueue(q);
continue;
case 3:
cout<<q1.size(q)<<endl;
continue;
}
}
return 0;
}

注意switch语句需要有continue