7-5 队列操作 (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,请输出队列长度。 每个输出项最后换行。
输入样例:
5 3 2 1 100 3 2
输出样例:
0 Invalid 1 100
作者
司广涛
单位
曲阜师范大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<iostream>
using namespace std;
typedef struct queue{
int x;
struct queue *next;
} LinkList;
class MyQueue{
LinkList *head, *node, *end;
static int j;
public:
MyQueue()
{
head=NULL;
node=NULL;
end=NULL;
head=new LinkList;
end=head;
}
void push(int x)
{
node=new LinkList;
node->x=x;
end->next=node;
node=end;
j++;
}
void pop()
{
if(j==0)
cout<<"Invalid"<<endl;
else
{
cout<<head->next->x<<endl;
head->next=head->next->next;
delete head->next;
j--;
}
}
int size()
{
return j;
}
};
int MyQueue::j=0;
int main(void)
{
MyQueue a;
int n,i,c,d;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&c);
if(c==1)
{
scanf("%d",&d);
a.push(d);
}
else if(c==2){
a.pop();
}
else if(c==3){
cout<<a.size()<<endl;
}
}
}