Castro Eduardo TI1
Castro Eduardo TI1
Castro Eduardo TI1
Alumno:
Eduardo Castro Salazar
Curso:
Programación
Licenciatura:
Ingeniería Industrial
Docente:
Dr. Enoc Gutiérrez Pallares
INTRODUCCIÓN
Existen patrones de organización para las variables de instancia, estos patrones
se denominan Estructuras de Datos y una de las aplicaciones más interesantes y
potentes de la memoria dinámica y los punteros son precisamente estas.
04-Octubre-2020
No existe una estructura de
datos que sirva para todos los
propósitos, por tal motivo es importante conocer las ventajas y desventajas de
cada una de ellas para en un momento dado conocer cuál es la óptima para darle
solución a un determinado problema.
Este documento exploraremos la estructura de lista enlazada es una de
las estructuras de datos fundamentales, y puede ser usada para implementar otras
estructuras de datos. Consiste en una secuencia de nodos, en los que se guardan
campos de datos arbitrarios y una o dos referencias, enlaces o punteros al nodo
anterior o posterior. El principal beneficio de las listas enlazadas respecto a
los vectores convencionales es que el orden de los elementos enlazados puede
ser diferente al orden de almacenamiento en la memoria o el disco, permitiendo
que el orden de recorrido de la lista sea diferente al de almacenamiento.
Una lista enlazada es un tipo de dato autorreferenciado porque contienen un
puntero o enlace (en inglés link, del mismo significado) a otro dato del mismo tipo.
Las listas enlazadas permiten inserciones y eliminación de nodos en cualquier
punto de la lista en tiempo constante (suponiendo que dicho punto está
previamente identificado o localizado), pero no permiten un acceso aleatorio.
Existen diferentes tipos de listas enlazadas: listas enlazadas simples, listas
doblemente enlazadas, listas enlazadas circulares y listas enlazadas doblemente
circulares.
Las listas enlazadas pueden ser implementadas en muchos lenguajes. Lenguajes
tales como Lisp, Scheme y Haskell tienen estructuras de datos ya construidas,
junto con operaciones para acceder a las listas enlazadas. Lenguajes imperativos
u orientados a objetos tales como C o C++ y Java, respectivamente, disponen de
referencias para crear listas enlazadas.
Las listas enlazadas son usadas como módulos para otras muchas estructuras de
datos, tales como pilas, colas y sus variaciones.
El campo de datos de un nodo puede ser otra lista enlazada. Mediante este
mecanismo, podemos construir muchas estructuras de datos enlazadas con listas;
esta práctica tiene su origen en el lenguaje de programación Lisp, donde las listas
enlazadas son una estructura de datos primaria (aunque no la única), y ahora es
una característica común en el estilo de programación funcional.
A veces, las listas enlazadas son usadas para implementar vectores asociativos, y
estas en el contexto de las llamadas listas asociativas.
DESARROLLO
CREACIÓN E INICIALIZACIÓN DE LISTAS ENLAZADAS
04-Octubre-2020
Antes de empezar a
manipular una lista enlazada
hay que crear una variable dinámica con estructura de lista. Cada nodo de la lista
contiene como mínimo un campo valor y un campo puntero, por tanto y como ya
se vio previamente, la forma más simple de representarlo es mediante un registro.
En lenguaje algorítmico, podemos crear una lista enlazada de la siguiente manera:
donde cabeza debe ser inicializada a nulo ya que la lista inicialmente está vacía.
04-Octubre-2020
donde el puntero cabeza ha sido inicializado previamente, bien con el valor nulo o
con la dirección de un espacio de memoria que contiene datos.
BÚSQUEDA DE UN ELEMENTO EN UNA LISTA ENLAZADA
Para buscar un elemento en una lista enlazada hay que recorrerla hasta el final o
hasta que el elemento buscado se encuentre. Una subrutina que realiza la
búsqueda de un DNI en la lista enlazada del apartado anterior viene a
continuación:
04-Octubre-2020
Figura: Inserción en una lista enlazada. a) Por el frente. b) Por la cola
INSERCIÓN DE UN ELEMENTO EN UNA LISTA ENLAZADA
Para insertar en una lista enlazada hay distintas formas de hacerlo: inserción por
delante (por el frente), inserción por el medio e inserción por detrás (por la cola).
En la figura 2.7 vemos la inserción por el frente y por la cola. A continuación
mostraremos las subrutinas que realizan las inserciones en esas posiciones,
considerándose en cualquiera de los dos casos que hay espacio suficiente en el
almacenamiento dinámico
04-Octubre-2020
04-Octubre-2020
ELIMINACION DE UN
ELEMENTO DE UNA LISTA ENLAZADA
Al borrar un elemento de una lista enlazada hay que enlazar correctamente el
puntero del sucesor para no perder la información en el resto de la lista. En la
figura presentamos el caso en el que al borrar un nodo concreto, la lista queda
dividida en dos porciones inconexas. A continuación mostramos una subrutina que
borra un nodo de la lista del apartado anterior.
04-Octubre-2020
Dada una lista enlazada (de tipo ptrl), cuyo campo de información contiene el
nombre, apellidos (cadenas de caracteres de tamaño 15) y DNI (entero) de una
persona, ordenada de menor a mayor por el subcampo apellidos se pide:
a) Realizar una subrutina que dado un nombre, apellidos y DNI, inserte
ordenadamente un nuevo nodo.
b) Realizar una subrutina que, dado un nombre, apellidos y DNI, borre de la lista el
nodo que lo contenga si éste existe.
04-Octubre-2020
CONCLUSIÓN
Cada estructura de datos ofrece ventajas y desventajas en relación con su
simplicidad y eficiencia para la realización de cada operación. Se requiere revisar
detenidamente información para ser capaz de establecer estructuras de datos
lógicas que permitan hacer un uso más eficiente del espacio ocupado en la
memoria de la computadora, de minimizar los tiempos de acceso, así como de
lograr formas más efectivas de inserción y eliminación de los datos en estructuras
04-Octubre-2020
de almacenamiento, para
lograr una solución óptima.
04-Octubre-2020
BIBLIOGRAFÍA
04-Octubre-2020