请实现一个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 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