簡體   English   中英

在雙鏈表中按字母順序排列

[英]Order alphabetically in Doubly Linked List

我有個疑問:

我創建了以下程序,使您可以介紹有關自行車的不同數據。 我想做的是,當您介紹自行車的名稱,然后又要讀取所介紹的數據時,該程序將按字母順序顯示自行車的名稱

這是我的代碼

NodoL.java

package listaligadoble;

public class NodoL {
  String nombre;
  String estilo;
  int rodada;
  NodoL sig;
  NodoL ante;

public NodoL ()
{ nombre = "Bennoto";
  estilo = "Montana";
  rodada = 26;
  sig = null;
  ante = null;
}
public NodoL (String n,String d,int t)
{ nombre = n;
  estilo = d;
  rodada = t;
  sig = null;
  ante = null;
}
public String datos()
{return "Nombre:  " + nombre + " Estilo:  " + estilo + " Rodada:  "+rodada;
}

}

ListaLigadaD.java

   package listaligadoble;
import javax.swing.*;

public class ListaLigadaD 
{ NodoL inicio;

  public ListaLigadaD()
  {inicio=null;
  }

  public void insertarIncio(String n, String d, int t)
  { NodoL ap = new NodoL (n,d,t);
    if (inicio==null)
       {ap.sig=inicio;
        inicio=ap;
       }
    else {inicio.ante=ap;
          ap.sig=inicio;
          inicio=ap;
        }
  }
  public void insertarFinal(String n, String d, int t)
   { NodoL ap = new NodoL (n,d,t);
     if (inicio == null)
        { ap.sig=inicio;
          inicio=ap;
        }
     else { NodoL aux = new NodoL();
            NodoL ultimo = new NodoL ();
             aux=inicio;
             while (aux != null)
             { if (aux.sig == null)
               { ultimo=aux;
                 aux=aux.sig;
             }
               else aux=aux.sig;
          }
          ultimo.sig=ap;
          ap.ante = ultimo;
          //ap.ante=ultimo;
          //ap.sig=null;
        }
    }

    public void recorrer()
    {if (inicio == null)
        System.out.println("Lista vacía");

     else 
    {NodoL aux;
        aux=inicio;
        while(aux!=null)
            {System.out.println(aux.datos()+"\n");
            aux=aux.sig;
            }
    }
    }

    public void borrarRodada(int dato)
    {NodoL aux=null;
    NodoL posicion=null;
    //aux=inicio;
    boolean flag=true;
    if (inicio==null)
        {System.out.println("Lista vacía");
        return;
        }
    else{aux=inicio;;
        }
    if(aux.rodada == dato)
        {inicio=aux.sig;
         System.out.println("Dato sacado:"+aux.datos());
        }
    else {while (aux!=null && flag == true)
            {if(aux.rodada == dato)
                { posicion = aux;
                  flag=false;
                }
            else aux=aux.sig;       
            }
        }
    if (aux==null)
            System.out.println("Dato no encontrado");
    else{
        try {System.out.println("Dato sacado:"+posicion.datos());
            //posicion.sig=posicion.sig.sig;
            posicion.ante.sig=posicion.sig;
            posicion.sig.ante=posicion.ante;
            }
        catch(Exception ex){}
        }
    }

    public void borrarNombre(String dato)
    {NodoL aux=null;
    NodoL posicion=null;
    //aux=inicio;
    boolean flag=true;
    if (inicio==null)
        {System.out.println("Lista vacía");
        return;
        }
    else{aux=inicio;;
        }
    if(aux.nombre.equalsIgnoreCase(dato))
        {inicio=aux.sig;
         System.out.println("Dato sacado:"+aux.datos());
        }
    else {while (aux!=null && flag==true)
            {if(aux.nombre.equalsIgnoreCase(dato))
                {posicion=aux;
                flag=false;
                }
            else aux=aux.sig;       
            }
        }
    if (aux==null)
            System.out.println("Dato no encontrado");
    else{
        try {System.out.println("Dato sacado:"+posicion.datos());
            //posicion.sig=posicion.sig.sig;
            posicion.ante.sig=posicion.sig;
            posicion.sig.ante=posicion.ante;
            }
        catch(Exception ex){}
        }
    }
    public void menu()
    {System.out.println("Opción 1: Insertar inicio");
    System.out.println("Opción 2: Insertar final");
    System.out.println("Opción 3: Recorrer");
    System.out.println("Opción 4: Eliminar por nombre");
    System.out.println("Opción 5: Eliminar por rodada");
    System.out.println("Opción 6: Salir");
    System.out.println("Elija usted una opción");
    }
    public static void main(String[] args) {
    ListaLigadaD alfa=new ListaLigadaD ();
    String n,d;
    int t;
    int opcion=0;
    boolean control=true;
    do{alfa.menu();
        opcion=Integer.parseInt(JOptionPane.showInputDialog("Escriba la opción"));
        switch (opcion)
        {case 1:n=JOptionPane.showInputDialog("Introduzca el nombre:");          
               d=JOptionPane.showInputDialog("Introduzca el estilo:");
               t=Integer.parseInt(JOptionPane.showInputDialog("Introduzca el rodada:"));
               alfa.insertarIncio(n, d,t);
               break;
        case 2:n=JOptionPane.showInputDialog("Introduzca el nombre:");          
               d=JOptionPane.showInputDialog("Introduzca el estilo:");
               t=Integer.parseInt(JOptionPane.showInputDialog("Introduzca el rodada:"));
               alfa.insertarFinal(n, d, t);
               break;
        case 3:alfa.recorrer();
               break;
        case 4:n=JOptionPane.showInputDialog("Introduzca el nombre:");
               alfa.borrarNombre(n);     
               break;
        case 5:t=Integer.parseInt(JOptionPane.showInputDialog("Introduzca el rodada:"));
               alfa.borrarRodada(t);  
               break;
        case 6: control=false;
                break;
        default:System.out.println("Opción no válida, intente otra vez");
              break; 
        }
      }
      while (control==true)  ;
    }
}

假設我選擇選項#1,它是列表開頭的插入節點。 因此程序要求我介紹一個名稱,一種樣式以及更多其他內容。 如果不是,我決定按#2並在列表末尾插入一個節點,程序將要求我提供與上述相同的信息。

如果我按#3,我可以看到我之前介紹過的兩種自行車,而無需按字母順序排列...

我的問題是:如何使用一種方法來排序自行車的名稱,以便如果我先引入BMX,然后引入Benotto作為名稱,則在按#3顯示數據時,必須先看到Benoto,然后是BMX,然后再單擊。依名稱的字母順序排列?

提前致謝!

您應該更改代碼,刪除ListaLigada.java的部分,然后將其替換為ArrayList<NodoL>TreeMap<NodoL> ,或者如果還需要LinkedList<NodoL>.

無需重新實現Java中已經存在的collections

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM