paranid5

Deque

Jun 21st, 2020
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <malloc.h>
  4.  
  5. struct deque
  6. {
  7.     int* d;
  8.     size_t size;
  9. };
  10.  
  11. void push_back(struct deque *x, int value)
  12. {
  13.     (*x).size++;
  14.     (*x).d = (int*)realloc((*x).d, (*x).size * sizeof(int));
  15.     (*x).d[(*x).size - 1] = value;
  16. }
  17.  
  18. void pop_back(struct deque *x)
  19. {
  20.     if((*x).size == 0)
  21.     {
  22.         puts("error");
  23.         return;
  24.     }
  25.     printf("%d\n",(*x).d[(*x).size - 1]);
  26.     (*x).size--;
  27.     (*x).d = (int*)realloc((*x).d, (*x).size * sizeof(int));
  28. }
  29.  
  30. void push_front(struct deque *x, int value)
  31. {
  32.     (*x).size++;
  33.     (*x).d = (int*)realloc((*x).d, (*x).size * sizeof(int));
  34.     (*x).d[(*x).size - 1] = value;
  35.     for(unsigned int i = (*x).size - 1; i > 0; i--)
  36.     {
  37.         (*x).d[i] += (*x).d[i - 1];
  38.         (*x).d[i - 1] = (*x).d[i] - (*x).d[i - 1];
  39.         (*x).d[i] -= (*x).d[i - 1];
  40.     }
  41. }
  42.  
  43. void pop_front(struct deque *x)
  44. {
  45.     if((*x).size == 0)
  46.     {
  47.         puts("error");
  48.         return;
  49.     }
  50.     printf("%d\n",*((*x).d));
  51.     for(int i = 0; i < (*x).size - 1; i++)
  52.     {
  53.         (*x).d[i] += (*x).d[i + 1];
  54.         (*x).d[i + 1] = (*x).d[i] - (*x).d[i + 1];
  55.         (*x).d[i] -= (*x).d[i + 1];
  56.     }
  57.     (*x).size--;
  58.     (*x).d = (int*)realloc((*x).d, (*x).size * sizeof(int));
  59. }
  60.  
  61. void clear(struct deque *x)
  62. {
  63.     (*x).size = 0;
  64.     (*x).d = (int*)realloc((*x).d, 0);
  65. }
  66.  
  67. int main()
  68. {
  69.     struct deque s;
  70.     s.size = 0;
  71.     s.d = (int*)malloc(0);
  72.     char command[100];
  73.     do
  74.     {
  75.         scanf("%s", command);
  76.         if(strcmp(command, "exit") == 0) puts("bye");
  77.         else if(strcmp(command, "clear") == 0) clear(&s), puts("ok");
  78.         else if(strcmp(command, "size") == 0) printf("%u\n", s.size);
  79.         else if(strcmp(command, "front") == 0)
  80.             (s).size == 0 ? puts ( "error" ) : printf ( "%d\n", *(s.d) );
  81.         else if(strcmp(command, "back") == 0)
  82.             (s).size == 0 ? puts ( "error" ) : printf("%d\n", s.d[s.size - 1]);
  83.         else if(strcmp(command, "push_back") == 0)
  84.         {
  85.             int n = 0;
  86.             scanf("%d", &n);
  87.             push_back(&s, n);
  88.             puts("ok");
  89.         }
  90.         else if(strcmp(command, "push_front") == 0)
  91.         {
  92.             int n = 0;
  93.             scanf("%d", &n);
  94.             push_front(&s, n);
  95.             puts("ok");
  96.         }
  97.         else if(strcmp(command, "pop_back") == 0) pop_back(&s);
  98.         else pop_front(&s);
  99.     }
  100.     while(strcmp(command, "exit") != 0);
  101.     free(s.d);
  102.     return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment