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://azwzsj.com/article/gcejg.html