Código de Java - Insertar en orden en un TDA

Imágen de perfil
Val: 491
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Insertar en orden en un TDAgráfica de visualizaciones


Java

Publicado el 31 de Marzo del 2019 por Rafael Angel
531 visualizaciones desde el 31 de Marzo del 2019. Una media de 49 por semana
Este es un solo class que contiene todo el proyecto, programado de a pie, porque en el curso en el que estoy hay que hacerlo a pie.
Es la continuación del tema de los nodos pero un proyecto diferente.
En este se deben insertar los datos en forma ordenada.
O sea el primer registro puede tener un valor 5 pero irá de primero, pero si luego agregas otro con valor 1 entonces este nuevo irá de primero, habrá un desplazamiento de datos y el 5 ocupará(Estará) la posición 2. Si a continuación se agrega un registro con valor 3, este quedará entre el 1 y el 5.
Una de las ventajas de programar a pie es que puedes llevarte el código para cualquier entorno de programación sin ningún problema.
Pero solo para casos en los que se quiera dar un ejemplo, para cursos...
Pero para crear algoritmos es mejor dejar el diseño de controles e interfaces visuales al diseñador automatizado del ide, así tu mente tendrá más tiempo para crear el algoritmo o solución.

Requerimientos

Cualquier editor de código Java.

1.1

Publicado el 31 de Marzo del 2019gráfica de visualizaciones de la versión: 1.1
532 visualizaciones desde el 31 de Marzo del 2019. Una media de 49 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

Información de la versión 1.1:
Se terminó de programar el evento click_buscar.
Se realizaron pequeños ajustes.

Información de la versión 1.0:

Se pueden meter datos en dos campos JTextField, uno es texto o cualquier dato.
El otro debe ser un numero.
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
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
/**
 * Class que contiene todo el proyecto.
 * @author Rafael Angel Montero Fernández
 * Correo Sharkyc12@Gmail.com
*/
public class ListaOrdenadaDeNodos {
    public static void main(String args[]){
        ListaOrdenadaDeNodos listaOrdenadaDeNodos = new ListaOrdenadaDeNodos();
    }
 
    private Formulario frmTDA=new Formulario();
 
    public ListaOrdenadaDeNodos(){
        frmTDA.setVisible(true);
    }
 
    private void decir(String datos){
        System.out.println("////////informando desde ListaEnlazada////////");
        System.out.println(datos + "\n\n");
    }
 
    public class Formulario extends JFrame{
        private Botones botones=null;
        private Cuadro_de_texto nombre=null;
        private Cuadro_de_texto valor=null;
        private Eventos eventos=new Eventos();
        private TDA_ordenado tda=new TDA_ordenado();
        private Nodo un_nodo=null;
 
 
        public Formulario(){
            this.setTitle("Lista ordenada de nodos.");
            this.setLayout(null);
            setResizable(false);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            this.setBounds(100, 100, 450, 250);
            nombre=new Cuadro_de_texto(10, 0,"Nombre", "");
            valor=new Cuadro_de_texto(10, 75,"Valor", "");
            add(nombre);
            add(valor);
            botones=new Botones(0, 150, eventos);
            add(botones);
        }
 
        private void msj(String nuevos_datos){
            JOptionPane.showMessageDialog(null, nuevos_datos);
        }
 
        public class Eventos implements ActionListener{
 
            @Override
            public void actionPerformed(ActionEvent arg0) {
                this.click_insertar(arg0);
                this.click_buscar(arg0);
                this.click_imprimir(arg0);
                this.click_eliminar(arg0);
                this.click_salir(arg0);
            }
 
            public void click_insertar(ActionEvent evt){
                if(evt.getActionCommand().equalsIgnoreCase(botones.getInsertar())==true){
                    tda.insertar(new Nodo(nombre.getTexto(), valor.getTextoNumerico()));
                }
            }
 
