Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "DoubleEndedQueue.h"
- #include <stdexcept>
- #include <iostream>
- // create new array of size "size" and type "T"
- template< class T, int size >
- DoubleEndedQueue<T, size>::DoubleEndedQueue() : count(0) {
- front = 0;
- back = 0;
- array = new T[size];
- }
- // check if queue is full
- template< class T, int size>
- int DoubleEndedQueue<T, size>::full() {
- return size == count;
- // return front = back;
- }
- // check if queue if empty
- template< class T, int size>
- int DoubleEndedQueue<T, size>::empty() {
- return count == 0;
- // return back == (size-1);
- }
- // push element at front of queue if it is not full
- // set front to the new position
- template< class T, int size>
- void DoubleEndedQueue<T, size>::push_front(T const &s) {
- if(!full()) {
- array[front] = s;
- front--;
- front = front % size;
- count++;
- } else std::cout << "DEQ full, push_front failed :(" << std::endl;
- }
- // pop element from front of queue
- // set front to new position
- // throw runtime_error if deque is empty
- template< class T, int size>
- T DoubleEndedQueue<T, size>::pop_front() throw(std::runtime_error) {
- if(!empty()) {
- int tmp = front;
- --count;
- // front++;
- // front = front % size;
- if( (front+1) <= (size-1) )
- front++;
- else
- front = 0;
- return array[tmp];
- } else throw std::runtime_error("Deque is empty, pop_front failed!");
- }
- // pushes element at back of queue
- // set back to new position
- template< class T, int size>
- void DoubleEndedQueue<T, size>::push_back(T const &s) {
- if(!full()) {
- count++;
- array[back] = s;
- back++;
- back = back % size;
- } else std::cout << "DEQ full, push_back failed :(" << std::endl;
- }
- // pop element from back of queue
- // set back to new position
- // throw runtime_error if deque is empty
- template< class T, int size>
- T DoubleEndedQueue<T, size>::pop_back() throw(std::runtime_error) {
- if(!empty()){
- int tmp = back;
- --count;
- // back--;
- // back = back % size;
- if ( (back-1) >= 0)
- back--;
- else
- back = size-1;
- return array[tmp];
- } else throw std::runtime_error("Deque is empty, pop_back failed!");
- }
- // print out all elements
- template< class T, int size>
- void DoubleEndedQueue<T, size>::print() {
- std::cout << "Deque contains: ";
- for(int i=0; i<size; i++)
- std::cout << array[i] << " - ";
- std::cout << std::endl;
- }
Add Comment
Please, Sign In to add comment