programación de sistemas - · pdf fileelse return -1;} 25. ... •inserción y...
TRANSCRIPT
![Page 1: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/1.jpg)
Listas enlazadas
Programación de Sistemas
1
![Page 2: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/2.jpg)
Estructuras de datos
• Abstracción que representa un conjunto de datos en un programa con el objeto de facilitar su manipulación
• Diferentes estructuras de datos presentan ventajas o desventajas dependiendo de la naturaleza de los datos y los tipos de manipulaciones que se necesite hacer sobre los mismos
2
![Page 3: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/3.jpg)
Estructuras de datos lineales
• Organizan los datos en secuencia, donde cada dato se relaciona con un dato anterior (excepto el primero) y un dato posterior (excepto el último)
• Ejemplos de estructuras de datos lineales:
– Arrays
– Listas enlazadas
– Pilas
– Colas
– Colas dobles
3
![Page 4: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/4.jpg)
Arrays
• Los arrays presentan dos grandes ventajas para el almacenamiento de colecciones lineales de datos:
– Acceso aleatorio: se puede acceder a cualquier posición del array en tiempo constante.
– Uso eficiente de memoria cuando todas las posiciones están ocupadas: por guardarse en posiciones consecutivas de memoria.
4
![Page 5: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/5.jpg)
Arrays
• Desventajas:
– Tamaño estático: debe asignarse un tamaño al crear el array, y no se puede cambiar. Da lugar a problemas:
• Uso no eficiente de memoria por tener que reservar espacio para el caso peor
• Posibilidad de sobrepasar el tamaño reservado en tiempo de ejecución
– Necesidad de memoria contigua:
• Puede ocurrir que, pese a haber suficiente memoria libre, no haya un bloque contiguo suficientemente grande
5
![Page 6: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/6.jpg)
Arrays
• Desventajas:
– Ciertas operaciones tienen un coste no óptimo:
• Inserciones y eliminaciones de datos en la primera posición o posiciones intermedias: necesidad de desplazar datos entre posiciones consecutivas.
• Concatenación de dos o más arrays: necesidad de copiar los datos a un nuevo array.
• Partición de un array en varios fragmentos: necesidad de copiar datos a nuevos arrays.
6
![Page 7: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/7.jpg)
Listas enlazadas
• Secuencia ordenada de nodos donde cada nodo almacena:
– Un dato
– Una referencia al siguiente nodo
• Los nodos no tienen por qué estar contiguos en memoria
first
info
next
info
next
info
next null7
![Page 8: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/8.jpg)
La clase Node
Public class Node {
private Object info;
private Node next;
public Node(Object info) {…}
public Node getNext() {…}
public void setNext(Node next) {…}
public Object getInfo() {…}
public void setInfo(Object info) {…}
}
8
![Page 9: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/9.jpg)
Inserción al principio
first
null
newNode
Node newNode = new Node(info);
null
9
![Page 10: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/10.jpg)
Inserción al principio
first
newNode
newNode .setNext(first);
null
10
![Page 11: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/11.jpg)
Inserción al principio
first
newNode
first = newNode;
null
11
![Page 12: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/12.jpg)
Extracción del primer nodo
first
null
12
![Page 13: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/13.jpg)
Extracción del primer nodo
first
data
Object data = first.getInfo();
null
13
![Page 14: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/14.jpg)
Extracción del primer nodofirst
data
first = first.getNext();
null
14
![Page 15: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/15.jpg)
Extracción del primer datofirst
data
null
15
![Page 16: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/16.jpg)
Inserción en un punto intermedio
first
null
newNode
Node newNode = new Node(info);
previous
null
16
![Page 17: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/17.jpg)
Inserción en un punto intermedio
first
newNode
newNode.setNext(previous.getNext())
previous
null
17
![Page 18: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/18.jpg)
Inserción en un punto intermedio
first
newNode
previous.setNext(newNode)
previous
null
18
![Page 19: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/19.jpg)
Eliminación de un dato intermedio
first
null
previous
19
![Page 20: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/20.jpg)
Eliminación de un dato intermedio
first
null
previous data
20
Object data = previous.getNext().getInfo();
![Page 21: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/21.jpg)
Eliminación de un dato intermedio
first
null
previous
previous.setNext(previous.getNext().getNext())
data
21
![Page 22: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/22.jpg)
Eliminación de un dato intermedio
first
null
previous data
22
![Page 23: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/23.jpg)
Recorrido de la lista
first
null
current
Node current = first;
while (current != null) {
current = current.getNext();
}
23
![Page 24: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/24.jpg)
Recorrido: buscar el último nodo
• Se avanza una referencia hasta localizar un nodo cuyo siguiente sea null:
public Node searchLastNode() {
Node last = null;
Node current = first;
if (current != null) {
while (current.getNext() != null) {
current = current.getNext();
}
last = current;
}
return last;
}
24
![Page 25: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/25.jpg)
Recorrido: buscar posición de un dato
• Se avanza una referencia hasta localizar el dato. Se va incrementando un contador al mismo tiempo:
public int search(Object info) {
int pos = 1;
Node current = first;
while (current != null
&& !current.getInfo().equals(info)) {
pos += 1;
current = current.getNext();
}
if (current != null)
return pos;
else
return -1;
}25
![Page 26: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/26.jpg)
Ventajas de las listas enlazadas
• Inserción y extracción de nodos con coste independiente del tamaño de la lista
• Concatenación y partición listas con coste independiente del tamaño de las listas
• No hay necesidad de grandes cantidades de memoria contigua
• El uso de memoria se adapta dinámicamente al número de datos almacenados en la lista en cada momento
26
![Page 27: Programación de Sistemas - · PDF fileelse return -1;} 25. ... •Inserción y extracción de nodos con coste independiente del tamaño de la lista •Concatenación y partición](https://reader031.vdocuments.pub/reader031/viewer/2022022002/5a7e6edc7f8b9a563b8e8c8e/html5/thumbnails/27.jpg)
Desventajas de las listas enlazadas
• Acceso a posiciones intermedias con coste dependiente del tamaño de la lista
• Necesidad de memoria adicional para almacenar los objetos Node con sus atributos
27