            public void click_buscar(ActionEvent evt){
                if(evt.getActionCommand().equalsIgnoreCase(botones.getBuscar())==true){
                    if(tda.buscar(new Nodo(nombre.getTexto(), valor.getTextoNumerico()))==true){
                        msj(tda.getNodoEncontrado().toString());
                        un_nodo=tda.getNodoEncontrado();
                        nombre.setTexto(un_nodo.getNombre());
                        valor.setTexto(un_nodo.getValor() + "");
                    }else{
                        msj("El registro no existe.");
                    }
                }
            }
 
            public void click_imprimir(ActionEvent evt){
                if(evt.getActionCommand().equalsIgnoreCase(botones.getImprimir())==true){
                   msj(tda.imprimir()) ;
                }
            }
 
            public void click_eliminar(ActionEvent evt){
                if(evt.getActionCommand().equalsIgnoreCase(botones.getEliminar())==true){
                    if(tda.eliminar_nodo(new Nodo(nombre.getTexto(), valor.getTextoNumerico()))==true){
                        msj("Nodo eliminado");
                    }else{
                        msj("No se puede eliminar porque el nodo no existe.");
                    }
                }
            }
 
            public void click_salir(ActionEvent evt){
                if(evt.getActionCommand().equalsIgnoreCase(botones.getSalir())==true){
                    System.exit(0);
                }
            }
        }
    }
 
    /**
     * Botones para el form.
     */
    public class Botones extends JPanel{
        private JButton jbInsertar=new JButton("Insertar");
        private JButton jbBuscar=new JButton("Buscar");
        private JButton jbImprimir=new JButton("Imprimir");
        private JButton jbEliminar=new JButton("Eliminar");
        private JButton jbSalir=new JButton("Salir");
 
        public Botones(){
            this.inicio(0, 0, null);
        }
        public Botones(int x, int y, ActionListener nuevo_controlador_de_eventos){
            this.inicio(0, y, nuevo_controlador_de_eventos);
        }
 
        public String getSalir(){
            return jbSalir.getText();
        }
 
        public String getEliminar(){
            return jbEliminar.getText();
        }
 
        public String getImprimir(){
            return jbImprimir.getText();
        }
 
        public String getInsertar(){
            return jbInsertar.getText();
        }
 
        public String getBuscar(){
            return jbBuscar.getText();
        }
 
        private void inicio(int x, int y, ActionListener nuevo_controlador_de_eventos){
            this.setBounds(x, y, 450, 40);
            jbInsertar.setBounds(0, 0, 50, 25);
            jbBuscar.setBounds(50, 0, 50, 25);
            jbImprimir.setBounds(100, 0, 50, 25);
            jbEliminar.setBounds(150, 0, 50, 25);
            jbSalir.setBounds(200, 0, 50, 25);
            add(jbInsertar);
            add(jbBuscar);
            add(jbImprimir);
            add(jbEliminar);
            add(jbSalir);
            jbInsertar.addActionListener(nuevo_controlador_de_eventos);
            jbBuscar.addActionListener(nuevo_controlador_de_eventos);
            jbImprimir.addActionListener(nuevo_controlador_de_eventos);
            jbEliminar.addActionListener(nuevo_controlador_de_eventos);
            jbSalir.addActionListener(nuevo_controlador_de_eventos);
        }
    }
 
    /**
     * Control personalizado que va pegado varias veces en el form.
     */
    public class Cuadro_de_texto extends JPanel{
        private JLabel jlEtiqueta=null;
        private JTextField jtCampo_de_texto=null;
        private String txtCaption="";
        private String txtTexto="";
 
        public Cuadro_de_texto(){
            this.inicio(0, 0, "Caption", "texto");
        }
 
        public Cuadro_de_texto(int x, int y, String nuevo_caption, String nuevo_texto){
            this.inicio(x, y, nuevo_caption, nuevo_texto);
        }
 
