Salve a tutti ragazzi , ho da poco iniziato l'argomento delle liste e sto trovando molta difficoltà con questo esercizio:
creare due code ordinate da inserire in una terza sempre mantenendo l'ordine, praticamente un merge.
credo di aver sbagliato proprio l'inserimento ma non ho idea di come fare, dovrei chiamare il metodo inserisci(n) ogni volta?
vi mostro l'intero programma..grazie a chi mi risponderà.
class nodo
{
public int info; //attributi
public nodo link;
public nodo() //costruttore classe "nodo"
{
info=0;
link=null;
}
}
public class coda {
public nodo testa;
public nodo fondo;
public int elementi;
public coda()
{
testa = null;
fondo=null;
elementi =0;
}
public boolean testa_vuota()
{
return testa==null && fondo==null;
}
public void inserisci (nodo n) //metodo inserisci elementi nella coda
{
if (!testa_vuota())
{
fondo.link = n;
fondo =n;
elementi ++;
}
else
{
testa=n;
fondo=n;
elementi = 1;
}
}
public void visualizza () //metodo visualizza elementi
{
nodo n;
n = testa;
System.out.println("N="+elementi);
{
System.out.println("\t"+n.info);
n=n.link;
}
}
}
public void merge(coda c1,coda c2,coda c3) //metodo merge
{
nodo n;
n=testa;
int i,j,k; //i = indice coda 1 , j = indice coda 2 , k = indice coda 3.
while(n!=null)
{
while(k<c.length) //finchè k è minore della lunghezza del vettore contenente i due vettori "a" e "b".
{
if(c1.n.info < c2.n.info) //se il valore presente nella coda 1 è minore di quello della coda 2...
{
c3.n.info=(c1.n.info); //questo viene inserito nella coda 3
if ( i<a.length) //se il vettore "a" non è ancora terminato
i++; //va avanti di indice
else
{
while (j<b.length) //altrimenti inserisce i valori rimasti della coda 2 nella coda 3.
{
c3.n.info=(c2.n.info);
}
}
}
else
{
c3.n.info=(c2.n.info);
if(j<b.length)
j++;
else
{
while (i<a.length)
{
c3.n.info=(c1.n.info);
}
}
}
k++;
n=n.link; //elemento successivo della coda
}
public static void main(String ergs[]){
int a[]={7,20,85};
coda c1=new coda();
int lunghezza1=a.length;
int b[]={3,40,93};
coda c2=new coda();
int lunghezza2=b.length;
int lunghezza3=lunghezza1+lunghezza2;
int c[lunghezza3];
coda c3=new coda();
System.out.println("----immissione dal fondo per coda1----");
c1.visualizza();
for(int i=0;i<lunghezza1;i++)
{
nodo n=new nodo();
n.info=(a[i]);
c1.inserisci(n);
c1.visualizza();
}
System.out.println("----immissione dal fondo per coda2----");
c2.visualizza();
for(int i=0;i<lunghezza2;i++)
{
nodo n=new nodo();
n.info=(b[i]);
c2.inserisci(n);
c2.visualizza();
}
System.out.println("----visualizzazione coda3----");
merge(c1,c2,c3);
c3.visualizza();
}
}