fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template<typename Type>
  5. struct Node {
  6. Node();
  7. Node<Type>* next = NULL;
  8. Node<Type>* prev = NULL;
  9. Type data;
  10. };
  11.  
  12. template<typename Type>
  13. class deque{
  14. private:
  15. Node<Type>* m_front = NULL;
  16. Node<Type>* m_back = NULL;
  17.  
  18. public:
  19. deque(Type key);
  20. ~deque();
  21. Node<Type>* back();
  22. Node<Type>* front();
  23. int size();
  24. bool empty();
  25. void push_front(Type key);
  26. void push_back(Type key);
  27. void pop_front();
  28. void pop_back();
  29. void print_in_order();
  30. };
  31.  
  32.  
  33. template<typename Type>
  34. deque<Type>::deque(Type key)
  35. {
  36. if (m_front != NULL || m_back != NULL)
  37. return;
  38. else
  39. {
  40. m_front = new Node<Type>();
  41. m_front->data = key;
  42. //prev = m_front;
  43. }
  44. }
  45.  
  46. template<typename Type>
  47. deque<Type>::~deque()
  48. {
  49. Node<Type>* delPtr;
  50. while (m_front->prev != NULL)
  51. {
  52. delPtr = m_front;
  53. cout << "Deleted " << m_front->data<<endl;
  54. m_front = m_front->prev;
  55. delete delPtr;
  56.  
  57. }
  58. m_back = NULL;
  59. delete m_front;
  60. }
  61.  
  62. template<typename Type>
  63. Node<Type>* deque<Type>::back()
  64. {
  65. if(back!= NULL)
  66. return back;
  67. else
  68. return NULL;
  69. }
  70.  
  71. template<class Type>
  72. Node<Type>* deque<Type>::front()
  73. {
  74. return front;
  75. }
  76.  
  77. template<typename Type>
  78. int deque<Type>::size()
  79. {
  80. int counter = 0;
  81. Node<Type>* temp = front;
  82. while (temp->back != NULL)
  83. {
  84. counter++;
  85. temp = temp->back;
  86. }
  87. return counter;
  88. }
  89.  
  90. template<typename Type>
  91. bool deque<Type>::empty()
  92. {
  93. if (front == NULL && back == NULL)
  94. return true;
  95. else
  96. return false;
  97. }
  98.  
  99. template<typename Type>
  100. void deque<Type>::push_front(Type key)
  101. {
  102. Node<Type>* temp = new Node<Type>();
  103. temp->data = key;
  104. temp->prev = m_front;
  105. m_front->next = temp;
  106. m_front = temp;
  107. }
  108.  
  109. template<typename Type>
  110. void deque<Type>::push_back(Type key)
  111. {
  112. Node<Type>* temp = new Node<Type>();
  113. temp->data = key;
  114. temp->next = m_back;
  115. m_back->prev = temp;
  116. m_back = temp;
  117. }
  118.  
  119. template<typename Type>
  120. inline void deque<Type>::pop_front()
  121. {
  122. if (front != NULL) {
  123. Node<Type>* delPtr = m_front;
  124. m_front = m_front->prev;
  125. m_front->next = NULL;
  126. delete delPtr;
  127. }
  128. else
  129. cout << "There is no front in empty deque" << endl;
  130. }
  131.  
  132. template<typename Type>
  133. void deque<Type>::pop_back()
  134. {
  135. if (m_back != NULL) {
  136. Node<Type>* delPtr = m_back;
  137. m_back = m_back->next;
  138. m_back->prev = NULL;
  139. delete delPtr;
  140. }
  141. else
  142. cout << "There is no back in empty deque " << endl;
  143. }
  144.  
  145. template<typename Type>
  146. void deque<Type>::print_in_order()
  147. {
  148. if (m_front == NULL)
  149. return;
  150. Node<Type>* temp = m_front;
  151. while (temp->prev != NULL) {
  152. cout << temp->data << " ";
  153. temp = temp->prev;
  154. }
  155. cout << endl;
  156. }
  157.  
  158. template<typename Type>
  159. inline Node<Type>::Node()
  160. {
  161. }
  162.  
  163. int main(){
  164. deque<int> qq(1);
  165. qq.push_front(2);
  166. qq.push_front(3);
  167. qq.print_in_order();
  168. return 0;
  169. }
Success #stdin #stdout 0s 4364KB
stdin
Standard input is empty
stdout
3 2 
Deleted 3
Deleted 2