        private void inicio(int x, int y, String nuevo_caption, String nuevo_texto){
            this.setBounds(x, y, 200, 70);
            this.setLayout(null);
            jlEtiqueta=new JLabel(nuevo_caption);
            jlEtiqueta.setBounds(0, 0, 195, 30);
            jtCampo_de_texto=new JTextField(nuevo_texto);
            jtCampo_de_texto.setBounds(0, 27, 195, 30);
            add(jlEtiqueta);
            add(jtCampo_de_texto);
        }
 
        public void setCaption(String nuevo_caption){
            this.txtCaption=nuevo_caption;
            jlEtiqueta.setText(txtCaption);
        }
        public String getCaption(){
            return this.jlEtiqueta.getText();
        }
 
        public void setTexto(String nuevo_texto){
            this.txtTexto=nuevo_texto;
            this.jtCampo_de_texto.setText(txtTexto);
        }
        public String getTexto(){
            return jtCampo_de_texto.getText();
        }
 
        /**
         * Se usa un try catch por si se usa la propiedad y los datos son letras.
         * @return Retorna el texto con formato numerico, siempre y cuando el texto sean un numero.
         */
        public int getTextoNumerico(){
            try{
                return Integer.parseInt(jtCampo_de_texto.getText());
            }catch(NumberFormatException ex){
                decir("La informacion recuperada no se puede formatear a un numero");
            }
            return 0;
        }
    }
 
    /**
     * El tda ordenado es simplemente una lista enlazada que inserta datos en orden.
     */
    public class TDA_ordenado{
        private Nodo lista_de_nodos=null;
        /**
         * Se carga con los datos de la busqueda en caso de encontrar coincidencias.
         */
        private Nodo nodo_encontrado=null;
 
        public TDA_ordenado(){}
 
        /**
         * Despues de realizar la busqueda, se puede recuperar el nodo encontrado en la busqeuda por medio de esta propiedad.
        */
        public Nodo getNodoEncontrado(){
            return this.nodo_encontrado;
        }
 
        public boolean eliminar_nodo(Nodo nodo_a_eliminar){
            //Elimina al primero en la lista, desplazamiento hacia atras.
            if(this.lista_de_nodos.getValor()==nodo_a_eliminar.getValor()){
                lista_de_nodos=lista_de_nodos.getSiguiente();
                return true;
            }
            Nodo lista_temporal_de_nodos=lista_de_nodos;
            while(lista_temporal_de_nodos!=null){
                if(lista_temporal_de_nodos==null){
                    return false;
                }
                //Elimina entre nodos o el ultimo.
                if(lista_temporal_de_nodos.getValor()==nodo_a_eliminar.getValor()){
                    lista_temporal_de_nodos.setSiguiente(lista_temporal_de_nodos.getSiguiente().getSiguiente());
                    return true;
                }
                lista_temporal_de_nodos=lista_temporal_de_nodos.getSiguiente();
            }
            return false;
        }
 
        /**
         * Permite indicar si existe el nodo por medio de su propiedad valor.
         * @param nodo_de_busqueda
         * @return true si existe el nodo, false en caso de no existir.
         */
        public boolean buscar(Nodo nodo_de_busqueda){
            Nodo lista_temporal_de_nodos=lista_de_nodos;
            while(lista_temporal_de_nodos!=null){
                if(lista_temporal_de_nodos.getValor()==nodo_de_busqueda.getValor()){
                    nodo_encontrado=new Nodo(lista_temporal_de_nodos.getNombre(), lista_temporal_de_nodos.getValor());
                    return true;
                }
                lista_temporal_de_nodos=lista_temporal_de_nodos.getSiguiente();
            }
            return false;
        }
 
        /**
         * 
         * @return Retorna los datos de todo los nodos.
         * Es lo mismo que toString().
         */
        public String imprimir(){
            if(lista_de_nodos==null){
                return "";
            }
            String datos_del_tda="";
            Nodo lista_temporal_de_nodos=lista_de_nodos;
            int conteo_de_nodos=0;
            while(lista_temporal_de_nodos!=null){
                conteo_de_nodos++;
                datos_del_tda+=lista_temporal_de_nodos.toString() + "\n";
                lista_temporal_de_nodos=lista_temporal_de_nodos.getSiguiente();
            }
            return datos_del_tda + "\nTotal de nodos " + conteo_de_nodos;
        }
 
