package Single_Linked_Queue2;
import java.util.NoSuchElementException;
/**
* Coada - Lista
* orice obiect poate fi implimentat in aceasta lista
*/
public class QueueLinkedList
{
private Node head; //se refera la primul node din lista
private Node tail; // se refera la ultimul nod din lista
private int size=0; // numarul de elemente din lista
/**
* Acest constructor initializeaza coada cu statutul de null.
* head = null
* tail = null
* size = 0;
*/
public QueueLinkedList() //initializarea unui stack gol
{
head=null;
tail=null;
size =0 ;
}
/**
* Returneaza numarul de elemente din lista
* @return numarul de elemente din lista
*/
public int size()
{
return size;
}
/**
* Adauga un elemet in lista
* @return
*/
public void addToListToTail(Object obj)
{
//Creaem un nou nod
//Acest node va fi legat in lista la sfirsit
Node n = new Node(obj);
//daca lista e goala,doar legam noul node dupa coada
if(tail != null)
{
tail.setNext(n);
}
//Tail(coada) listei i se schimba la nou nod
tail = n;
//Daca lista a fost goala, head tot trebue sa fie referinta la acest node.
if(head == null)
{
head = n;
}
//Lista are un nod - marim size();
size++;
}
/**
* Sterge un element de la inceputul listei
* @return returnneaza Obiectele
*/
public Object deleteFromListFromFront()
{
//daca coada este goala, se arunca exceptia
if(size == 0)
{
throw new NoSuchElementException("Cant remove an element from an empty queue.");
}
//Gasim elementul dela nodul din fata(head)
//Noi stim ca Head-ul va fi nenull, coada are elemente daca am ajuns aici
Object temp = head.getElement();
//Trecem Head-ul la urmatorul node din lista.acaesta face ca Headu-ul sa fie nereferit si va fi
//colectat de garbadge collector.
head=head.getNext();
//lista sa micsorat
size--;
//Daca lista e goala atunci ambele head si tail trebue sa fie null.
//Head-ul deja va fi null si nu e nevoie sa le modificam
if(size == 0)
{
tail = null;
}
return temp;
}
public void printL()
{
while(head!=null)
{
{
System.out.print(" "+head.getElement());
head=head.getNext();
}
}
}
}