Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<malloc.h>
- struct Queue
- {
- signed long long * data;
- int cap;
- int count;
- int head;
- int tail;
- };
- void InitQueue(struct Queue * q, int size)
- {
- q->data = malloc(sizeof(signed long long)*size);
- q->cap = 4;
- q->count = 0;
- q->head = 0;
- q->tail = 0;
- }
- void QueueEmpty(struct Queue * q)
- {
- if(q->count == 0)
- {
- printf("true\n");
- }
- else
- {
- printf("false\n");
- }
- }
- void Enqueue(struct Queue * q, signed long long x)
- {
- int i;
- if(q->count == q->cap)
- {
- q->cap *= 2;
- for(i = 1; i <= q->cap/2-q->head; i++)
- {
- q->data[q->cap-i] = q->data[q->cap/2-i];
- }
- q->head += q->cap/2;
- q->data[q->tail] = x;
- q->tail += 1;
- q->count += 1;
- }
- else
- {
- q->data[q->tail] = x;
- q->tail += 1;
- q->count += 1;
- if(q->tail == q->cap) { q->tail = 0; }
- }
- }
- void Dequeue(struct Queue * q)
- {
- printf("%lld\n", q->data[q->head]);
- q->head += 1;
- if(q->head == q->cap){ q->head = 0; }
- q->count -= 1;
- }
- int main()
- {
- struct Queue q;
- int n, i;
- signed long long x;
- char str[6];
- InitQueue(&q, 100000);
- scanf("%d", &n);
- for(i = 0; i < n; i++)
- {
- scanf("%s", str);
- if( strcmp(str, "EMPTY") == 0 )
- {
- QueueEmpty(&q);
- continue;
- }
- if( strcmp(str, "ENQ") == 0 )
- {
- scanf("%lld", &x);
- Enqueue(&q, x);
- continue;
- }
- if( strcmp(str, "DEQ") == 0 )
- {
- Dequeue(&q);
- continue;
- }
- }
- free(q.data);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement