-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQueue.cpp
More file actions
62 lines (55 loc) · 1.37 KB
/
Queue.cpp
File metadata and controls
62 lines (55 loc) · 1.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// Honor Pledge: ashstrin
//I pledge that I have neither given nor received any help
//on this assignment.
#include "Queue.h";
#include <stdexcept>;
#include <iostream>;
template <typename T>
Queue <T>::Queue (void) : Array_Base<T>()
{}
template <typename T>
Queue<T>::Queue(const Queue & q) : Array_Base<T>(q)
{
}
template <typename T>
Queue<T>::Queue(size_t length) : Array_Base<T>(length), front_(0), back_(-1){
}
template <typename T>
const Queue <T> & Queue <T>::operator = (const Queue & rhs){
if(this != &rhs){
Array_Base<T>::~Array_Base();
Array_Base<T>::data_ = new T[rhs.max_size()];
Array_Base<T>::max_size_ = rhs.max_size();
Array_Base<T>::cur_size_ = rhs.size();
Array_Base<T>::data_ = rhs.data_;
front_ = rhs.front_;
back_ = rhs.back_;
}
}
template <typename T>
void Queue<T>::enqueue(T element){
back_++;
if(back_ < Array_Base<T>::max_size_){
Array_Base<T>::data_[back_] = element;
}else{
throw std::overflow_error("Error - Queue is full");
back_--;
}
}
template <typename T>
T Queue<T>::dequeue(void){
if(front_ < 0 || front_ > back_){
throw std::underflow_error("Error - Queue is empty")
}else{
front_++;
}
return Array_Base<T>::data_[front_];
}
template <typename T>
void Queue<T>::clear(){
Array_Base<T>::cur_size_ = 0;
front_ = 0;
back_ = -1;
delete [] Array_Base<T>::data_;
Array_Base<T>::data_ = new T[Array_Base<T>::max_size_];
}