• Sicily 2302. Queue Implementation Using a Circular Array 解题报告


    题目:

    Constraints

    Time Limit: 1 secs, Memory Limit: 256 MB , Framework Judge

    Description

    template <typename T> class Queue {
    public:
         Queue();   // construct an empty queue
          ~Queue()  // destructor
          Queue(const Queue &rhs);
          const Queue & operator(const Queue &rhs)
          bool empty()const;
          bool full()const;
          int size()const;
          bool push(const T &x);//enqueue
          bool pop();//dequeue
          const T & front()const;//returns a reference to the front element
    private:
     //using a static array of size 100.   

    };

    Input

    None

    Output

    None

    Hint

    Submit your implementation only.

    首先简单说明一下queue的用法:

    back()返回队列最后一个元素引用
    empty()是检查是否为空的方法 
    front()获得队列最前面一个元素引用
    push()在队列尾添加一个数据
    pop()删除队列头的一个数据
    size()队列中元素个数

    用数组实现双端队列,数据存放在容量100的数组中,用begin,end两个下标实现对数组开头与末尾的移动或者读写操作。

    当begin=end的时候说明队列为空

    需要注意的是判断size的时候,由于end加到100之后要继续存储数据必须将end重新赋值为0,所以end-begin可能为负值,解决办法是size=(100+end-begin)%100

    begin加到100的时候也要重新赋值为0

     1 #include<iostream>
     2 using namespace std;
     3 
     4 template<typename T>class Queue{
     5     T data[100];
     6     int begin,end;
     7 public:
     8     Queue(){
     9         begin=0;
    10         end=0;
    11     }
    12     Queue(const Queue &rhs){
    13         begin=rhs.begin;
    14         end=rhs.end;
    15         for(int i=0;i<100;i++){
    16             data[i]=rhs.data[i];
    17         }
    18     }
    19     ~Queue(){
    20     }
    21     bool empty()const{
    22         return begin==end;
    23     }
    24     bool full() const{
    25         return size()==100;
    26     }
    27     int size() const{
    28         return (end-begin+100)%100;//end可能比begin小
    29     }
    30     bool push(const T &x){
    31         if(size()==100)
    32             return false;
    33         else{
    34             data[end]=x;
    35             end++;
    36             if(end==100)
    37                 end=0;
    38             return true;
    39         }
    40     }
    41     bool pop(){
    42         if(empty())
    43             return false;
    44         else{
    45             begin++;
    46             if(begin==100)
    47                 begin=0;
    48             return true;
    49         }
    50     }
    51     const T & front() const{
    52         return data[begin];
    53     }
    54 };
  • 相关阅读:
    【复现】cve-2020-1472 微软NetLogon权限提升漏洞 附exp
    Vmware 问题【持续更新】
    linux命令之上传文件和下载文件-lrzsz
    在ubuntu16.04中输入不存在shell命令时,报错ModuleNotFoundError的解决方案
    linux编译命令:tmpfs,make,distcc,ccache
    Linux常用命令之必知必会
    crontab定时任务
    Ubuntu使用官网的安装包安装Nodejs
    接口测试(Python)之DDT
    【XMCTF】web3 考核
  • 原文地址:https://www.cnblogs.com/jolin123/p/3329959.html
Copyright © 2020-2023  润新知