C++手动实现队列(queue)(课后作业版)-创新互联

#includeusing namespace std;

templateclass Queue {
public:
    Queue();
    Queue(int n);
    Queue(Queue& Queue);
    ~Queue();
    T& top();
    Queue& push(const T& elem);
    Queue& pop();
    void reserve(int num);
    int size();
    int capciaty() {return cap; }
    int is_empty() {return in == out; }
    bool is_full() {return (in+1)%cap == out; }
    void clear() {this->~Queue();}
    T* arr;
private:

    int out;   //出栈口
    int in;    //进栈口
    int cap;
};

//默认构造函数
templateQueue::Queue() {
    cap = 0;
    out = 0;
    arr = nullptr;
}

//一般构造函数
templateQueue::Queue(int n) {
    cap = n;
    out = 0;
    in = 0;
    arr = new T[n]{};
}

//拷贝构造函数(前浅贝)
templateQueue::Queue(Queue& Queue) {
    cap = Queue.cap;
    out = Queue.out;
    in  = Queue.in;
    this->arr = Queue.arr;
}

//析构函数
templateQueue::~Queue() {
    if ( cap == 0 ) {
        return;
    }
    cap = 0;
    out = 0;
    in  = 0;
    delete [] arr;
    arr = nullptr;
}

//访问栈顶
templateT& Queue::top() {
    if ( is_empty() ) {
        cout<< "[error]: Queue has no element"<< endl;
    }
    return *(arr+out);
}

//在栈顶添加一个元素
templateQueue& Queue::push(const T& elem) {
    if ( is_full() ) {
        reserve(2*cap);
    }
    arr[in] = elem;
    in = (in+1) % cap;
    return *this;
}

//栈顶弹出
templateQueue& Queue::pop() {
    if ( is_empty() ) {
        cout<< "[error]: don't try to pop a empty Queue"<< endl;
        return *this;
    }
    out = (out+1) % cap;
    return *this;
}

//获取当前元素个数
templateint Queue::size() {
    if ( is_empty() )
        return 0;
    else if ( is_full() ) {
        return cap-1;
    }
    if ( out<= in )
        return in-out;
    else
        return cap-(out-in);
}

//增加容量
templatevoid Queue::reserve(int num) {
    if ( num< cap ) {
        cout<< "[warning]: input of reserve() function shuold lager than capciaty"<< endl;
        return;
    }
    T *arr_ = new T[num]{};
    for ( int i = 0; i< cap; i++ )
        arr_[i] = arr[i];
    delete [] arr;
    arr = arr_;
    arr_ = nullptr;
    cap = num;
    in = out + size();
}

int main() {
    QueueQueue(3);
    if ( Queue.is_empty() )
        cout<< "Queue is a empty queue"<< endl;
    Queue.push(8);
    cout<< "top="<< Queue.top()<< ", 容量="<< Queue.capciaty()<< ", 元素个数="<< Queue.size()<< endl;
    Queue.push(4);
    cout<< "top="<< Queue.top()<< ", 容量="<< Queue.capciaty()<< ", 元素个数="<< Queue.size()<< endl;
    Queue.push(5);
    cout<< "top="<< Queue.top()<< ", 容量="<< Queue.capciaty()<< ", 元素个数="<< Queue.size()<< endl;
    Queue.push(5);
    cout<< "top="<< Queue.top()<< ", 容量="<< Queue.capciaty()<< ", 元素个数="<< Queue.size()<< endl;
    Queue.pop();
    Queue.pop();
    cout<< "top="<< Queue.top()<< ", 容量="<< Queue.capciaty()<< ", 元素个数="<< Queue.size()<< endl;
    Queue.clear();
    cout<< "top="<< Queue.top()<< ", 容量="<< Queue.capciaty()<< ", 元素个数="<< Queue.size()<< endl;
}

创新互联公司主要业务有网站营销策划、网站设计、成都网站设计、微信公众号开发、重庆小程序开发成都h5网站建设、程序开发等业务。一次合作终身朋友,是我们奉行的宗旨;我们不仅仅把客户当客户,还把客户视为我们的合作伙伴,在开展业务的过程中,公司还积累了丰富的行业经验、全网营销推广资源和合作伙伴关系资源,并逐渐建立起规范的客户服务和保障体系。 

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章名称:C++手动实现队列(queue)(课后作业版)-创新互联
浏览地址:http://ybzwz.com/article/gcejg.html