C++/PTA 队列操作

简介: 请实现一个MyQueue类,实现出队,入队,求队列长度.

题目要求

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


解题思路

这段代码是一个使用数组实现的队列,主要思路如下:


定义 MyQueue 类,包含私有变量 val 和 front,公有函数 push、pop、size 和构造函数 MyQueue。


构造函数用于初始化对象。


push 函数将元素 x 添加到队列的末尾。具体实现是将 x 存入数组 val 中 front 位置(队尾),同时将 front 加一,以便下一次插入时放在新的位置。


size 函数返回 front,即队列中现有元素的数量。


pop 函数弹出队列的队首元素,并返回其值。当队列为空时,返回 -1。否则,将队列中所有元素往前移动一位,让队列头指针 front 减一,返回弹出的队首元素。


主函数中读入整数 n,表示有 n 次操作。通过创建一个 MyQueue 类的对象,对对象进行入队、出队、查询队列大小等操作,并输出相应结果。


通过 switch 语句来处理每种不同的操作,例如:1 表示在队列尾部插入元素,2 表示弹出队首元素并输出其值,3 表示输出队列元素个数。


代码

#include<iostream>
#include<cstring>
using namespace std;
class MyQueue//定义一个MyQueue类
{
  private:
  int val[1000] ;//定义一个 int 类型的数组存储队列元素
  int front = 0;//front 表示队首元素的下标
  public:
  void push(int x);//在队尾添加元素
  int pop();//弹出队首元素并返回其值
  int size();//返回队列中元素个数
  MyQueue();//构造函数
};



这里定义了一个 MyQueue 类,包含私有变量 val 和 front,公有函数 push、pop、size 和构造函数 MyQueue。


MyQueue::MyQueue() //构造函数
{
}


构造函数,用于初始化对象。

void MyQueue::push(int x)//在队尾添加元素
{
    val[front++] = x;//将 x 添加到队列的末尾
}


push 函数将元素 x 添加到队列的末尾。具体实现是将 x 存入数组 val 中 front 位置(队尾),同时将 front 加一,以便下一次插入时放在新的位置。


int MyQueue::size()//返回队列中元素个数
{
    return front;//直接返回当前队列的元素个数
}


size 函数返回 front,即队列中现有元素的数量。

int MyQueue::pop()//弹出队首元素并返回其值
{
    if (front == 0) {//判断队列是否为空
        return -1;//如果为空,返回 -1
    } else {//否则,取出队头,并将队列头指针移动一位
        int ret = val[0];//取出队首元素
        for (int i = 0; i < front-1; i++) {//将队列中所有元素往前移动一位
            val[i] = val[i+1];
        }
        front--;//队列头指针减一
        return ret;//返回弹出的队首元素
    }
}


pop 函数弹出队列的队首元素,并返回其值。当队列为空时,返回 -1。否则,将队列中所有元素往前移动一位,让队列头指针 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;
        }
    }
}



主函数中读入整数 n,表示有 n 次操作。通过创建一个 MyQueue 类的对象,对对象进行入队、出队、查询队列大小等操作,并输出相应结果。


总代码如下:


#include<iostream>
#include<cstring>
using namespace std;
{
  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;    
  }
  }
 }


总结

该题考察队列的数组实现,读者可躬身实践。

我是秋说,我们下次见。

目录
相关文章
|
20天前
|
人工智能 机器人 C++
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
|
1月前
|
存储 JSON 安全
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
66 0
|
4天前
|
设计模式 C语言 C++
【C++进阶(六)】STL大法--栈和队列深度剖析&优先级队列&适配器原理
【C++进阶(六)】STL大法--栈和队列深度剖析&优先级队列&适配器原理
|
26天前
|
C语言 C++
C/C++文件读取操作
C/C++文件读取操作
|
1月前
|
存储 算法 数据管理
C++中利用随机策略优化二叉树操作效率的实现方法
C++中利用随机策略优化二叉树操作效率的实现方法
77 1
|
1月前
|
存储 缓存 调度
C++关联容器深度解析:提升数据结构操作的艺术
C++关联容器深度解析:提升数据结构操作的艺术
74 0
|
1月前
|
安全 算法 调度
C++队列探秘:队列容器的使用技巧与实战案例解析
C++队列探秘:队列容器的使用技巧与实战案例解析
128 0
|
1月前
|
存储 程序员 C++
在C++语言中顺序容器的操作
在C++语言中顺序容器的操作
12 0
|
5天前
|
存储 编译器 C语言
c++的学习之路:5、类和对象(1)
c++的学习之路:5、类和对象(1)
21 0
|
5天前
|
C++
c++的学习之路:7、类和对象(3)
c++的学习之路:7、类和对象(3)
19 0