Roke98

Queue

Oct 11th, 2022
734
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.54 KB | None | 0 0
  1. package Practico3;
  2. public class Queue<E> {
  3.     //Definicion de una constante para la capacidad por defecto de la Queue.
  4.     private final static int defaultCapacity = 10;
  5.     //Definicion de un Array de elementos.
  6.     private E[] container;
  7.     //Definicion de variables.
  8.     private int tail,head,count;
  9.    
  10.     //Constructor sin parametro.
  11.     public Queue() {
  12.         this(Queue.defaultCapacity);
  13.     }
  14.    
  15.     //Constructor con parametro(tamaΓ±o de la Queue).
  16.     public Queue(int capacity) {
  17.         this.container =(E[]) new Object[capacity];
  18.         this.head = 0;
  19.         this.tail = 0;
  20.         this.count = 0;
  21.     }
  22.    
  23.     //Metodo para saber si la Queue esta vacia.
  24.     public boolean isEmpty() {return this.count <= 0;}
  25.    
  26.     //Metodo para saber si la Queue esta llena.
  27.     public boolean isFull() {return this.count >= this.container.length;}
  28.    
  29.     //Metodo para saber si tail esta en la ultima posicion del Array.
  30.     private int next(int pos) {
  31.         ++pos;
  32.         if(pos >= this.container.length)return pos = 0;
  33.         return pos;
  34.     }
  35.    
  36.     //Metodo para agregar un elemento a la Queue.
  37.     //Si la Queue esta llena produce una excepcion.
  38.     public boolean add(E element) {
  39.         if(this.size() >= this.container.length) throw new IllegalStateException("Cola llena...");
  40.         this.container[this.tail] = element;
  41.         this.tail = this.next(this.tail);
  42.         ++this.count;
  43.         return true;
  44.     }
  45.    
  46.     //Metodo para agregar un elemento a la Queue.
  47.     //Si la Queue esta llena retorna false.
  48.     public boolean offer(E element) {
  49.         if(this.size() >= this.container.length) return false;
  50.         this.container[this.tail] = element;
  51.         this.tail = this.next(this.tail);
  52.         ++this.count;
  53.         return true;
  54.     }
  55.    
  56.     //Metodo para quitar un elemento de la Queue.
  57.     //Si la Queue esta vacia produce una excepcion.
  58.     public E remove() {
  59.         if(this.size() <= 0) throw new IllegalStateException("Cola vacia...");
  60.         E element = this.container[this.head];
  61.         this.head = this.next(this.head);
  62.         --this.count;
  63.         return element;
  64.     }
  65.    
  66.     //Metodo para quitar un elemento de la Queue.
  67.     //Si la Queue esta vacia retorna null.
  68.     public E poll() {
  69.         if(this.size() <= 0) return null;
  70.         E element = this.container[this.head];
  71.         this.head = this.next(this.head);
  72.         --this.count;
  73.         return element;
  74.     }
  75.    
  76.     //Metodo para saber cual es el proximo elemento a salir de la Queue.
  77.     //Si la Queue esta vacia produce una excepcion.
  78.     public E element() {
  79.         if(this.size() >= this.container.length) throw new IllegalStateException("Cola vacia...");
  80.         return this.container[this.head];
  81.     }
  82.    
  83.     //Metodo para saber cual es el proximo elemento a salir de la Queue.
  84.     //Si la Queue esta vacia retorna null.
  85.     public E peek() {
  86.         if(this.size() >= this.container.length) return null;
  87.         return this.container[this.head];
  88.     }
  89.    
  90.     //Metodo que retorna la cantidad de elementos que hay en la pila.
  91.     public int size(){return this.count;}
  92.    
  93.     public static  Queue<Object> union(Queue<?> queue1, Queue<?> queue2) {
  94.        
  95.             Queue<Object> result = new Queue<>(queue1.size() + queue2.size());
  96.            
  97.             for(int pos = queue1.head, cta = queue1.size(); cta > 0; pos = queue1.next(pos), --cta) {
  98.                 result.offer(queue1.container[pos]);
  99.             }
  100.            
  101.             for(int pos = queue2.head, cta = queue2.size(); cta > 0; pos = queue2.next(pos), --cta) {
  102.                 result.offer(queue2.container[pos]);
  103.             }
  104.            
  105.             return result;
  106.     }
  107.    
  108.     public Queue<Object> union(Queue<?> queue2) {
  109.         return Queue.union(this, queue2);
  110.     }
  111.    
  112.     public Object[] toArray() {
  113.         Object[] result = new Object[this.count];
  114.         for(int i = 0, pos = this.head, cta = this.size(); cta > 0; ++i, pos = this.next(pos), --cta) {
  115.             result[i] = this.container[pos];
  116.         }
  117.         return result;
  118.     }
  119.    
  120.     @Override
  121.     public String toString(){
  122.         if(this.size() <= 0)return " ";
  123.         StringBuilder sb = new StringBuilder();
  124.         sb.append("[" + this.container[this.head].toString());
  125.        
  126.         for (int cta = 1, pos = this.next(this.head); cta < this.size(); ++cta, pos = this.next(pos)) {
  127.             sb.append(", " + this.container[pos].toString());
  128.         }
  129.        
  130.         sb.append("]");
  131.         return sb.toString();
  132.     }
  133.  
  134. }
Advertisement
Add Comment
Please, Sign In to add comment