fork download
  1. #include <stdio.h>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. enum {
  7. CMD_LENGTH,
  8. CMD_PRINT,
  9. CMD_INSERT,
  10. CMD_WSTAW,
  11. CMD_WYJMIJ,
  12. CMD_R,
  13. CMD_ERROR
  14. } ecmd;
  15.  
  16. struct Elem {
  17. int key;
  18. Elem *prev, *next;
  19. Elem(Elem *p, Elem *n, int k) : prev(p), next(n), key(k) { }
  20. };
  21.  
  22. char cmd;
  23. int n;
  24. int dlugosc=0;
  25. bool isEmptyQueue = true;
  26. Elem *first = 0, *last = 0;
  27.  
  28. int parseEnum(char cmd)
  29. {
  30. return cmd == 'L' ? CMD_LENGTH :
  31. cmd == 'P' ? CMD_PRINT :
  32. cmd == 'E' ? CMD_WSTAW :
  33. cmd == 'D' ? CMD_WYJMIJ :
  34. cmd == 'R' ? CMD_R :
  35. CMD_ERROR;
  36. }
  37.  
  38. Elem *search(int key)
  39. {
  40. if(!first)
  41. return NULL;
  42. Elem *tmp = last;
  43. while(tmp->key != key && tmp != first)
  44. tmp = tmp->prev;
  45.  
  46. if (tmp->key == key)
  47. return tmp;
  48. return NULL;
  49. }
  50.  
  51. void printAll()
  52. {
  53. if(!first) printf("-\n");
  54. else {
  55. Elem *tmp = first;
  56. while(tmp != last) {
  57. printf("%d<->", tmp->key);
  58. tmp = tmp->next;
  59. }
  60. printf("%d\n", last->key);
  61. }
  62. }
  63.  
  64. int totalLength()
  65. {
  66. if(!first) return 0;
  67. int len(1);
  68. Elem *tmp = first;
  69. while(tmp->next != NULL) { tmp = tmp->next; len++; }
  70. return len;
  71. }
  72.  
  73. void wstaw(int n)
  74. {
  75. if (first==0 && totalLength()==0)//nie ma kolejki
  76. {
  77. Elem* A=new Elem(NULL,NULL,n);
  78. last=A;
  79. first=A;
  80. }
  81. else if (dlugosc<totalLength() )//jest kolejka ale z nieużywanym ogonkiem
  82. {
  83. last->key=n;
  84. last=last->next;
  85. }
  86. else if (first==0 && totalLength()!=0)//kolejka jest i jest pusta
  87. {
  88. first=last;
  89. first->key=n;
  90. }
  91. else//kolejka jest i jest pełna
  92. {
  93. Elem* A=new Elem(last,NULL,n);
  94. last->next=A;
  95. last=last->next;
  96. }
  97. dlugosc++;
  98. }
  99.  
  100. void wyjmij(int n)
  101. {
  102. if (first==0)
  103. {
  104. while(n--)
  105. cout<<"- ";
  106. cout<<endl;
  107. }
  108. else
  109. {
  110. while(dlugosc>1 && n--)
  111. {
  112. cout<<last->key<<" ";
  113. Elem* tmp;
  114. tmp=last;
  115. last=last->prev;
  116. last->next=tmp;
  117. dlugosc--;
  118. }
  119. if (dlugosc==1 && n>0)
  120. {
  121. cout<<last->key<<" ";
  122. first=0;
  123. dlugosc--;
  124. n--;
  125. }
  126. if (dlugosc==0 && n>0)
  127. {
  128. while(n--)
  129. cout<<"- ";
  130. }
  131. cout<<endl;
  132. }
  133. }
  134.  
  135. int main()
  136. {
  137. int value;
  138. isEmptyQueue = true;
  139. int n;
  140. while(scanf("%c", &cmd) > 0) {
  141. switch (parseEnum(cmd))
  142. {
  143. case CMD_LENGTH:
  144. printf("%d\n", totalLength());
  145. break;
  146. case CMD_PRINT:
  147. printAll();
  148. break;
  149. case CMD_WSTAW:
  150. cin>>n;
  151. wstaw(n);
  152. break;
  153. case CMD_WYJMIJ:
  154. cin>>n;
  155. wyjmij(n);
  156. break;
  157.  
  158. case CMD_ERROR:
  159. default:
  160. break;
  161. }
  162.  
  163. }
  164. return 0;
  165. }
Success #stdin #stdout 0s 3036KB
stdin
P
L
D 3
E 4
E 3
P
L
D 1
P
L
E 7
E -1
P
L
D 5
P
L
E 0
E 2
P
stdout
-
0
- - - 
4<->3
2
3 
4
2
7<->3<->-1
3
-1 3 7 - - 
-
0
0<->2