Collection모듈에서 deque를 제공한다.
그 외로 []를 이용한 접근이 가능하다.
from collections import deque
dq = deque()
for i in range(5):
dq.append(i)
dq.appendleft(i)
print(dq)
dq.pop()
dq.pop()
dq.popleft()
dq.popleft()
print(dq)
a = [11, 22, 33]
dq.extend(a)
dq.extendleft(a)
print(dq)
dq[0] = 0
dq[1] = 1
dq[2] = 2
dq.remove(22)
print(dq)
dq.clear()
print(dq)
배열로 queue를 구현한 것과 크게 다르지 않다.
위 문제를 C로 풀면 이런 코드가 작성된다.
#include <stdio.h>
#include <string.h>
#define MAX 100000
#define s(b) !strcmp(op, b)
int front, rear;
int queue[MAX];
int main() {
int t, i, n;
front = 0;
rear = 0;
char op[100];
scanf("%d", &t);
for (i = 0; i < t; i++) {
scanf("%s", op);
if (s("push_front")) {
scanf("%d", &n);
front = (--front + MAX) % MAX;
queue[front] = n;
} else if (s("push_back")) {
scanf("%d", &n);
queue[rear] = n;
rear = ++rear % MAX;
} else if (s("pop_front")) {
if (rear == front)
printf("-1\\n");
else {
printf("%d\\n", queue[front]);
front = ++front % MAX;
}
} else if (s("pop_back")) {
if (rear == front)
printf("-1\\n");
else {
rear = (MAX + rear - 1) % MAX;
printf("%d\\n", queue[rear]);
}
} else if (s("size")) {
printf("%d\\n", (MAX + rear - front) % MAX);
} else if (s("empty")) {
printf("%d\\n", (front == rear) ? 1 : 0);
} else if (s("front")) {
if (front == rear)
printf("-1\\n");
else
printf("%d\\n", queue[front]);
} else if (s("back")) {
if (front == rear)
printf("-1\\n");
else
printf("%d\\n", queue[(MAX + rear - 1) % MAX]);
}
}
return 0;
}