STRUTTURE DATI: LISTE. MERGE TRA CODE

di il
2 risposte

STRUTTURE DATI: LISTE. MERGE TRA CODE

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();
		          }

}

2 Risposte

  • Re: STRUTTURE DATI: LISTE. MERGE TRA CODE

    Non so a che punto dello sviluppo di lise sei arrivato ma io la farei cosi':
    nella coda definitiva creo un metodo che carica i dati
    in poche parole, presumendo che i nodi delle 3 liste siano uguali (stesse variabili), ottieni un iteratore per le due liste da fondere e fintanto esista un ulteriore nodo lo inserisci nella nuova lista
    esempio
    
    //la tua lista e'
    //public List l = new List();
    
    //.......
    
    public void merge()
    {
    	ListIterator iterator1 = list1.listIterator();
    	while (iterator1.hasNext())
    	{
    		insert(iterator1.next().info); //dove insert e' il metodo di inserimento in coda in modo da avere le cose ordinate
    	}
    	
    	ListIterator iterator2 = list2.listIterator();
    	while (iterator2.hasNext())
    	{
    		insert(iterator2.next().info); //dove insert e' il metodo di inserimento in coda in modo da avere le cose ordinate
    	}
    }
    
    Non so se ho reso l'idea ma sono disponibile per ulteriori chiarimenti
  • Re: STRUTTURE DATI: LISTE. MERGE TRA CODE

    antomau96 ha scritto:


    Non so a che punto dello sviluppo di lise sei arrivato ma io la farei cosi':
    nella coda definitiva creo un metodo che carica i dati
    in poche parole, presumendo che i nodi delle 3 liste siano uguali (stesse variabili), ottieni un iteratore per le due liste da fondere e fintanto esista un ulteriore nodo lo inserisci nella nuova lista
    esempio
    
    //la tua lista e'
    //public List l = new List();
    
    //.......
    
    public void merge()
    {
    	ListIterator iterator1 = list1.listIterator();
    	while (iterator1.hasNext())
    	{
    		insert(iterator1.next().info); //dove insert e' il metodo di inserimento in coda in modo da avere le cose ordinate
    	}
    	
    	ListIterator iterator2 = list2.listIterator();
    	while (iterator2.hasNext())
    	{
    		insert(iterator2.next().info); //dove insert e' il metodo di inserimento in coda in modo da avere le cose ordinate
    	}
    }
    
    Non so se ho reso l'idea ma sono disponibile per ulteriori chiarimenti
    grazie per la risposta, però il metodo ListIterator () non l'abbiamo mai usato, per cui non so come funziona e non penso che lo voglia in questo modo :/
Devi accedere o registrarti per scrivere nel forum
2 risposte