Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // Created by Julio Tentor <jtentor@fi.unju.edu.ar>
- //
- #ifndef DEMOQUEUE3_SPECIALQUEUE_H
- #define DEMOQUEUE3_SPECIALQUEUE_H
- template <class ELEMENT>
- class specialqueue {
- public:
- specialqueue(int capacity = 10);
- virtual ~specialqueue();
- void push(const ELEMENT & element);
- ELEMENT front();
- void pop();
- const int size();
- specialqueue<ELEMENT> join(specialqueue<ELEMENT> & other);
- private:
- int capacity;
- ELEMENT * data;
- int head;
- int tail;
- int count;
- int next(int position);
- };
- template <class ELEMENT>
- specialqueue<ELEMENT>::specialqueue(int capacity) {
- this->capacity = capacity;
- this->data = new ELEMENT[this->capacity];
- this->head = 0;
- this->tail = 0;
- this->count = 0;
- }
- template <class ELEMENT>
- specialqueue<ELEMENT>::~specialqueue() {
- delete [] this->data;
- }
- template <class ELEMENT>
- const int specialqueue<ELEMENT>::size() {
- return this->count;
- }
- template<class ELEMENT>
- int specialqueue<ELEMENT>::next(int position) {
- return (++position >= this->capacity)? 0: position;
- }
- template<class ELEMENT>
- void specialqueue<ELEMENT>::push(const ELEMENT &element) {
- if (this->count >= this->capacity) {
- throw std::runtime_error("ERROR La cola esta llena...");
- }
- this->data[this->tail] = element;
- this->tail = this->next(this->tail);
- ++this->count;
- }
- template<class ELEMENT>
- ELEMENT specialqueue<ELEMENT>::front() {
- if (this->count <= 0) {
- throw std::runtime_error("ERROR La cola esta vacía...");
- }
- return this->data[this->head];
- }
- template<class ELEMENT>
- void specialqueue<ELEMENT>::pop() {
- if (this->count <= 0) {
- throw std::runtime_error("ERROR La cola esta vacía...");
- }
- this->head = this->next(this->head);
- --this->count;
- }
- template<class ELEMENT>
- specialqueue<ELEMENT> specialqueue<ELEMENT>::join(specialqueue<ELEMENT> & other) {
- specialqueue<ELEMENT> result = specialqueue<ELEMENT>((this->size() + other.size()) * 2);
- for(int pos = this->head, c = this->size(); c > 0; --c) {
- result.push(this->data[pos]);
- pos = this->next(pos);
- }
- for(int pos = other.head, c = other.size(); c > 0; --c) {
- result.push(other.data[pos]);
- pos = other.next(pos);
- }
- return result;
- }
- #endif //DEMOQUEUE3_SPECIALQUEUE_H
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement