Advertisement
Guest User

Untitled

a guest
Jul 28th, 2015
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.05 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define max(a, b) ((a) < (b) ? (b) : (a))
  6. #define min(a, b) ((a) > (b) ? (b) : (a))
  7.  
  8. struct vector
  9. {
  10.     int size, reserved;
  11.     int *list;
  12. };
  13.  
  14. typedef struct vector Vector;
  15.  
  16. Vector *new_vector()
  17. {
  18.     Vector *v = malloc(sizeof(Vector));
  19.     v->size = 0;
  20.     v->reserved = 0;
  21.     v->list = NULL;
  22.     return v;
  23. }
  24.  
  25. void vector_push_back(Vector *v, int value)
  26. {
  27.     if (v->size == v->reserved)
  28.     {
  29.         v->reserved = (v->reserved + 1) * 2;
  30.         int *new_list = malloc(sizeof(int) * v->reserved);
  31.         memcpy(new_list, v->list, v->size * sizeof(int));
  32.         free(v->list);
  33.         v->list = new_list;
  34.     }
  35.     v->list[v->size++] = value;
  36. }
  37.  
  38. #define MAX 100000
  39.  
  40. Vector *g[MAX];
  41. int queue[MAX], tail, head;
  42.  
  43. void push_back(int value){
  44.     queue[tail] = value;
  45.     tail = (tail + 1)%MAX;
  46. }
  47.  
  48. void push_front(int value){
  49.     head = (head - 1 + MAX)%MAX;
  50.     queue[head] = value;
  51. }
  52.  
  53. int pop_front(){
  54.     int first = queue[head];
  55.     head = (head + 1)%MAX;
  56.     return first;
  57. }
  58.  
  59. int pop_back(){
  60.     tail = (tail - 1 + MAX)%MAX;
  61.     return queue[tail];
  62. }
  63.  
  64. int size(){
  65.     return (head<=tail?tail-head:MAX-head+tail);
  66. }
  67.  
  68. void print_queue(){
  69.     int i;
  70.     for (i = head; i!=tail; i = (i+1)%MAX)
  71.         printf("%d ", queue[i]);
  72.     printf("\n");
  73. }
  74.  
  75. int main()
  76. {
  77.     while (1) {
  78.         int t, x;
  79.         scanf("%d", &t);
  80.         if (t == 0)
  81.             break;
  82.         else if (t == 1) {
  83.             printf("%d\n", pop_front());
  84.         } else if (t == 2) {
  85.             printf("%d\n", pop_back());
  86.         } else if (t == 3) {
  87.             scanf("%d", &x);
  88.             push_front(x);
  89.         } else if (t == 4) {
  90.             scanf("%d", &x);
  91.             push_back(x);
  92.         }
  93.         print_queue();
  94.     }
  95.  
  96.     /*int n, i, j;
  97.     scanf("%d",&n);
  98.     for (i=0;i<n;++i)
  99.         g[i] = new_vector();
  100.     for (i = 1; i < n; ++i)
  101.     {
  102.         int x;
  103.         scanf("%d", &x);
  104.         vector_push_back(g[x], i);
  105.     }
  106. */
  107.  
  108.     return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement