Skip to content

Instantly share code, notes, and snippets.

@jangsoopark
Created February 15, 2024 13:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jangsoopark/4f98a0cbefe90d2293353d92b5235892 to your computer and use it in GitHub Desktop.
Save jangsoopark/4f98a0cbefe90d2293353d92b5235892 to your computer and use it in GitHub Desktop.
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
typedef struct Deque
{
int* buffer;
int front;
int back;
int count;
int size;
} Deque;
int size(Deque* q)
{
return q->count;
}
bool empty(Deque* q)
{
return size(q) == 0;
}
bool full(Deque* q)
{
return size(q) == q->size;
}
bool push_front(Deque* q, int v)
{
if (full(q))
return false;
q->front = (q->front - 1 + q->size) % q->size;
q->buffer[q->front] = v;
q->count++;
return true;
}
bool push_back(Deque* q, int v)
{
if (full(q))
return false;
q->buffer[q->back] = v;
q->back = (q->back + 1) % q->size;
q->count++;
return true;
}
int pop_front(Deque* q)
{
if (empty(q))
return -1;
q->count--;
q->front = (q->front + 1) % q->size;
return q->buffer[ (q->front - 1 + q->size) % q->size ];
}
int pop_back(Deque* q)
{
if (empty(q))
return -1;
q->count--;
q->back = (q->back - 1 + q->size) % q->size;
return q->buffer[ q->back ];
}
int front(Deque* q)
{
if (empty(q))
return -1;
return q->buffer[q->front];
}
int back(Deque* q)
{
if (empty(q))
return -1;
return q->buffer[ (q->back - 1 + q->size) % q->size ];
}
int main(void)
{
Deque q = {NULL, 0, 0, 0, 0};
int N, command, v, i;
scanf("%d", &N);
q.buffer = (int*)malloc(sizeof(int) * N);
q.size = N;
while (N > 0)
{
scanf("%d", &command);
switch (command)
{
case 1:
scanf("%d", &v);
push_front(&q, v);
break;
case 2:
scanf("%d", &v);
push_back(&q, v);
break;
case 3:
printf("%d\n", pop_front(&q));
break;
case 4:
printf("%d\n", pop_back(&q));
break;
case 5:
printf("%d\n", size(&q));
break;
case 6:
printf("%d\n", empty(&q));
break;
case 7:
printf("%d\n", front(&q));
break;
case 8:
printf("%d\n", back(&q));
break;
default:
break;
}
N--;
}
free(q.buffer);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment