Código de Java - Nodos Listas enlazadas diseño

Requerimientos

Saber Java, tener nociones de nodos...

1.0

Publicado el 16 de Abril del 2022gráfica de visualizaciones de la versión: 1.0
1.631 visualizaciones desde el 16 de Abril del 2022
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

Un proyecto pequeño para demostrar el uso de nodos y su aplicasion en una lista enlazada.
La misma tecnica puede modificarse un poco para usarse en colas, pilas y arboles.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
public class Nodos {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        ListaDoblementeEnlazadaDeNodos nodos=new ListaDoblementeEnlazadaDeNodos();
        Nodo UnNodo=new Nodo("Arroz", 2000);
        nodos.agregarSiguienteNodo(UnNodo);
        System.out.println(nodos.toString());
         UnNodo=new Nodo("Azucar", 1000);
        nodos.agregarSiguienteNodo(UnNodo);
         UnNodo=new Nodo("Pan", 800);
        nodos.agregarSiguienteNodo(UnNodo);
        System.out.println("\n\n\n"+nodos.toString());
    }
 
}
 
 
/**
 *
 * @author Rafael
 * Basado en http://codigolibre.weebly.com/blog/listas-simples-en-java
 */
class ListaDoblementeEnlazadaDeNodos {
 
    private  Nodo ListaDeNodos=null;
 
 
    public void eliminarListaDeNodos(){
        // Elimina el valor y la referencia a los demas nodos.
        ListaDeNodos = null;
        // Reinicia el contador de tamaño de la lista a 0.
        tamaño = 0;
    }
 
    public void removerPorReferencia(Nodo referencia){
        // Consulta si el valor de referencia existe en la lista.
        if (buscar(referencia)) {
            // Consulta si el nodo a eliminar es el pirmero
            if (ListaDeNodos.getNombre().equalsIgnoreCase(referencia.getNombre())==true ) {
                // El primer nodo apunta al siguiente.
                ListaDeNodos = ListaDeNodos.siguiente;
            } else{
                // Crea ua copia de la lista.
                Nodo aux = ListaDeNodos;
                // Recorre la lista hasta llegar al nodo anterior
                // al de referencia.
                while(aux.getNombre().equalsIgnoreCase(referencia.getNombre())!=true){
                    aux = aux.siguiente;
                }
                // Guarda el nodo siguiente del nodo a eliminar.
                Nodo siguiente = aux.siguiente.siguiente;
                // Enlaza el nodo anterior al de eliminar con el
                // sguiente despues de el.
                aux.siguiente=siguiente;
            }
            // Disminuye el contador de tamaño de la lista.
            tamaño--;
        }
    }
 
    public void editarPorReferencia(Nodo referencia, Nodo nuevo_nodo){
        // Consulta si el valor existe en la lista.
        if (buscar(referencia)) {
            // Crea ua copia de la lista.
            Nodo aux = ListaDeNodos;
            // Recorre la lista hasta llegar al nodo de referencia.
            while(aux.getNombre().equalsIgnoreCase(referencia.getNombre())==false){
                aux = aux.siguiente;
            }
            // Actualizamos el valor del nodo
            aux.setNombre(referencia.getNombre());
            aux.setValor(referencia.getValor());
            aux.setId(referencia.getId());
        }
    }
 
    /**
     * throw new Exception("Posicion inexistente en la lista."); Se usa para lanzar errores personalizados.
     * @param nuevo_nodo
     * @return
     */
    public Nodo getValor(Nodo nuevo_nodo){
        try{
             // Crea una copia de la lista.
            Nodo aux = ListaDeNodos;
            // Recorre la lista hasta la posición ingresada.
            if(buscar(nuevo_nodo)==true){
                for (int i = 0; i < posicion; i++) {
                    aux = aux.siguiente;
                }
                return aux;
            }
        }catch(Exception e){
 
        }
           return new Nodo();
    }
 
    /**
     * e busca por nombre.
     * @param nombre recive un String como parametro.
     * @return Retorna el Nodo consultado con datos completos.
     */
    public Nodo getValor(String nombre){
        try{
            Nodo aux = ListaDeNodos;
            Nodo nodo_consulta=new Nodo();
            nodo_consulta.setNombre(nombre);
            if(buscar(nodo_consulta)==true){
                for (int i = 0; i < posicion; i++) {
                    aux = aux.siguiente;
                }
                return aux;
            }
        }catch(Exception e){
 
        }
           return new Nodo();
    }
 
    public boolean estaBacio(){
        return ListaDeNodos==null;
    }
 
    private int tamaño=0;
    public int getTamaño(){
        return tamaño;
    }
 
    public void agregarSiguienteNodo(Nodo nuevo_nodo){
        Nodo nodoTemporal=null;
 
        if(estaBacio()==true){
            ListaDeNodos=nuevo_nodo;
        }else{
            nodoTemporal=ListaDeNodos;
            tamaño=0;
            while(nodoTemporal.siguiente!=null){
                nodoTemporal=nodoTemporal.siguiente;
                tamaño++;
            }
            nuevo_nodo.setId(tamaño);
            nodoTemporal.siguiente=nuevo_nodo;
        }
 
    }
 
    public void agregarAnterior(Nodo nuevo_nodo){
        if (this.estaBacio()==true) {
            ListaDeNodos = nuevo_nodo;
        } else{
            nuevo_nodo.siguiente=ListaDeNodos;
            ListaDeNodos = nuevo_nodo;
        }
        tamaño++;
    }
    /**
     * !estaBacio() si es false lo convierte en true y si es true lo convierte en false.
     * @param referencia
     * @param nuevo_nodo
     */
    public void insertarPorReferencia(Nodo nodo_de_referencia, Nodo nuevo_nodo){
        if (estaBacio()==false) {
            if (buscar(nodo_de_referencia)) {
                Nodo aux = ListaDeNodos;
                while (aux.getNombre().equalsIgnoreCase(nodo_de_referencia.getNombre())==false) {
                    aux = aux.siguiente;
                }
                Nodo continuacion = aux.siguiente;
                aux.siguiente=nuevo_nodo;
                nuevo_nodo.siguiente=continuacion;
                tamaño++;
            }
        }
    }
 
    private int posicion=0;
 
    public boolean buscar(Nodo referencia){
        posicion=0;
        Nodo aux = ListaDeNodos;
        boolean encontrado = false;
        while(aux != null && encontrado != true){
            if (referencia.getNombre().equalsIgnoreCase(aux.getNombre()) ==true){
                encontrado = true;
                return encontrado;//Detiene el recorrido aqui antes que incremente al contador "posicion"
            }
            else{
                aux = aux.siguiente;
            }
            posicion++;
        }
        return encontrado;
    }
 
    @Override
    public String toString(){
        Nodo aux = ListaDeNodos;
        String informe="Datos de los nodos\n\n\n";
        try{
            boolean encontrado = false;
            while(aux != null && encontrado != true){
                informe+=aux.toString() +"\n";
                aux = aux.siguiente;
            }
        }catch(Exception e){
 
        }
        return informe;
    }
 
}
 
 
 
/**
 *
 * @author Rafael
 * rafaelangelmfx@gmail.com
 *
 * celular 506 83942235
 */
class Nodo {
    public Nodo anterior=null;
    public Nodo siguiente=null;
 
    public Nodo(){
 
    }
 
    public Nodo(Nodo nuevo_anterio, Nodo nuevo_siguiente){
        anterior=nuevo_anterio;
        siguiente=nuevo_siguiente;
    }
 
    public Nodo(Nodo nuevo_anterio, Nodo nuevo_siguiente, int nuevo_id, String nuevo_nombre){
        anterior=nuevo_anterio;
        siguiente=nuevo_siguiente;
        id=nuevo_id;
        nombre=nuevo_nombre;
    }
 
    public Nodo(String nuevo_nombre, int nuevo_valor){
        nombre=nuevo_nombre;
        valor=nuevo_valor;
    }
 
    private int id=0;
    /**
     * Sirve para saber el numero de nodo en el que me encuentro.
     * @return
     */
    public int getId(){
        return id;
    }
    //____________________Datos del nodo_____________________________________
    /**
     * Sirve para saber el numero de nodo en el que me encuentro.
     * @param nuevo_id
     */
    public void setId(int nuevo_id){
        id=nuevo_id;
    }
 
    private int valor=0;
    public void setValor(int nuevo_valor){
        valor=nuevo_valor;
    }
    public int getValor(){
        return valor;
    }
 
    private String nombre="";
    public void setNombre(String nuevo_nombre){
        nombre=nuevo_nombre;
    }
    public String getNombre(){
        return nombre;
    }
 
    /**
     * true si es null
     * false no es nulo
     * @return
     */
    public boolean anterior_es_nulo(){
        return anterior==null;
    }
 
    /**
     * true si es null
     * false no es nulo
     * @return
     */
    public boolean siguiente_es_nulo(){
        return siguiente==null;
    }
 
    @Override
    public String toString(){
        return "id= " + id + "; nombre= " + nombre + ", valor= " + valor + "; anterior= " +
                this.anterior_es_nulo() + "; siguiente= " + this.siguiente_es_nulo();
    }
 
}



Comentarios sobre la versión: 1.0 (0)


No hay comentarios
 

Comentar la versión: 1.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s7225