Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define max(a, b) ((a) < (b) ? (b) : (a))
- #define min(a, b) ((a) > (b) ? (b) : (a))
- struct vector
- {
- int size, reserved;
- int *list;
- };
- typedef struct vector Vector;
- Vector *new_vector()
- {
- Vector *v = malloc(sizeof(Vector));
- v->size = 0;
- v->reserved = 0;
- v->list = NULL;
- return v;
- }
- void vector_push_back(Vector *v, int value)
- {
- if (v->size == v->reserved)
- {
- v->reserved = (v->reserved + 1) * 2;
- int *new_list = malloc(sizeof(int) * v->reserved);
- memcpy(new_list, v->list, v->size * sizeof(int));
- free(v->list);
- v->list = new_list;
- }
- v->list[v->size++] = value;
- }
- #define MAX 100000
- Vector *g[MAX];
- int queue[MAX], tail, head;
- void push_back(int value){
- queue[tail] = value;
- tail = (tail + 1)%MAX;
- }
- void push_front(int value){
- head = (head - 1 + MAX)%MAX;
- queue[head] = value;
- }
- int pop_front(){
- int first = queue[head];
- head = (head + 1)%MAX;
- return first;
- }
- int pop_back(){
- tail = (tail - 1 + MAX)%MAX;
- return queue[tail];
- }
- int size(){
- return (head<=tail?tail-head:MAX-head+tail);
- }
- void print_queue(){
- int i;
- for (i = head; i!=tail; i = (i+1)%MAX)
- printf("%d ", queue[i]);
- printf("\n");
- }
- int main()
- {
- while (1) {
- int t, x;
- scanf("%d", &t);
- if (t == 0)
- break;
- else if (t == 1) {
- printf("%d\n", pop_front());
- } else if (t == 2) {
- printf("%d\n", pop_back());
- } else if (t == 3) {
- scanf("%d", &x);
- push_front(x);
- } else if (t == 4) {
- scanf("%d", &x);
- push_back(x);
- }
- print_queue();
- }
- /*int n, i, j;
- scanf("%d",&n);
- for (i=0;i<n;++i)
- g[i] = new_vector();
- for (i = 1; i < n; ++i)
- {
- int x;
- scanf("%d", &x);
- vector_push_back(g[x], i);
- }
- */
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement