import java.util.*;
public class Q<E> {
private final Deque<E> queue;
private final int size;
public Q(int numElements) {
this.size = numElements;
queue = new ArrayDeque<E>(this.size);
}
// προσθήκη στο τέλος της ουράς
public boolean push(E e) {
return !isFull() && queue.offer(e);
}
// αφαίρεση από την αρχή της ουράς
public E pop() {
return queue.poll();
}
// προσπέλαση της αρχής της ουράς
public E peek() {
return queue.peek();
}
public boolean isEmpty() {
return queue.isEmpty();
}
public boolean isFull() {
return queue.size() == size;
}
@Override
public String toString() {
return queue.toString();
}
public static void main(String[] args) {
Q<Integer> q = new Q<>(3);
q.push(10);
q.push(20);
q.push(30);
System.out.println(q);
System.out.println(q.pop());
System.out.println(q.peek());
System.out.println(q);
Deque<Integer> deque = new ArrayDeque<>();
deque.offerLast(10);
deque.offerLast(20);
deque.offerLast(30);
System.out.println(deque);
System.out.println(deque.peekFirst()); // επιστρέφει null αν η ουρά είναι άδεια
System.out.println(deque.peekLast()); // επιστρέφει null αν η ουρά είναι άδεια
System.out.println(deque.getFirst()); // εμφανίζει NoSuchElementException αν η ουρά είναι άδεια
System.out.println(deque.getLast()); // εμφανίζει NoSuchElementException αν η ουρά είναι άδεια
System.out.println(deque.pollFirst());
System.out.println(deque.pollLast());
System.out.println(deque.removeFirst());
System.out.println(deque);
}
}