Tecnología

Inicio

Cómo combinar dos listas ordenadas ADT

Una lista Tipo de datos abstracto (ADT), o la lista enlazada, ya que es más comúnmente llamado, es una de las estructuras de datos fundamentales en la informática y una de las primeras alternativas a la matriz simple aprendido por un estudiante de informática. A pesar de que sacrifica la capacidad de moverse a la mitad de la lista sin tener que buscar a través de la primera lista, la lista de ADT hace que sea trivialmente fácil de ampliar y reducir el tamaño de los datos almacenados. Este código se implementa en Java, ya que la estructura de datos Linked incorporado en Java nos permite llegar directamente al punto, pero la misma lógica podría ser implementado con modificación mínima en cualquier otro lenguaje similar a C.

Instrucciones

1 Crear sus dos listas enlazadas e inicializar con algunos datos ordenados por pegar el siguiente en un archivo Java:

LinkedList<Double> list1 = new LinkedList<Double>();
LinkedList<Double> list2 = new LinkedList<Double>();

for (int x = 0; x & lt; 100; x ++) {
list1.add (Math.random ());
list2.add (Math.random ());
}

Collections.sort (lista1);
Collections.sort (list2);

Ahora, tiene dos listas enlazadas llenos de números aleatorios que han sido ordenados.

2 Crear una nueva lista enlazada para mantener la lista fusionada pegando el siguiente:

LinkedList<Double> merged = new LinkedList<Double>();

3 Configurar un simple bucle while. Este bucle se procederá siempre que ambas listas tienen al menos un elemento en ellos, y se moverá el más pequeño de los elementos principales de la lista resultante de la fusión:

// Si bien ambas listas no están vacíos.

while (!list1.isEmpty() && !list2.isEmpty()) {
if (list1.peek() <= list2.peek()) {
merged.add(list1.pop());
} else {
merged.add(list2.pop());
}
}

El comando "Peek" se ve en el elemento situado en la parte delantera de la lista, mientras que "pop" se ocupa tanto el elemento y lo elimina. Cuando se hace la comparación, sólo desea dar un vistazo a la parte superior de la lista para ver que es más pequeño. Cuando llega el momento de unificar las listas, que desea llevar el valor superior y lo puso en las nuevas listas.

4 Termina el trabajo. Tan pronto como sea lista está vacía, no hay necesidad de seguir haciendo comparaciones. Por lo tanto, el bucle de edad termina, y otro bucle se crea para llenar el resto de la lista resultante de la fusión con los datos restantes de la última lista:

// Mientras que la primera lista no está vacía

while (!list1.isEmpty()) {
merged.add(list1.pop());
}

// Mientras que la segunda lista no está vacía.

while (!list2.isEmpty()) {
merged.add(list2.pop());
}

5 Imprimir los resultados para que pueda inspeccionar la lista fusionado y asegurarse de que funcionaba correctamente:

int x = 1;
for (Double y : merged) {
System.out.println(x + " " + y);
x++;
}