PTA:7-20 队列操作

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

#include<iostream>
#include<cstring>
using namespace std;
class MyQueue
{
	int count=0;//让计数器属于类内成员,好调用
	int num[500];//队列
	public:
		void push(int);
		int pop();
		int size();
};
void MyQueue::push(int x)//增加队列元素
{
	num[count++]=x;
}
int MyQueue::pop()//队列头元素出列
{
	if(count==0)//无元素时
	return -1;
	int x=num[0];
	for(int i=0;i<count-1;i++)
		num[i]=num[i+1];
	count--;
	return x;
}
int MyQueue::size()//count就是队列大小
{
	return count;
}
int main()
{
	int n,k;
	cin>>n;
	MyQueue text;//创建对象
	int num;
	for(int i=0;i<n;i++)
	{
		cin>>k;
		switch(k)//用switch判断操作
		{
			case 1:
				cin>>num;
				text.push(num);
				break;
			case 2:
				num=text.pop();
				if(num==-1)
					cout<<"Invalid"<<endl;
				else
					cout<<num<<endl;
				break;
			case 3:
				cout<<text.size()<<endl;
		}
	}
}
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
队列是一种数据结构,它是一种先进先出(FIFO)的线性数据结构。队列只允许在队列的一端进行插入操作,称为队尾,而在另一端进行删除操作,称为队头。下面是队列的实现及基本操作。 1. 队列的结构定义 ```c #define MAXSIZE 100 // 队列最大容量 typedef struct { int data[MAXSIZE]; // 队列元素数组 int front; // 队头指针 int rear; // 队尾指针 } Queue; ``` 2. 初始化队列 ```c void initQueue(Queue *q) { q->front = q->rear = 0; // 队头和队尾指针初始化为0 } ``` 3. 判断队列是否为空 ```c int isEmpty(Queue *q) { return q->front == q->rear; } ``` 4. 判断队列是否已满 ```c int isFull(Queue *q) { return (q->rear + 1) % MAXSIZE == q->front; } ``` 5. 入队操作 ```c int enqueue(Queue *q, int x) { if (isFull(q)) // 队列已满,无法插入 return 0; q->data[q->rear] = x; // 插入元素到队尾 q->rear = (q->rear + 1) % MAXSIZE; // 队尾指针加1 return 1; } ``` 6. 出队操作 ```c int dequeue(Queue *q, int *x) { if (isEmpty(q)) // 队列为空,无法删除 return 0; *x = q->data[q->front]; // 取出队头元素 q->front = (q->front + 1) % MAXSIZE; // 队头指针加1 return 1; } ``` 7. 获取队头元素 ```c int getFront(Queue *q, int *x) { if (isEmpty(q)) // 队列为空 return 0; *x = q->data[q->front]; // 取出队头元素 return 1; } ``` 8. 获取队列长度 ```c int getLength(Queue *q) { return (q->rear - q->front + MAXSIZE) % MAXSIZE; } ``` 9. 输出队列元素 ```c void printQueue(Queue *q) { if (isEmpty(q)) // 队列为空 return; int i = q->front; while (i != q->rear) { printf("%d ", q->data[i]); i = (i + 1) % MAXSIZE; } printf("\n"); } ``` 以上就是队列的实现及基本操作。在使用队列时,需要注意队列的容量大小,避免队列溢出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值