Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.65 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <malloc.h>
  4. #include <math.h>
  5. #include <string.h>
  6.  
  7. typedef struct node
  8. {
  9.     int data;
  10.     int next;
  11.     int prev;
  12. } list;
  13.  
  14. void deploy_front(list* set, int* first, int* last, int* n, int indx, int data)
  15. {
  16.     set[*n].data = data;
  17.     if (indx == -1) {
  18.         set[*n].next = *first;
  19.         set[*n].prev = -1;
  20.         set[*first].prev = *n;
  21.         *first = *n;
  22.         if (*last == -1)
  23.             *last = *n;
  24.     }
  25.     else
  26.     {
  27.         set[*n].next = set[indx].next;
  28.         set[*n].prev = indx;
  29.         set[indx].next = *n;
  30.  
  31.         if (set[*n].next != -1)
  32.         {
  33.             set[set[*n].next].prev = *n;
  34.         }
  35.         else
  36.             *last = *n;
  37.     }
  38.  
  39.     printf("%d\n", *n);
  40.     *n += 1;
  41. }
  42.  
  43. void deploy_back(list* set, int* first, int* last, int* n, int indx, int data)
  44. {
  45.     if (indx == -1)
  46.     {
  47.         set[*n].next = -1;
  48.         set[*n].prev = *last;
  49.         set[*last].next = *n;
  50.         *last = *n;
  51.         if (*first == -1)
  52.             *first = *n;
  53.     }
  54.     else
  55.     {
  56.         set[*n].prev = set[indx].prev;
  57.         set[*n].next = indx;
  58.         set[indx].prev = *n;
  59.  
  60.         if (set[*n].prev != -1)
  61.         {
  62.             set[set[*n].prev].next = *n;
  63.         }
  64.         else
  65.             *first = *n;
  66.     }
  67.  
  68.     set[*n].data = data;
  69.     printf("%d\n", *n);
  70.     *n += 1;
  71. }
  72.  
  73. void pop(list* set, int* last, int* first, int indx)
  74. {
  75.     printf("%d\n", set[indx].data);
  76.  
  77.     if (*last == indx)
  78.         *last = set[indx].prev;
  79.  
  80.     if (*first == indx)
  81.         *first = set[indx].next;
  82.  
  83.     if (set[indx].prev != -1)
  84.         set[set[indx].prev].next = set[indx].next;
  85.  
  86.     if (set[indx].next != -1)
  87.         set[set[indx].next].prev = set[indx].prev;
  88.  
  89.     if (set[indx].next == -1)
  90.         *last = set[indx].prev;
  91.  
  92.     if (set[indx].prev == -1)
  93.         *first = set[indx].next;
  94. }
  95.  
  96.  
  97. int main()
  98. {
  99.     freopen("input.txt", "r", stdin);
  100.     freopen("output.txt", "w", stdout);
  101.  
  102.     int t = 0;
  103.     scanf("%d", &t);
  104.  
  105.     for (int k = 0; k < t; k++)
  106.     {
  107.         int n = 0;
  108.         int q = 0;
  109.         int first = 0;
  110.         int last = 0;
  111.  
  112.         scanf("%d %d %d %d", &n, &first, &last, &q);
  113.         list* arr = (list*)malloc(sizeof(list) * (n + q) + 2);
  114.        
  115.         for (int i = 0; i < n; i++)
  116.         {
  117.             scanf("%d ", &arr[i].data);
  118.             scanf("%d %d", &arr[i].next, &arr[i].prev);
  119.         }
  120.  
  121.         for (int i = 0; i < q; i++)
  122.         {
  123.             int indx = 0, act_num = 0;
  124.             scanf("%d %d", &act_num, &indx);
  125.  
  126.             if (act_num == -1)
  127.             {
  128.                 int data = 0;
  129.                 scanf("%d", &data);
  130.                 deploy_back(arr, &first, &last, &n, indx, data);
  131.             }
  132.  
  133.             else if (act_num == 0)
  134.             {
  135.                 pop(arr, &last, &first, indx);
  136.             }
  137.  
  138.             else if (act_num == 1)
  139.             {
  140.                 int data = 0;
  141.                 scanf("%d", &data);
  142.                 deploy_front(arr, &first, &last, &n, indx, data);
  143.             }
  144.         }
  145.         printf("===\n");
  146.  
  147.         while (first != -1)
  148.         {
  149.             printf("%d\n", arr[first].data);
  150.             first = arr[first].next;
  151.         }
  152.  
  153.         printf("===\n");
  154.     }
  155.  
  156.     return 0;
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement