Ladies_Man

3_3 Cycle BOOFA Кольцевой буфер

Dec 26th, 2013
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.74 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int *array, n, k;
  6.  
  7. char emp[6] = "EMPTY";
  8. char enq[4] = "ENQ";
  9. char deq[4] = "DEQ";
  10.  
  11. struct queue {
  12.     int *data;
  13.     int head, tail;
  14.     int qcount, cap;
  15. } qforcopy;
  16.  
  17. struct queue InitQueue (int size)
  18. {
  19.     struct queue turn;
  20.     turn.data = malloc(size * sizeof(int));
  21.     turn.head = 0;
  22.     turn.tail = 0;
  23.     turn.qcount = 0;
  24.     turn.cap = size;
  25.     return turn;
  26. }
  27.  
  28. void QueueEmpty(struct queue *s)
  29. {
  30.     if (0 == s->qcount) printf("true\n");
  31.     else printf("false\n");
  32. }
  33.  
  34. void EnQueue (struct queue *s, int x)
  35. {
  36.     struct queue turn;
  37.     int i, prev_cap = s->cap;
  38.     if (s->qcount == s->cap) {
  39.         s->cap = s->cap * 2;
  40.         s->head += prev_cap;
  41.         s->data = realloc(s->data, prev_cap * 2 * sizeof(int));
  42.  
  43.         for (i = s->tail; i < prev_cap; i++) s->data[prev_cap + i] = s->data[i];
  44.  
  45.     }
  46.     //struct queue turn;
  47.     s->data[s->tail] = x;
  48.     s->tail++;
  49.     if (s->tail == s->cap) s->tail = 0;
  50.     s->qcount++;
  51.  
  52.  
  53. }
  54.  
  55. void DeQueue (struct queue *s)
  56. {
  57.     struct queue turn;
  58.     int ret_val = s->data[s->head];
  59.     s->head++;
  60.     if (s->head == s->cap) s->head = 0;
  61.     s->qcount--;
  62.     printf("%d\n", ret_val);
  63. }
  64.  
  65. int main()
  66. {
  67.     int enq_val, i = 4;
  68.     char str[6];
  69.  
  70.     scanf ("%d", &n);
  71.  
  72.     struct queue turn;
  73.     turn = InitQueue (i);
  74.  
  75.     for (i = 0; i < n; i++) {
  76.         scanf ("%s", str);
  77.         if (0 == strcmp(str, emp)) QueueEmpty(&turn);
  78.         else {
  79.             if (0 == strcmp(str, enq)) {
  80.                 scanf ("%d", &enq_val);
  81.                 EnQueue (&turn, enq_val);
  82.             }
  83.             else DeQueue (&turn);
  84.         }
  85.     }
  86.  
  87.     free(turn.data);
  88.     free(array);
  89.     return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment