请实现一个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
老师提示:
THE FIRST:
#include<iostream>
using namespace std;
class MyQueue
{
private:
int val ;
static int front;//the first
static int rear;//the last
MyQueeu()
{
val =0;
}
public:
void push(int x);
void pop();
friend int size();
};
int front = 0;
int rear = 0;
void MyQueue :: push(int x)
{
rear++;
val = x;
}
int size()
{
return rear - front;
}
void MyQueue :: pop()
{
if(front == rear)
{
cout <<"Invalid"<<endl;
}
else
{
cout<<val<<endl;
front++;
}
}
int main()
{
int n;
cin>>n;
MyQueue s[n];
for(int i = 0; i < n; i++)
{
int num;
cin>>num;
switch(num)
{
case 1:
{
int x;
cin>>x;
s[rear].push(x);
break;
}
case 2:
{
s[front].pop();
front++;
break;
}
case 3:
{
cout<<size()<<endl;
break;
}
}
}
}
1.把实例化对象数组改为在类内创建数组;那么val[],front,rear不用再声明为静态数据成员,因为整个程序中只实例化了一个对象,自始至终只使用对象s内存中的数据成员
2.静态数据成员的初始化方式:类型说明符 类名::静态数据成员 = 初始值;
3.a++表示原先a的值,++a表示a的值加1
#include<iostream>
using namespace std;
class MyQueue
{
private:
static int val[1000] ;
static int front;//the first
static int rear;//the last
MyQueeu()
{
}
public:
void push(int x);
int pop();
int size();
};
int MyQueue::front = 0;
int MyQueue::val[1000]{0} ;
int MyQueue::rear = 0;
void MyQueue :: push(int x)
{
val[rear] = x;
rear++;
}
int MyQueue :: size()
{
return rear - front;
}
int MyQueue :: pop()
{
if(front == rear)
{
return -1;
}else
{
return val[++front];
}
}
int main()
{
int n;
cin>>n;
MyQueue s;
int num;
int x;
for(int i = 0; i < n; i++)
{
cin>>num;
switch(num)
{
case 1:
{
cin>>x;
s.push(x);
break;
}
case 2:
{
if(s.pop() == -1)
{
cout<<"Invalid"<<endl;
}else
cout <<s.pop()<<endl;
break;
}
case 3:
{
cout<<s.size()<<endl;
break;
}
}
}
}
1.push()函数正常存入 ,pop()函数if的判断没有问题,在pop()成员函数内输出val[front++]时没有问题;switch中已经调用一次pop()成员函数,在case
2:中再次调用回事front的值为下一位,改为在case 2:的执行体中加入front++;但先前将front声明为类的私有成员,不能再类外使用,改为将front设置为全局变量;在case 2:的执行体中将x = pop(),即x = val[front++];
在dev中成功实现样例,但在pta中显示编译错误
#include<iostream>
#include<cstring>
using namespace std;
class MyQueue
{
private:
int val[1000] ;
int front = 0;//the first
int rear;//the last
MyQueeu()
{
}
public:
void push(int x);
int pop();
int size();
};
void MyQueue :: push(int x)
{
val[rear] = x;
rear++;
}
int MyQueue :: size()
{
return rear - front;
}
int MyQueue :: pop()
{
if(front == rear)
{
return -1;
}else
{
return val[front++];
}
}
int main()
{
int n;
cin>>n;
MyQueue s;
int num;
int x;
for(int i = 0; i < n; i++)
{
cin>>num;
switch(num)
{
case 1:
cin>>x;
s.push(x);
break;
case 2:
x = s.pop();
if(x == -1)
{
cout<<"Invalid"<<endl;
}else
{
cout <<x<<endl;
break;
}
case 3:
cout<<s.size()<<endl;
break;
}
}
}
无参构造函数位置错误,函数名错误,修改之后出现段错误;
#include<iostream>
#include<cstring>
using namespace std;
class MyQueue
{
private:
int val[1000] ;
int front = 0;//the first
public:
void push(int x);
int pop();
int size();
MyQueue();
};
MyQueue:: MyQueue()
{
}
void MyQueue :: push(int x)
{
val[front++] = x;
}
int MyQueue :: size()
{
return front;
}
int MyQueue :: pop()
{
if(front == 0)
{
return -1;
}else
{
for(int i = 0; i < front-1; i++)
{
val[i] = val[i+1];
}
front--;
return val[0];
}
}
int main()
{
int n;
cin>>n;
MyQueue s;
int num;
int x;
for(int i = 0; i < n; i++)
{
cin>>num;
switch(num)
{
case 1:
cin>>x;
s.push(x);
break;
case 2:
x = s.pop();
if(x == -1)
{
cout<<"Invalid"<<endl;
}else
{
cout <<x<<endl;
}
break;
case 3:
cout<<s.size()<<endl;
break;
}
}
}