You can simulate a deque using two stacks. One stack for the front, one for the back. When one is empty and you need to access it, move elements from the other.
You get amortized per operation. It's rarely needed in contests, but useful if the language doesn't have a built-in deque.
Stacks and queues are fundamentally related. Deques unify both.