Как усовершенствовать класс Queue таким образом, чтобы в очереди можно было хранить другие типы данных, например значения типа int или double?
Именно int, double, float, char, byte, long, short - никак. Несмотря на то, что в джаве ООП, эти типы не являются объектами. Они не наследуются от Object'a, у них нет общего предка. Поэтому для них не работают дженерики.
Можно использовать boxed-типы Integer, Double, Float, etc. Тогда можно обобщить тип очереди  в духеclass Queue <T> {
    private T[] q;
   ...
}
...
Queue<Integer> = new Queue<>();
Как то так: public class Queue<T> {
  
      T q[]; // Array to storage elements in queue	
      int putloc, getloc;
      
      // indexes of placement and extracting  queue elements
      
      Queue(int size) { q = (T[])new Object[size+1];;
      
      // allocate memory for queue
      
      putloc = getloc = 0; }
      
      // put symbol in queue
      
      void put(T ch) {
        if(putloc==q.length-1) {
          System.out.println(" - Queue is full.");
          return; }
        putloc++;
        q[putloc] = ch; }
      
      // extract symbol from the queue
      
      T get() { 
        if(getloc == putloc) { 
          System.out.println(" - Queue is empty."); 
          return null; } 
        getloc++;
        return q[getloc]; 
        }
    }
Важно понимать что типами в queue могут быть только ссылочные типы:Queue<int> queue = new Queue<>(5);  // не правильно
Queue<Integer> queue = new Queue<>(5); // правильно