Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.05 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct Node {
  6. Node* next;
  7. Node* prev;
  8. int id;
  9. };
  10.  
  11. struct Dequeue {
  12. Node* head = NULL;
  13. Node* tail = NULL;
  14. Node* centre = NULL;
  15. int size = 0;
  16. };
  17.  
  18. void pushEnd(Dequeue* dequeue, int id) {
  19. Node* newNode = new Node {NULL, dequeue->tail, id};
  20. if (dequeue->size == 0) {
  21. dequeue->head = newNode;
  22. dequeue->centre = newNode;
  23. } else if (dequeue->size != 0) {
  24. dequeue->tail->next = newNode;
  25. if (dequeue->size % 2 == 0) {
  26. dequeue->centre = dequeue->centre->next;
  27. }
  28. }
  29. dequeue->tail = newNode;
  30. dequeue->size++;
  31. }
  32.  
  33. void pop(Dequeue* dequeue) {
  34. Node* oldHead = dequeue->head;
  35. dequeue->head = dequeue->head->next;
  36. if (dequeue->size % 2 == 0) {
  37. dequeue->centre = dequeue->centre->next;
  38. dequeue->head->prev = NULL;
  39. }
  40. delete oldHead;
  41. dequeue->size--;
  42. }
  43.  
  44. void pushCentre(Dequeue* dequeue, int id) {
  45. if (dequeue->size == 0) {
  46. pushEnd(dequeue, id);
  47. return;
  48. }
  49. Node* newNode = new Node {dequeue->centre->next, dequeue->centre, id};
  50. if (dequeue->size == 1) dequeue->tail = newNode;
  51. dequeue->centre->next = newNode;
  52. if (dequeue->size > 1) newNode->next->prev = newNode;
  53. if (dequeue->size % 2 == 0) dequeue->centre = newNode;
  54. dequeue->size++;
  55. }
  56.  
  57. void clear(Dequeue* dequeue) {
  58. while (dequeue->size != 0) {
  59. pop(dequeue);
  60. }
  61. delete dequeue;
  62. }
  63.  
  64. int main() {
  65. Dequeue* dequeue = new Dequeue;
  66. int numOfOper;
  67. cin >> numOfOper;
  68. for (int i = 0; i < numOfOper; ++i) {
  69. char curr;
  70. cin >> curr;
  71. if (curr == '+') {
  72. int id;
  73. cin >> id;
  74. pushEnd(dequeue, id);
  75. } else if (curr == '*') {
  76. int id;
  77. cin >> id;
  78. pushCentre(dequeue, id);
  79. } else if (curr == '-') {
  80. cout << dequeue->head->id << endl;
  81. pop(dequeue);
  82. }
  83. }
  84. clear(dequeue);
  85. return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement