请实现一个MyQueue类,实现出队,入队,显示队列,求队列长度。
实现入队方法 push(int x); 实现出队方法 pop(); 实现求队列长度方法 size();实现显示队列方法:show() 。
输入格式:
每个输入包含1个测试用例。
每个测试用例第一行给出一个正整数 n (n <= 10^6) ,接下去n行每行一个数字,表示一种操作: 1 x : 表示从队尾插入x,0<=x<=2^31-1。 2 : 表示队首元素出队。 3 : 表示求队列长度。4:表示显示队列中所有元素。
输出格式:
对于操作1,将要添加的元素添加到队列的尾部
对于操作2,若队列为空,则输出 “Invalid”,否则请输出队首元素,并将这个元素从队列中删除。
对于操作3,请输出队列长度。 每个输出项最后换行。
对于操作4,输出队列中每个元素,元素之间用空格分隔,最后一个元素后面没有空格。
输入样例:
在这里给出一组输入。例如:
9
1 23
1 34
3
4
2
1 56
2
3
1 90
输出样例:
在这里给出相应的输出。例如:
2 23 34 23 34 1
我是用c++的类来实现;并且过了的代码
#include<iostream>
#include<algorithm>
using namespace std ;
const int N = 1e6+5 ;
//用c++的类来实现;
class MyQueue{
public :
void push(int x );
void pop();
void size();
void show();
private:
int front = 0 , rear = 0;
int Data[N] ;
};
void MyQueue::push(int x ){
Data[rear++] = x ;
}
void MyQueue::pop(){
// printf("输出队首的下标%d 以及队尾%d\n",front,rear);
if(front == rear)printf("Invalid\n");
else printf("%d\n",Data[front++]);
}
void MyQueue::size(){
// printf("输出队首的下标%d 以及队尾%d\n",front,rear);
printf("%d\n",rear-front);
}
void MyQueue::show(){
int flag = 1 ;
int tmp = front ; //front 为全局变量 如果不进行这一步会把front的值通过while循环变成和rear一样了
while(tmp != rear){
if(flag != 1) printf(" ");
printf("%d",Data[tmp++]);
flag = 0 ;
}
printf("\n");
}
int main(){
int n , tmp;
MyQueue q ;
scanf("%d",&n);
for(int i = 0 ; i < n ; i ++){
scanf("%d",&tmp);
if(tmp == 1){
scanf("%d",&tmp);
q.push(tmp);
}else if(tmp == 2){
q.pop();
}else if(tmp == 3){
q.size();
}else{
q.show();
}
}
return 0 ;
}