fork download
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. template<typename T>
  7. struct Node
  8. {
  9. Node *Next;
  10. Node *Prev;
  11. T val;
  12. };
  13.  
  14. template<typename T>
  15. class queue
  16. {
  17. Node<T> *Last;
  18. Node<T> *First;
  19. int size;
  20.  
  21. public:
  22. queue();
  23. ~queue();
  24. void push(T);
  25. void pop();
  26. void show_qF(std::ostream& stream);
  27. void show_qL(std::ostream& stream);
  28. bool empty();
  29. int show_size();
  30. };
  31.  
  32. template<typename T>
  33. queue<T>::queue()
  34. {
  35. Last = First = NULL;
  36. size = 0;
  37. }
  38.  
  39. template<typename T>
  40. queue<T>::~queue()
  41. {
  42. Node<T> *tmp;
  43. while(Last != NULL)
  44. {
  45. tmp = Last -> Prev;
  46. delete Last;
  47. Last = tmp;
  48. }
  49. }
  50.  
  51. template<typename T>
  52. void queue<T>::push(T n)
  53. {
  54. Node<T> *p = new Node<T>;
  55. p -> val = n;
  56. p -> Next = First;
  57. p -> Prev = NULL;
  58. size++;
  59.  
  60. if(First == NULL)
  61. {
  62. First = Last = p;
  63. Last -> Next = NULL;
  64. First -> Prev = NULL;
  65. return;
  66. }
  67.  
  68. First -> Prev = p;
  69. First = p;
  70. }
  71.  
  72. template<typename T>
  73. void queue<T>::pop()
  74. {
  75. if(Last == NULL) return;
  76.  
  77. Node<T> *tmp;
  78. tmp = Last;
  79. if(Last -> Prev != NULL)
  80. {
  81. Last = Last -> Prev;
  82. }
  83. else
  84. {
  85. Last = First = NULL;
  86. }
  87.  
  88. delete tmp;
  89. size--;
  90. }
  91.  
  92. template<typename T>
  93. int queue<T>::show_size()
  94. {
  95. return size;
  96. }
  97.  
  98. template<typename T>
  99. void queue<T>::show_qF(std::ostream& stream)
  100. {
  101. Node<T> *p;
  102. p = First;
  103. while(p != NULL)
  104. {
  105. stream<< p -> val <<std::endl;
  106. p = p -> Next;
  107. }
  108. }
  109.  
  110. template<typename T>
  111. void queue<T>::show_qL(std::ostream& stream)
  112. {
  113. Node<T> *p;
  114. p = Last;
  115. while(p != NULL)
  116. {
  117. stream<< p -> val <<std::endl;
  118. p = p -> Prev;
  119. }
  120. }
  121.  
  122. template<typename T>
  123. bool queue<T>::empty()
  124. {
  125. return First == NULL;
  126. }
  127.  
  128.  
  129. int main()
  130. {
  131. queue<std::string> q;
  132.  
  133. q.push("1");
  134. q.push("2");
  135. q.push("3");
  136.  
  137. q.pop();
  138.  
  139. q.show_qF(std::cout);
  140. return 0;
  141. }
Runtime error #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
3
2
1
A�ۗ&�+�ۗ&�+@�j'�+1@@ �j'�+��j'�+��j'�+2A`�j'�+��j'�+31
!