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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
template <typename T> class Queue { public: Queue(int c = 10); ~Queue(); bool enqueue(T data); T dequeue(); T front(); bool isEmpty(); bool isFull(); int size(); private: T *queue_; int front_; int rear_; int capacity_; };
template <typename T> Queue<T>::Queue(int c): capacity_(c), front_(0), rear_(0), queue_(NULL) { queue_ = new T [c]; std::cout << "capacity:" << c << std::endl; } template <typename T> Queue<T>::~Queue() { if(queue_) { delete [] queue_; } } template <typename T> bool Queue<T>::enqueue(T data) { if(isFull()) { return false; } queue_[rear_] = data; rear_ = (rear_ + 1) % capacity_; return true; } template <typename T> T Queue<T>::dequeue() { T data; if(isEmpty()) { throw std::out_of_range("Queue::dequeue() - Empty queue"); } data = queue_[front_]; front_ = (front_ + 1) % capacity_; return data; } template <typename T> T Queue<T>::front() { if(isEmpty()) { throw std::out_of_range("Queue::front() - Empty queue"); } return queue_[front_]; } template <typename T> bool Queue<T>::isEmpty() { return (front_ == rear_); } template <typename T> bool Queue<T>::isFull() { return (((rear_+1) % capacity_) == front_); } template <typename T> int Queue<T>::size() { return ((rear_ - front_ + capacity_) % capacity_); }
|
近期评论