        @Override
        public String toString(){
            //Ejemplo de reutilizacion de codigo.
            return this.imprimir();
        }
 
        public boolean insertar(Nodo nuevo_nodo){
            //Lo pone al inicio.
            if(this.lista_de_nodos==null){
                this.lista_de_nodos=new Nodo(nuevo_nodo.getNombre(), nuevo_nodo.getValor());
                decir("inicio " + lista_de_nodos.toString());
                return true;
            }
            Nodo lista_temporal_de_nodos=lista_de_nodos;
            //Lo al inicio causando un desplazamiento de datos hacia el final de la lista.
            if(lista_de_nodos.getValor()>nuevo_nodo.getValor()){
                lista_temporal_de_nodos=this.lista_de_nodos;
                lista_de_nodos=new Nodo(nuevo_nodo.getNombre(), nuevo_nodo.getValor());
                lista_de_nodos.setSiguiente(lista_temporal_de_nodos);
                decir("Inicio desplazamiento " + lista_de_nodos.toString());
                return true;
            }
            Nodo siguiente=null;
            while(lista_temporal_de_nodos!=null){
                if(lista_temporal_de_nodos!=null ){
                    //Insertar entre nodos.
                    if(lista_temporal_de_nodos.getSiguiente()!=null){
                        if(lista_temporal_de_nodos.getValor()<nuevo_nodo.getValor() && lista_temporal_de_nodos.getSiguiente().getValor()>nuevo_nodo.getValor()){
                            siguiente=lista_temporal_de_nodos.getSiguiente();
                            lista_temporal_de_nodos.setSiguiente(new Nodo(nuevo_nodo.getNombre(), nuevo_nodo.getValor(), siguiente));
                            lista_temporal_de_nodos=lista_temporal_de_nodos.getSiguiente();
                            decir("Entre nodos " + lista_temporal_de_nodos.toString());
                            return true;
                        }
                    }
                }
                //Inserta un nodo al final. 
                if(lista_temporal_de_nodos.getSiguiente()==null){
                    lista_temporal_de_nodos.setSiguiente(nuevo_nodo);
                    lista_temporal_de_nodos=lista_temporal_de_nodos.getSiguiente();
                    decir("Al final " + lista_temporal_de_nodos.toString());
                    return true;
                }
                lista_temporal_de_nodos=lista_temporal_de_nodos.getSiguiente();
            }
            return false;
        }
    }
 
    /**
     * Clase nodo para la lista enlazada.
     */
    public class Nodo{
        private Nodo siguiente=null;
        private String nombre="";
        private int valor=0;
 
        public Nodo(){}
 
        public Nodo(String nuevo_nombre, int nuevo_valor){
            setNombre(nuevo_nombre);
            setValor(nuevo_valor);
        }
 
        public Nodo( Nodo nuevo_nodo){
            setSiguiente(nuevo_nodo);
        }
 
        public Nodo(String nuevo_nombre, int nuevo_valor, Nodo nuevo_nodo){
            setNombre(nuevo_nombre);
            setValor(nuevo_valor);
            setSiguiente(nuevo_nodo);
        }
        @Override
        public String toString(){
            return "Nombre " + this.getNombre() + ", valor " + this.getValor();
        }
 
        public void setSiguiente(Nodo nuevo_nodo){
            siguiente=nuevo_nodo;
        }
        public Nodo getSiguiente(){
            return this.siguiente;
        }
 
        public void setNombre(String nuevo_nombre){
            nombre=nuevo_nombre;
        }
        public String getNombre(){
            return nombre;
        }
 
 
        public void setValor(int nuevo_valor){
            valor=nuevo_valor;
        }
        public int getValor(){
            return valor;
        }
    }
}



Comentarios sobre la versión: 1.1 (0)


No hay comentarios
 

Comentar la versión: 1.1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s5226
Revisar política de publicidad