SlideShare una empresa de Scribd logo
1 de 30
Clases Referenciadas y
Listas Enlazadas en C#
Profesor: Emmanuel Hidalgo
ALUMNAS:
Universidad Americana
Natalie Cedeño Araya
María José Casco Rojas
Rebeca Coto Sánchez
Viviana Ramírez Gamboa
Contenido
INTRODUCCIÓN................................................................................................................................... 3
ESTRUCTUCTURA DE DATOS ............................................................................................................... 5
Matrices: ..................................................................................................................................... 6
1. Campo: .................................................................................................................................... 7
o Nombre: .............................................................................................................................. 7
o Tipo:..................................................................................................................................... 7
o Tamaño:............................................................................................................................... 7
2. Registros:................................................................................................................................. 7
o Registro lógico:.................................................................................................................... 7
o Registro físico:..................................................................................................................... 7
3. Archivos :................................................................................................................................. 8
o Creación: ............................................................................................................................. 8
o Apertura: ............................................................................................................................. 8
o Cierre:.................................................................................................................................. 8
o Lectura / Consulta:.............................................................................................................. 8
o Fin de Archivo:..................................................................................................................... 8
o Actualización: ...................................................................................................................... 8
o Destrucción : ....................................................................................................................... 9
4. Base de Datos:......................................................................................................................... 9
CLASES AUTO-REFERENCIADAS.............................................................................................. 9
LISTAS ENLAZADAS............................................................................................................................ 11
 Recorrido:.......................................................................................................................... 12
 Inserción:........................................................................................................................... 12
 Borrado:............................................................................................................................. 13
 Búsqueda........................................................................................................................... 14
Elementos de las listas ................................................................................................................. 14
1. Nodo.................................................................................................................................. 14
2. Enlace o dirección de la lista ............................................................................................. 14
3. Dato: (esta dentro de un nodo, si el nodo esta vacio su dato es nulo (NULL))..... 14
Ventajas de usar listas................................................................................................................... 14
Desventaja de usar listas:.............................................................................................................. 14
Representación de listas enlazadas en memoria.......................................................................... 14
Tipos de listas más comunes:........................................................................................................ 15
Listas Enlazadas Simples:.......................................................................................................... 15
Listas enlazadas Dobles:............................................................................................................ 15
Listas Circulares:........................................................................................................................ 16
o Listas enlazadas simples circulares ................................................................................... 16
o Listas enlazadas doblemente circulares............................................................................ 17
Nodos centinelas........................................................................................................................ 17
Aplicaciones de las listas enlazadas: ............................................................................................. 18
Historia de las listas:...................................................................................................................... 18
CONCLUSIÓN..................................................................................................................................... 21
BIBLIOGRAFIA.................................................................................................................................... 22
Fuentes Primarias:..................................................................................................................... 22
Fuentes Bibliográficas ............................................................................................................... 22
ANEXOS ............................................................................................................................................. 23
CODIGO PARA CORRER UNA LISTA DOBLEMENTE ENLAZADA.................................................. 23
INTRODUCCIÓN
Una estructura de datos es una manera de almacenar y organizar datos para
facilitar el acceso y modificaciones; visto así podemos definir una estructura como
un grupo de variables las cuales pueden ser de diferentes tipos sostenidas o
mantenidas juntas en una sola unidad, llamada estructura.
De lo mencionado anteriormente, podemos definir que las estructuras de datos
como una colección de datos que se caracterizan por su organización y las
operaciones que se definen en ella; algunas de las más usadas son los arrays, sin
embargo este tipo de estructura tienen una importante limitación: no pueden
cambiar de tamaño durante la ejecución, pues están compuestos por un
determinado número de elementos, número que se decide en la fase de diseño,
antes de que el programa ejecutable sea creado.
Pese a lo descrito en el párrafo anterior, en muchas ocasiones se necesitan
estructuras que puedan cambiar de tamaño durante la ejecución del programa,
pues si definimos en un programa una variable estática estamos fijado
previamente cual va a ser su espacio en memoria y cuáles van a ser los posibles
valores que puede tomar a lo largo de la ejecución del programa; existen
problemas complejos que se resuelven más eficazmente mediante la utilización de
variables que cambien dinámicamente la cantidad o el tipo de datos que pueden
contener; este tipo de estructuras de datos se denomina estructuras dinámicas.
Visto así, en el presente trabajo se abordará el tema de estructuras dinámicas,
enfatizando principalmente en las clases auto-referencias y tipos de listas (listas
enlazadas: Lista Enlazadas Simples, Listas Doblemente Enlazadas, Listas
Enlazadas Circulares y Listas Enlazadas Doblemente Circulares); definidas estas
últimas como una secuencia de nodos, en los que se guardan campos de datos y
una o dos referencias (punteros) al nodo anterior y/o posterior. El principal
beneficio de las listas enlazadas respecto a los arrays convencionales,
mencionados anteriormente, 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.
ESTRUCTUCTURA DE DATOS
Una estructura de datos es una forma de organizar un conjunto de
datos elementales con el objetivo de facilitar su manipulación. Un dato elemental
es la mínima información que se tiene en un sistema.
Una estructura de datos define la organización e interrelación de estos y un
conjunto de operaciones que se pueden realizar sobre ellos. Las operaciones
básicas son:
 Alta, adicionar un nuevo valor a la estructura.
 Baja, borrar un valor de la estructura.
 Búsqueda, encontrar un determinado valor en la estructura para realizar una
operación con este valor, en forma secuencial o binario (siempre y cuando los
datos estén ordenados).
Otras operaciones que se pueden realizar son:
 Ordenamiento, de los elementos pertenecientes a la estructura.
 Apareo, dadas dos estructuras originar una nueva ordenada y que contenga a
las apareadas.
Cada estructura ofrece ventajas y desventajas en relación a la simplicidad y
eficiencia para la realización de cada operación. De esta forma, la elección de la
estructura de datos apropiada para cada problema depende de factores como la
frecuencia y el orden en que se realiza cada operación sobre los datos.
Existen estructuras de datos dinámicas (LISTAS ENLAZADAS , pilas, colas,
arboles) y Estáticas.
Las estructuras de datos estáticas más comunes son:
Matrices: se define como una tabla de tablas, o vector de vectores, es decir, es
aquella en la cual uno de sus elementos es, a su vez, una tabla unidimensional.
Vectores: es una zona de almacenamiento continuo, que contiene una serie de
elementos del mismo tipo, los elementos de la matriz. Desde el punto de vista
lógico una matriz se puede ver como un conjunto de elementos ordenados en fila
(o filas y columnas si tuviera dos dimensiones).
Existe una jerarquía básica a la hora de utilizar las estructuras de datos: La
Jerarquía básica de una Estructura de Datos es la siguiente:
12
Fila 1
Fila 2
Fila 3
Columna 1 Columna 2 Columna 3 Columna 4
Base de datos
Archivo Archivo Archivo
Registro Registro Registro Registro
Campo Campo Campo CampoCampo
Caracter Caracter Caracter CaracterCaracter
1. Campo: Un campo es un conjunto de caracteres capaz de suministrar
una determinada información referida a un concepto. Un campo es un
elemento de datos elementales tales como nombre y apellido, numero de
documento, domicilio, etc. Un campo es la unidad mínima de información
de un registro. Al igual que en las variables, al definir un campo hay que
indicar claramente sus tres características:
o Nombre: Nombre que identifica a ese conjunto de caracteres
o Tipo: Tipo de caracteres que puede contener (alfabético, entero, u
otro)
o Tamaño: Cantidad de caracteres que puede contener
2. Registros: Un registro es un conjunto de campos referentes a una
entidad en particular y constituyen una unidad para su proceso. Un ejemplo
de un registro puede ser la información de un determinado alumno
universitario, que contiene los campos: libreta universitaria, apellido y
nombre, número de documento, domicilio, fecha de nacimiento, entre otros
campos. Existen dos tipos de registro:
o Registro lógico: Se denomina registro lógico al conjunto de campos
o datos referente a un mismo objeto y constituyen una unidad para
su proceso. Son los registros organizados en campos
o Registro físico: Registro físico es un conjunto de registros lógicos
que constituyen la unidad de transferencia en una sola operación de
entrada / salida (para transferencias entre las unidades de E/S o
dispositivos de almacenamiento, y la memoria principal).
3. Archivos :Es el conjunto de registros homogéneos referidos a objetos
de la misma naturaleza o del mismo tipo, almacenados en un soporte
externo, que presenta entre sí una relación lógica y que pueden ser
consultados individualmente de forma iterativa o sistemática. Para la
formación y destruccion de un archivo existen las siguientes funciones:
o Creación: Se crea el archivo recolectando o “archivando” una
serie de registros.
o Apertura: Abrir un archivo significa dejarlo dispuesto para
ser utilizado. Todos los archivos que se ocupan en un
programa deben ser abiertos previamente a su uso.
o Cierre: La finalidad de cierre de los archivos radica en
permitir al usuario detener el uso de ese archivo, dejarlo
inaccesible.
o Lectura / Consulta: Es la operación que nos permite
acceder al archivo de datos para conocer la información
alojada en uno, varios o todos los registros del archivo.
o Fin de Archivo: Toda instrucción de ingreso de datos, ya
sea desde teclado o desde un dispositivo magnético, requiere
una condición de fin de ingreso de los datos
o Actualización: La actualización de un archivo supone las
siguientes operaciones:
i. Añadir registros
ii. Modificar registros ya existentes
iii. Borrar registros
libretauniversitaria Apellidoynombre númerodedocumento Domicilio Fechadenacimiento
o Destrucción : La operación de destrucción o borrado realiza
la supresión del archivo en el soporte o dispositivo, dejando
este espacio que ocupaba anteriormente disponible
4. Base de Datos: Es una colección de archivos relacionados
lógicamente, que se estructura en diferentes formas para reducir
duplicaciones y proporcionar un mejor acceso a los datos. Constituye el
nivel más alto en la jerarquía de organización de los datos, siendo el nivel
más bajo el carácter. Así una base de datos de una universidad podría
contener archivos de estudiantes, profesores, inventarios, libros, etc. La
figura presenta gráficamente la estructura jerárquica en base de datos.
CLASES AUTO-REFERENCIADAS
Las estructuras básicas como structs arrays tienen una importante limitación: no
pueden cambiar de tamaño durante la ejecución. Los arrays están compuestos por
un determinado número de elementos, número que se decide en la fase de
diseño, antes de que el programa ejecutable sea creado.
Por lo mencionado anteriormente, en muchas ocasiones se necesitan estructuras
que puedan cambiar de tamaño durante la ejecución del programa; las estructuras
dinámicas, en este sentido nos permiten crear estructuras de datos que se
adapten a las necesidades que requiere los programas elaborados
Las estructuras de datos están compuestas de otras pequeñas estructuras a las
que llamaremos nodos o elementos, que agrupan los datos con los que trabajará
nuestro programa y además uno o más punteros auto-referenciadas, es decir,
punteros a objetos del mismo tipo nodo.
Para que las estructuras listas sean implementadas, necesitan de las clases auto-
referenciadas ; las cuales están estructuradas de la siguiente forma, la clase como
tal , y la clase tiene a su vez un puntero a un objeto de la misma clase que es el
Nodo
siguiente o un puntero a la anterior, esto según el tipo de lista implementada.
Una estructura básica de un nodo para crear listas de datos seria:
struct nodo {
int dato;
struct nodo *otronodo;};
El campo "otronodo" puede apuntar a un objeto del tipo nodo. De este modo,
cada nodo puede usarse como un ladrillo para construir listas de datos, y cada uno
mantendrá ciertas relaciones con otros nodos.
Para acceder a un nodo de la estructura sólo necesitaremos un puntero a un nodo,
durante el presente curso usaremos gráficos para mostrar la estructura de las
estructuras de datos dinámicas. El nodo anterior se representará así:
Las estructuras auto-referenciadas se utilizan con frecuencia como elementos de
estructuras de datos tipo árbol y lista. En estos casos, un conjunto de objetos del
mismo tipo, están relacionadas entre sí mediante punteros contenidos en ellos
mismos, de forma que basta conocer la raíz del árbol o principio de la lista, para
poder acceder a todo el conjunto. En ocasiones, si tales listas son doblemente
enlazadas, es posible entrar en cualquier nodo y recorrer la totalidad del conjunto
en cualquier sentido.
Visto así, una lista enlazada es un tipo de dato auto-referenciado porque contienen
un puntero o link 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: Lista Enlazadas Simples, Listas Doblemente Enlazadas, Listas
Enlazadas Circulares y Listas Enlazadas Doblemente Circulares; por tanto un lista
que es una colección de datos se apoya de la clase auto-referenciada para su
funcionamiento y este tipo de clase a punto a otra clase del mismo tipo con un
puntero
Las estructuras dinámicas utilizan las clases auto-referenciadas para su
implementación; por tanto podemos hacer referencia a listas y arboles: cada
elemento dispone de dos o más punteros, pero las referencias nunca son a
elementos anteriores, de modo que la estructura se ramifica y crece igual que un
árbol.
• Listas abiertas: cada elemento sólo dispone de un puntero, que apuntará al
siguiente
• Listas circulares: o listas cerradas, son parecidas a las listas abiertas, pero
el último elemento apunta al primero. De hecho, en las listas circulares no puede
hablarse de "primero" ni de "último". Cualquier nodo puede ser el nodo de entrada
y salida.
• Listas doblemente enlazadas: cada elemento dispone de dos punteros, uno
a punta al siguiente elemento y el otro al elemento anterior. Al contrario que las
listas abiertas anteriores, estas listas pueden recorrerse en los dos sentidos.
LISTAS ENLAZADAS
Una lista enlazada también recibe el nombre de "lista concatenada", "lista
eslabonada" o "lista lineal".
Es una de las estructuras de datos fundamentales (Dinámica), y puede ser usada
para implementar otras estructuras de datos. Una lista enlazada es un conjunto de
elementos llamados nodos en los que cada uno de ellos contiene un dato y
también la dirección del siguiente nodo, donde el orden de los mismos se
establece mediante punteros.
La idea básica es que cada componente de la lista incluya un
puntero que indique donde puede encontrarse el siguiente componente por
lo que el orden relativo de estos puede ser fácilmente alterado modificando los
punteros; lo que permite, a su vez, añadir o suprimir elementos de la lista. El
primer elemento de la lista es la cabecera, que sólo contiene un puntero que
señala el primer elemento de la lista.
El último nodo de la lista apunta a nulo porque no hay más nodos en la lista. Se
usará el término NUL para designar el final de la lista.
Las listas enlazadas pueden ser implementadas en muchos lenguajes. Lenguajes
tales como Lisp y Scheme tiene estructuras de datos ya construidas, junto con
operaciones para acceder a las listas enlazadas. Lenguajes imperativos
u orientados a objetos tales como C# , C++ y Java, respectivamente, disponen de
referencias para crear listas enlazadas.
Las operaciones que podemos realizar sobre una lista enlazada son las
siguientes:
 Recorrido: Esta operación consiste en visitar cada uno de los nodos que
forman la lista. Para recorrer todos los nodos de la lista, se comienza con el
primero, se toma el valor del campo liga para avanzar al segundo nodo, el
campo liga de este nodo nos dará la dirección del tercer nodo, y así
sucesivamente.
 Inserción: Esta operación consiste en agregar un nuevo nodo a la lista. Para
esta operación se pueden considerar tres casos:
o Insertar un nodo al inicio.
o Insertar un nodo antes o después de cierto nodo.
o Insertar un nodo al final.
 Borrado: La operación de borrado consiste en quitar un nodo de la lista,
redefiniendo las ligas que correspondan. Se pueden presentar cuatro casos:
o Eliminar el primer nodo.
o Eliminar el último nodo.
o Eliminar un nodo con cierta información.
o Eliminar el nodo anterior o posterior al nodo cierta con información.
 Búsqueda. Esta operación consiste en visitar cada uno de los nodos,
tomando al campo liga como puntero al siguiente nodo a visitar.
Elementos de las listas
1. Nodo
2. Enlace o dirección de la lista
3. Dato: (esta dentro de un nodo, si el nodo esta vacio su dato es nulo
(NULL))
Ventajas de usar listas
o Las listas son dinámicas, es decir, podemos almacenar en ellas tantos
elementos como necesitemos, siempre y cuando haya suficiente espacio en
memoria.
o Al insertar un elemento en la lista, la operación tiene un tiempo constante
independientemente de la posición en la que se inserte, solo se debe crear
el nodo y modificar los enlaces.
o Al eliminar un elemento paso lo mismo que se menciono en el punto
anterior.
Desventaja de usar listas:
El acceso a un elemento es más lento, debido a que la información no está en
posiciones contiguas de memoria, por lo que no podemos acceder a un elemento con
base en su posición como se hace en los arreglos.
Representación de listas enlazadas en memoria
El siguiente ejemplo muestra la representación memoria de una lista enlazada en
la que cada nodo de la lista contiene un único carácter. Podemos obtener la lista
de caracteres o, en otras palabras, la cadena de la forma siguiente:
COMIENZO = 9, luego INFO [9] = N primer carácter.
ENLACE [9] = 3, luego INFO [3] = 0 segundo carácter.
ENLACE [3] = 6, luego INFO [6] = (carácter blanco) tercer carácter.
ENLACE [6] = 11, luego INFO [11] = E cuarto carácter.
ENLACE [11] = 7, luego INFO [7] = X quinto carácter.
ENLACE [7] = 10, luego INFO [10] = I sexto carácter.
ENLACE [10] = 4, luego INFO [4] = T séptimo carácter.
ENLACE [4] = -999 valor nulo, luego termina la lista.
Tipos de listas más comunes:
Listas Enlazadas Simples:
Lista simple o enlazada simple, solo tiene un enlace por nodo. Este enlace apunta
al siguiente nodo en la lista, o al valor NULL o final de la lista.
Listas enlazadas Dobles:
Esta lista es la que tiene doble enlace al nodo (dos vías). Cada nodo tiene dos
enlaces, uno apunta al nodo anterior (o apunta a NULL se es el nodo inicial) y el
otro apunta al nodo siguiente (o apunta a NULL si es el último nodo).
Listas Circulares:
Una lista circular es una lista lineal en la que el último nodo a punta al primero.
Las listas circulares evitan excepciones en las operaciones que se realicen sobre
ellas. No existen casos especiales, cada nodo siempre tiene uno anterior y uno
siguiente. En algunas listas circulares se añade un nodo especial de cabecera, de
ese modo se evita la única excepción posible, la de que la lista esté vacía.
o Listas enlazadas simples circulares
Cada nodo tiene un enlace, similar al de las listas enlazadas simples, excepto que
el siguiente nodo del último apunta al primero. Como en una lista enlazada simple,
los nuevos nodos pueden ser solo eficientemente insertados después de uno que
ya tengamos referenciado. Por esta razón, es usual quedarse con una referencia
solamente al último elemento en una lista enlazada circular simple, esto nos
permite rápidas inserciones al principio, y también permite accesos al primer nodo
desde el puntero del último nodo.
o Listas enlazadas doblemente circulares
En una lista enlazada doblemente circular, cada nodo tiene dos enlaces, similares
a los de la lista doblemente enlazada, excepto que el enlace anterior del primer
nodo apunta al último y el enlace siguiente del último nodo, apunta al primero.
Como en una lista doblemente enlazada, las inserciones y eliminaciones pueden
ser hechas desde cualquier punto con acceso a algún nodo cercano. Aunque
estructuralmente una lista circular doblemente enlazada no tiene ni principio ni fin,
un puntero de acceso externo puede establecer el nodo apuntado que está en la
cabeza o al nodo cola, y así mantener el orden tan bien como en una lista
doblemente enlazada.
Nodos centinelas
A veces las listas enlazadas tienen un nodo centinela (también llamado falso
nodo o nodo ficticio) al principio o al final de la lista, el cual no es usado para
guardar datos. Su propósito es simplificar o agilizar algunas operaciones,
asegurando que cualquier nodo tiene otro anterior o posterior, y que toda la lista
(incluso alguna que no contenga datos) siempre tenga un “primer y último” nodo.
Aplicaciones de las 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. Hay pocas ventajas en este
uso de las listas enlazadas; hay mejores formas de implementar éstas estructuras,
por ejemplo con árboles binarios de búsqueda equilibrados. Sin embargo, a veces
una lista enlazada es dinámicamente creada fuera de un subconjunto propio de
nodos semejante a un árbol, y son usadas más eficientemente para recorrer ésta
serie de datos.
Historia de las listas:
Las listas enlazadas fueron desarrolladas en 1955-56 y H por Cliff Shawerbert
Simon en RAND Corporation, como la principal estructura de datos para
su Lenguaje de Procesamiento de la Información (IPL). IPL fue usado por los
autores para desarrollar varios programas relacionados con la inteligencia artificial,
incluida la Máquina de la Teoría General, el Solucionador de Problemas
Generales, y un programa informático de ajedrez.
El diagrama clásico actual, que consiste en bloques que representan nodos de la
lista con flechas apuntando a los sucesivos nodos de la lista, apareció en
Programming the Logic Theory Machine, de Newell y Shaw. Newell y Simon
fueron reconocidos por el ACM Turing Award en 1975 por “hacer contribuciones
básicas a la inteligencia artificial, a la psicología del conocimiento humano y al
procesamiento de las listas”.
El problema de los traductores del procesamiento natural del lenguaje condujo
a Victor Yngve del Instituto Tecnológico de Massachusetts (MIT) a usar listas
enlazadas como estructura de datos en su COMIT, lenguaje de programación para
computadoras, que investigó en el campo de la Lingüística computacional. Un
informe de este lenguaje, titulado “A Programming Language for Mechanical
Translation” apareció en Mechanical Translation en 1958.
LISP, el principal procesador de listas, fue creado en 1958. Una de las mayores
estructuras de datos de LISP es la lista enlazada.
En torno a los 60, la utilidad de las listas enlazadas y los lenguajes que utilizaban
estas estructuras como su principal representación de datos estaba bien
establecida. Bert Green, del Lincoln Laboratory del MIT, publicó un estudio
titulado Computer languages for symbol manipulation en IRE Transaction on
Human Factors in Electronicsen marzo de 1961 que resumía las ventajas de las
listas enlazadas. Un posterior artículo, A Comparison of list-processing computer
languages de Bobrow y Raphael, aparecía en Communications of the ACM en
abril de 1964.
Muchos sistemas operativos desarrollados por la empresa TSC (Technical
Systems Consultants) usaron listas enlazadas simples como estructuras de
ficheros. Un directorio de entrada apuntaba al primer sector de un fichero y daba
como resultado porciones de la localización del fichero mediante punteros. Los
sistemas que utilizaban esta técnica incluían Flex (para el Motorola 6800 CPU),
mini-Flex (la misma CPU) y Flex9 (para el Motorola 6809 CPU). Una variante
desarrollada por TSC se comercializó a Smoke Signal Broadcasting en California,
usando listas doblemente enlazadas del mismo modo.
El sistema operativo TSS, desarrollado por IBM para las máquinas System
360/370, usaba una lista doblemente enlazada para su catálogo de ficheros de
sistema. La estructura de directorios era similar a Unix, donde un directorio podía
contener ficheros u otros directorios que se podían extender a cualquier
profundidad. Una utilidad fue creada para arreglar problemas del sistema después
de un fallo desde las porciones modificadas del catálogo de ficheros que estaban
a veces en memoria cuando ocurría el fallo. Los problemas eran detectados por
comparación de los enlaces posterior y anterior por consistencia. Si el siguiente de
ellos era corrupto y el anterior enlace del nodo infectado era encontrado, el enlace
posterior era asignado al nodo marcado con el enlace anterior.
CONCLUSIÓN
La versatilidad de la implementación de estructuras dinámicas permite aprovechar
más eficientemente los recursos de memoria pues estas se amplían y contraen
durante la ejecución del programa, basada en los registros de almacenamiento de
datos del programa.
Por lo anteriormente mencionado, podemos afirmar que una estructura dinámica
de datos es una colección de elementos (llamadas nodos) que son normalmente
registros.
Las estructuras dinámicas de datos, referidas en este trabajo fueron listas, las
cuales son definas como una colección de elementos llamados nodos. Cada nodo
contiene un dato y una referencia al siguiente nodo; las mismas se utilizan para
almacenamiento de datos del mundo real, que están cambiando constantemente;
ejemplo característico, es la lista de pasajeros de una línea aérea.
Por otro lado, para su recorrido e implementación requiere de estructuras o clases
auto-referenciadas, las cuales contiene un miembro de apuntador que apunta a
una estructura del mismo tipo de estructura; es decir se define un tipo, struct
node, donde el miembro nextPtr apunta a una estructura de tipo struct node, una
estructura del mismo tipo que la que se está declarando en la misma clase, de ahí
el término de "estructura autoreferenciada". El apuntador nextPtr se conoce como
un enlace o vínculo, ya que sirve para vincular una estructura de tipo struct node
con otra estructura del mismo tipo.
Por ello podemos mencionar que la implementación de las estructuras auto-
referenciadas pueden ser enlazadas juntas para formar útiles estructuras de datos
como son las listas, las colas, las pilas y los árboles; permitiendo por tanto
definir la organización e interrelación de los datos y un conjunto de operaciones
que se pueden realizar sobre ellos.
BIBLIOGRAFIA
Fuentes Primarias:
1. http://www.Slideshare.net/PatriciaU/estructuras-dinamicas
2. http://es.wikipedia.org/wiki/Lista_(inform%C3%A1tica)
3. http://casicodigo.blogspot.com/2012/10/listas-enlazadas-simples-en-c.html
4. http://www.calcifer.org/documentos/librognome/glib-lists-queues.html
Fuentes Bibliográficas
1. Aho, Alfred. Estructuras de Datos y Algoritmos. Editorial McGraw-Hill
2. Luis Joyanes. Programación en C: Metodología, Estructura de Datos y Objetos.
Editorial McGraw-Hill
ANEXOS
CODIGO PARA CORRER UNA LISTA DOBLEMENTE ENLAZADA
Ejemplo Lista Doblemente Enlazada
Clase donde se definen los procedimientos a utilizar
También se define el nodo que va a recorrer la lista “ant” “y sig”
Se define el nodo “raíz”.
Definición de los procedimientos
Desde la clase program que contiene el Main creamos el objeto que referencie a la
clase anterior y llamamos los procedimientos.
Distribución del programa
Salida del programa en pantalla

Más contenido relacionado

La actualidad más candente

Memoria dinamica
Memoria dinamicaMemoria dinamica
Memoria dinamica
gusolis93
 
Administración de procesos y del procesador
Administración de procesos y del procesadorAdministración de procesos y del procesador
Administración de procesos y del procesador
Fernando Camacho
 

La actualidad más candente (20)

Programación 3: listas enlazadas
Programación 3: listas enlazadasProgramación 3: listas enlazadas
Programación 3: listas enlazadas
 
Estructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busquedaEstructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busqueda
 
PAQUETES EN JAVA
PAQUETES EN JAVAPAQUETES EN JAVA
PAQUETES EN JAVA
 
Unidad 3 administracion de memoria(recoplilacion de todas las exposiciones)
Unidad 3 administracion de memoria(recoplilacion de todas las exposiciones)Unidad 3 administracion de memoria(recoplilacion de todas las exposiciones)
Unidad 3 administracion de memoria(recoplilacion de todas las exposiciones)
 
Pilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datosPilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datos
 
Ejemplos acid
Ejemplos acidEjemplos acid
Ejemplos acid
 
Curso Uml 2.1 Diagramas De Cu Y Clases
Curso Uml   2.1 Diagramas De Cu Y ClasesCurso Uml   2.1 Diagramas De Cu Y Clases
Curso Uml 2.1 Diagramas De Cu Y Clases
 
Procesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas OperativosProcesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas Operativos
 
Memoria dinamica
Memoria dinamicaMemoria dinamica
Memoria dinamica
 
Colas en programacion
Colas en programacionColas en programacion
Colas en programacion
 
Ordenamiento por insercion
Ordenamiento por insercionOrdenamiento por insercion
Ordenamiento por insercion
 
UNIDAD 1 INTRODUCCIÓN AL LENGUAJE ENSAMBLADOR
UNIDAD 1 INTRODUCCIÓN AL LENGUAJE ENSAMBLADORUNIDAD 1 INTRODUCCIÓN AL LENGUAJE ENSAMBLADOR
UNIDAD 1 INTRODUCCIÓN AL LENGUAJE ENSAMBLADOR
 
Sistemas Operativos Mono Proceso
Sistemas Operativos Mono ProcesoSistemas Operativos Mono Proceso
Sistemas Operativos Mono Proceso
 
Protección y Seguridad de los Sistemas Operativos
Protección y Seguridad de los Sistemas OperativosProtección y Seguridad de los Sistemas Operativos
Protección y Seguridad de los Sistemas Operativos
 
Modelo Orientado A Objetos
Modelo Orientado A ObjetosModelo Orientado A Objetos
Modelo Orientado A Objetos
 
Pilares de la POO
Pilares de la POOPilares de la POO
Pilares de la POO
 
Administración de procesos y del procesador
Administración de procesos y del procesadorAdministración de procesos y del procesador
Administración de procesos y del procesador
 
Tipos de listas en estructura de datos
Tipos de listas en estructura de datosTipos de listas en estructura de datos
Tipos de listas en estructura de datos
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clases
 
Sistema Operativo Distribuido
Sistema Operativo DistribuidoSistema Operativo Distribuido
Sistema Operativo Distribuido
 

Destacado

Clase I Estructura de Datos
Clase I Estructura de Datos Clase I Estructura de Datos
Clase I Estructura de Datos
guestc906c2
 
Diapositiva de l estructura de datos
Diapositiva de l estructura de datosDiapositiva de l estructura de datos
Diapositiva de l estructura de datos
mariajuly
 
Estructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colasEstructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colas
Elias Peña
 
Importancia de las listas Estructura de datos.
Importancia de las listas Estructura de datos.Importancia de las listas Estructura de datos.
Importancia de las listas Estructura de datos.
xaviercamposm
 
Libro programacion orientadaaobjetosluisjoyanesaguilar
Libro programacion orientadaaobjetosluisjoyanesaguilarLibro programacion orientadaaobjetosluisjoyanesaguilar
Libro programacion orientadaaobjetosluisjoyanesaguilar
Ignacio Fernandez Paba
 
Libro manual programacion-visual_basic_.net_(ilustrado_con_ejemplos)by_iberid...
Libro manual programacion-visual_basic_.net_(ilustrado_con_ejemplos)by_iberid...Libro manual programacion-visual_basic_.net_(ilustrado_con_ejemplos)by_iberid...
Libro manual programacion-visual_basic_.net_(ilustrado_con_ejemplos)by_iberid...
Camilo Lopez
 
Nucleo 2 estructuras dinámicas
Nucleo 2 estructuras dinámicasNucleo 2 estructuras dinámicas
Nucleo 2 estructuras dinámicas
carsanta
 

Destacado (20)

concepto de estructuras de datos
concepto de estructuras de datosconcepto de estructuras de datos
concepto de estructuras de datos
 
Estructura de Datos
Estructura de DatosEstructura de Datos
Estructura de Datos
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
 
estructuras de datos
estructuras de datosestructuras de datos
estructuras de datos
 
Clase I Estructura de Datos
Clase I Estructura de Datos Clase I Estructura de Datos
Clase I Estructura de Datos
 
Estructura de datos benita
Estructura de datos benitaEstructura de datos benita
Estructura de datos benita
 
Entendiendo estructura de datos
Entendiendo estructura de datosEntendiendo estructura de datos
Entendiendo estructura de datos
 
Diapositiva de l estructura de datos
Diapositiva de l estructura de datosDiapositiva de l estructura de datos
Diapositiva de l estructura de datos
 
Estructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colasEstructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colas
 
PRINCIPIOS DEL DISEÑO DE ESTRUCTURAS DE DATOS
PRINCIPIOS DEL DISEÑO DE ESTRUCTURAS DE DATOSPRINCIPIOS DEL DISEÑO DE ESTRUCTURAS DE DATOS
PRINCIPIOS DEL DISEÑO DE ESTRUCTURAS DE DATOS
 
Estructuras de datos y tipos de datos abstractos
Estructuras de datos y tipos de datos abstractosEstructuras de datos y tipos de datos abstractos
Estructuras de datos y tipos de datos abstractos
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 
Estructura de datos
 Estructura de datos Estructura de datos
Estructura de datos
 
Los objetivos de investigación
Los objetivos de investigaciónLos objetivos de investigación
Los objetivos de investigación
 
Importancia de las listas Estructura de datos.
Importancia de las listas Estructura de datos.Importancia de las listas Estructura de datos.
Importancia de las listas Estructura de datos.
 
Estructuras de Datos y Algoritmos - Introducción
Estructuras de Datos y Algoritmos - IntroducciónEstructuras de Datos y Algoritmos - Introducción
Estructuras de Datos y Algoritmos - Introducción
 
Libro programacion orientadaaobjetosluisjoyanesaguilar
Libro programacion orientadaaobjetosluisjoyanesaguilarLibro programacion orientadaaobjetosluisjoyanesaguilar
Libro programacion orientadaaobjetosluisjoyanesaguilar
 
Unidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datosUnidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datos
 
Libro manual programacion-visual_basic_.net_(ilustrado_con_ejemplos)by_iberid...
Libro manual programacion-visual_basic_.net_(ilustrado_con_ejemplos)by_iberid...Libro manual programacion-visual_basic_.net_(ilustrado_con_ejemplos)by_iberid...
Libro manual programacion-visual_basic_.net_(ilustrado_con_ejemplos)by_iberid...
 
Nucleo 2 estructuras dinámicas
Nucleo 2 estructuras dinámicasNucleo 2 estructuras dinámicas
Nucleo 2 estructuras dinámicas
 

Similar a Estructura de Datos

Modelos de base de datos
Modelos de base de datosModelos de base de datos
Modelos de base de datos
Irene Lorza
 

Similar a Estructura de Datos (20)

Estructura de datos benita
Estructura de datos benitaEstructura de datos benita
Estructura de datos benita
 
Estructura de datos benita
Estructura de datos benitaEstructura de datos benita
Estructura de datos benita
 
Estructura de datos benita
Estructura de datos benitaEstructura de datos benita
Estructura de datos benita
 
Estructura de datos benita
Estructura de datos benitaEstructura de datos benita
Estructura de datos benita
 
Tarea 1
Tarea 1Tarea 1
Tarea 1
 
FUNCIONES DEL DBA - TIPOS DE BASE DE DATOS
FUNCIONES DEL DBA - TIPOS DE BASE DE DATOSFUNCIONES DEL DBA - TIPOS DE BASE DE DATOS
FUNCIONES DEL DBA - TIPOS DE BASE DE DATOS
 
Modelos de análisis estructurado
Modelos de análisis estructuradoModelos de análisis estructurado
Modelos de análisis estructurado
 
Base de datos1024
Base de datos1024Base de datos1024
Base de datos1024
 
Modelos de base de datos
Modelos de base de datosModelos de base de datos
Modelos de base de datos
 
Modelo de datos modelos bdd
Modelo de datos modelos bddModelo de datos modelos bdd
Modelo de datos modelos bdd
 
deberes
deberesdeberes
deberes
 
Modelo de bases de datos
Modelo de bases de datosModelo de bases de datos
Modelo de bases de datos
 
equipo 3 clasificación de estructura(2.pptx
equipo 3  clasificación de estructura(2.pptxequipo 3  clasificación de estructura(2.pptx
equipo 3 clasificación de estructura(2.pptx
 
DIAGRAMA DE PLANIFICACION
DIAGRAMA DE PLANIFICACIONDIAGRAMA DE PLANIFICACION
DIAGRAMA DE PLANIFICACION
 
Base de datos
Base de datosBase de datos
Base de datos
 
Modelo de datos
Modelo de datosModelo de datos
Modelo de datos
 
Modelo de datos
Modelo de datosModelo de datos
Modelo de datos
 
Estructuras de datos
Estructuras de datosEstructuras de datos
Estructuras de datos
 
HERRAMIENTAS DE DISEÑO EN BASE DE DATOS (1).pdf
HERRAMIENTAS DE DISEÑO EN BASE DE DATOS (1).pdfHERRAMIENTAS DE DISEÑO EN BASE DE DATOS (1).pdf
HERRAMIENTAS DE DISEÑO EN BASE DE DATOS (1).pdf
 
4 estructuras enlazadas
4 estructuras enlazadas4 estructuras enlazadas
4 estructuras enlazadas
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (10)

Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 

Estructura de Datos

  • 1. Clases Referenciadas y Listas Enlazadas en C# Profesor: Emmanuel Hidalgo ALUMNAS: Universidad Americana Natalie Cedeño Araya María José Casco Rojas Rebeca Coto Sánchez Viviana Ramírez Gamboa
  • 2. Contenido INTRODUCCIÓN................................................................................................................................... 3 ESTRUCTUCTURA DE DATOS ............................................................................................................... 5 Matrices: ..................................................................................................................................... 6 1. Campo: .................................................................................................................................... 7 o Nombre: .............................................................................................................................. 7 o Tipo:..................................................................................................................................... 7 o Tamaño:............................................................................................................................... 7 2. Registros:................................................................................................................................. 7 o Registro lógico:.................................................................................................................... 7 o Registro físico:..................................................................................................................... 7 3. Archivos :................................................................................................................................. 8 o Creación: ............................................................................................................................. 8 o Apertura: ............................................................................................................................. 8 o Cierre:.................................................................................................................................. 8 o Lectura / Consulta:.............................................................................................................. 8 o Fin de Archivo:..................................................................................................................... 8 o Actualización: ...................................................................................................................... 8 o Destrucción : ....................................................................................................................... 9 4. Base de Datos:......................................................................................................................... 9 CLASES AUTO-REFERENCIADAS.............................................................................................. 9 LISTAS ENLAZADAS............................................................................................................................ 11  Recorrido:.......................................................................................................................... 12  Inserción:........................................................................................................................... 12  Borrado:............................................................................................................................. 13  Búsqueda........................................................................................................................... 14 Elementos de las listas ................................................................................................................. 14 1. Nodo.................................................................................................................................. 14 2. Enlace o dirección de la lista ............................................................................................. 14 3. Dato: (esta dentro de un nodo, si el nodo esta vacio su dato es nulo (NULL))..... 14 Ventajas de usar listas................................................................................................................... 14
  • 3. Desventaja de usar listas:.............................................................................................................. 14 Representación de listas enlazadas en memoria.......................................................................... 14 Tipos de listas más comunes:........................................................................................................ 15 Listas Enlazadas Simples:.......................................................................................................... 15 Listas enlazadas Dobles:............................................................................................................ 15 Listas Circulares:........................................................................................................................ 16 o Listas enlazadas simples circulares ................................................................................... 16 o Listas enlazadas doblemente circulares............................................................................ 17 Nodos centinelas........................................................................................................................ 17 Aplicaciones de las listas enlazadas: ............................................................................................. 18 Historia de las listas:...................................................................................................................... 18 CONCLUSIÓN..................................................................................................................................... 21 BIBLIOGRAFIA.................................................................................................................................... 22 Fuentes Primarias:..................................................................................................................... 22 Fuentes Bibliográficas ............................................................................................................... 22 ANEXOS ............................................................................................................................................. 23 CODIGO PARA CORRER UNA LISTA DOBLEMENTE ENLAZADA.................................................. 23
  • 4. INTRODUCCIÓN Una estructura de datos es una manera de almacenar y organizar datos para facilitar el acceso y modificaciones; visto así podemos definir una estructura como un grupo de variables las cuales pueden ser de diferentes tipos sostenidas o mantenidas juntas en una sola unidad, llamada estructura. De lo mencionado anteriormente, podemos definir que las estructuras de datos como una colección de datos que se caracterizan por su organización y las operaciones que se definen en ella; algunas de las más usadas son los arrays, sin embargo este tipo de estructura tienen una importante limitación: no pueden cambiar de tamaño durante la ejecución, pues están compuestos por un determinado número de elementos, número que se decide en la fase de diseño, antes de que el programa ejecutable sea creado. Pese a lo descrito en el párrafo anterior, en muchas ocasiones se necesitan estructuras que puedan cambiar de tamaño durante la ejecución del programa, pues si definimos en un programa una variable estática estamos fijado previamente cual va a ser su espacio en memoria y cuáles van a ser los posibles valores que puede tomar a lo largo de la ejecución del programa; existen problemas complejos que se resuelven más eficazmente mediante la utilización de variables que cambien dinámicamente la cantidad o el tipo de datos que pueden contener; este tipo de estructuras de datos se denomina estructuras dinámicas. Visto así, en el presente trabajo se abordará el tema de estructuras dinámicas, enfatizando principalmente en las clases auto-referencias y tipos de listas (listas enlazadas: Lista Enlazadas Simples, Listas Doblemente Enlazadas, Listas Enlazadas Circulares y Listas Enlazadas Doblemente Circulares); definidas estas últimas como una secuencia de nodos, en los que se guardan campos de datos y una o dos referencias (punteros) al nodo anterior y/o posterior. El principal beneficio de las listas enlazadas respecto a los arrays convencionales,
  • 5. mencionados anteriormente, 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.
  • 6. ESTRUCTUCTURA DE DATOS Una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulación. Un dato elemental es la mínima información que se tiene en un sistema. Una estructura de datos define la organización e interrelación de estos y un conjunto de operaciones que se pueden realizar sobre ellos. Las operaciones básicas son:  Alta, adicionar un nuevo valor a la estructura.  Baja, borrar un valor de la estructura.  Búsqueda, encontrar un determinado valor en la estructura para realizar una operación con este valor, en forma secuencial o binario (siempre y cuando los datos estén ordenados). Otras operaciones que se pueden realizar son:  Ordenamiento, de los elementos pertenecientes a la estructura.  Apareo, dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas. Cada estructura ofrece ventajas y desventajas en relación a la simplicidad y eficiencia para la realización de cada operación. De esta forma, la elección de la estructura de datos apropiada para cada problema depende de factores como la frecuencia y el orden en que se realiza cada operación sobre los datos. Existen estructuras de datos dinámicas (LISTAS ENLAZADAS , pilas, colas, arboles) y Estáticas. Las estructuras de datos estáticas más comunes son:
  • 7. Matrices: se define como una tabla de tablas, o vector de vectores, es decir, es aquella en la cual uno de sus elementos es, a su vez, una tabla unidimensional. Vectores: es una zona de almacenamiento continuo, que contiene una serie de elementos del mismo tipo, los elementos de la matriz. Desde el punto de vista lógico una matriz se puede ver como un conjunto de elementos ordenados en fila (o filas y columnas si tuviera dos dimensiones). Existe una jerarquía básica a la hora de utilizar las estructuras de datos: La Jerarquía básica de una Estructura de Datos es la siguiente: 12 Fila 1 Fila 2 Fila 3 Columna 1 Columna 2 Columna 3 Columna 4 Base de datos Archivo Archivo Archivo Registro Registro Registro Registro Campo Campo Campo CampoCampo Caracter Caracter Caracter CaracterCaracter
  • 8. 1. Campo: Un campo es un conjunto de caracteres capaz de suministrar una determinada información referida a un concepto. Un campo es un elemento de datos elementales tales como nombre y apellido, numero de documento, domicilio, etc. Un campo es la unidad mínima de información de un registro. Al igual que en las variables, al definir un campo hay que indicar claramente sus tres características: o Nombre: Nombre que identifica a ese conjunto de caracteres o Tipo: Tipo de caracteres que puede contener (alfabético, entero, u otro) o Tamaño: Cantidad de caracteres que puede contener 2. Registros: Un registro es un conjunto de campos referentes a una entidad en particular y constituyen una unidad para su proceso. Un ejemplo de un registro puede ser la información de un determinado alumno universitario, que contiene los campos: libreta universitaria, apellido y nombre, número de documento, domicilio, fecha de nacimiento, entre otros campos. Existen dos tipos de registro: o Registro lógico: Se denomina registro lógico al conjunto de campos o datos referente a un mismo objeto y constituyen una unidad para su proceso. Son los registros organizados en campos o Registro físico: Registro físico es un conjunto de registros lógicos que constituyen la unidad de transferencia en una sola operación de entrada / salida (para transferencias entre las unidades de E/S o dispositivos de almacenamiento, y la memoria principal).
  • 9. 3. Archivos :Es el conjunto de registros homogéneos referidos a objetos de la misma naturaleza o del mismo tipo, almacenados en un soporte externo, que presenta entre sí una relación lógica y que pueden ser consultados individualmente de forma iterativa o sistemática. Para la formación y destruccion de un archivo existen las siguientes funciones: o Creación: Se crea el archivo recolectando o “archivando” una serie de registros. o Apertura: Abrir un archivo significa dejarlo dispuesto para ser utilizado. Todos los archivos que se ocupan en un programa deben ser abiertos previamente a su uso. o Cierre: La finalidad de cierre de los archivos radica en permitir al usuario detener el uso de ese archivo, dejarlo inaccesible. o Lectura / Consulta: Es la operación que nos permite acceder al archivo de datos para conocer la información alojada en uno, varios o todos los registros del archivo. o Fin de Archivo: Toda instrucción de ingreso de datos, ya sea desde teclado o desde un dispositivo magnético, requiere una condición de fin de ingreso de los datos o Actualización: La actualización de un archivo supone las siguientes operaciones: i. Añadir registros ii. Modificar registros ya existentes iii. Borrar registros libretauniversitaria Apellidoynombre númerodedocumento Domicilio Fechadenacimiento
  • 10. o Destrucción : La operación de destrucción o borrado realiza la supresión del archivo en el soporte o dispositivo, dejando este espacio que ocupaba anteriormente disponible 4. Base de Datos: Es una colección de archivos relacionados lógicamente, que se estructura en diferentes formas para reducir duplicaciones y proporcionar un mejor acceso a los datos. Constituye el nivel más alto en la jerarquía de organización de los datos, siendo el nivel más bajo el carácter. Así una base de datos de una universidad podría contener archivos de estudiantes, profesores, inventarios, libros, etc. La figura presenta gráficamente la estructura jerárquica en base de datos. CLASES AUTO-REFERENCIADAS Las estructuras básicas como structs arrays tienen una importante limitación: no pueden cambiar de tamaño durante la ejecución. Los arrays están compuestos por un determinado número de elementos, número que se decide en la fase de diseño, antes de que el programa ejecutable sea creado. Por lo mencionado anteriormente, en muchas ocasiones se necesitan estructuras que puedan cambiar de tamaño durante la ejecución del programa; las estructuras dinámicas, en este sentido nos permiten crear estructuras de datos que se adapten a las necesidades que requiere los programas elaborados Las estructuras de datos están compuestas de otras pequeñas estructuras a las que llamaremos nodos o elementos, que agrupan los datos con los que trabajará nuestro programa y además uno o más punteros auto-referenciadas, es decir, punteros a objetos del mismo tipo nodo. Para que las estructuras listas sean implementadas, necesitan de las clases auto- referenciadas ; las cuales están estructuradas de la siguiente forma, la clase como tal , y la clase tiene a su vez un puntero a un objeto de la misma clase que es el
  • 11. Nodo siguiente o un puntero a la anterior, esto según el tipo de lista implementada. Una estructura básica de un nodo para crear listas de datos seria: struct nodo { int dato; struct nodo *otronodo;}; El campo "otronodo" puede apuntar a un objeto del tipo nodo. De este modo, cada nodo puede usarse como un ladrillo para construir listas de datos, y cada uno mantendrá ciertas relaciones con otros nodos. Para acceder a un nodo de la estructura sólo necesitaremos un puntero a un nodo, durante el presente curso usaremos gráficos para mostrar la estructura de las estructuras de datos dinámicas. El nodo anterior se representará así: Las estructuras auto-referenciadas se utilizan con frecuencia como elementos de estructuras de datos tipo árbol y lista. En estos casos, un conjunto de objetos del mismo tipo, están relacionadas entre sí mediante punteros contenidos en ellos mismos, de forma que basta conocer la raíz del árbol o principio de la lista, para poder acceder a todo el conjunto. En ocasiones, si tales listas son doblemente enlazadas, es posible entrar en cualquier nodo y recorrer la totalidad del conjunto en cualquier sentido. Visto así, una lista enlazada es un tipo de dato auto-referenciado porque contienen un puntero o link 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: Lista Enlazadas Simples, Listas Doblemente Enlazadas, Listas Enlazadas Circulares y Listas Enlazadas Doblemente Circulares; por tanto un lista
  • 12. que es una colección de datos se apoya de la clase auto-referenciada para su funcionamiento y este tipo de clase a punto a otra clase del mismo tipo con un puntero Las estructuras dinámicas utilizan las clases auto-referenciadas para su implementación; por tanto podemos hacer referencia a listas y arboles: cada elemento dispone de dos o más punteros, pero las referencias nunca son a elementos anteriores, de modo que la estructura se ramifica y crece igual que un árbol. • Listas abiertas: cada elemento sólo dispone de un puntero, que apuntará al siguiente • Listas circulares: o listas cerradas, son parecidas a las listas abiertas, pero el último elemento apunta al primero. De hecho, en las listas circulares no puede hablarse de "primero" ni de "último". Cualquier nodo puede ser el nodo de entrada y salida. • Listas doblemente enlazadas: cada elemento dispone de dos punteros, uno a punta al siguiente elemento y el otro al elemento anterior. Al contrario que las listas abiertas anteriores, estas listas pueden recorrerse en los dos sentidos. LISTAS ENLAZADAS Una lista enlazada también recibe el nombre de "lista concatenada", "lista eslabonada" o "lista lineal". Es una de las estructuras de datos fundamentales (Dinámica), y puede ser usada para implementar otras estructuras de datos. Una lista enlazada es un conjunto de elementos llamados nodos en los que cada uno de ellos contiene un dato y también la dirección del siguiente nodo, donde el orden de los mismos se establece mediante punteros.
  • 13. La idea básica es que cada componente de la lista incluya un puntero que indique donde puede encontrarse el siguiente componente por lo que el orden relativo de estos puede ser fácilmente alterado modificando los punteros; lo que permite, a su vez, añadir o suprimir elementos de la lista. El primer elemento de la lista es la cabecera, que sólo contiene un puntero que señala el primer elemento de la lista. El último nodo de la lista apunta a nulo porque no hay más nodos en la lista. Se usará el término NUL para designar el final de la lista. Las listas enlazadas pueden ser implementadas en muchos lenguajes. Lenguajes tales como Lisp y Scheme tiene estructuras de datos ya construidas, junto con operaciones para acceder a las listas enlazadas. Lenguajes imperativos u orientados a objetos tales como C# , C++ y Java, respectivamente, disponen de referencias para crear listas enlazadas. Las operaciones que podemos realizar sobre una lista enlazada son las siguientes:  Recorrido: Esta operación consiste en visitar cada uno de los nodos que forman la lista. Para recorrer todos los nodos de la lista, se comienza con el primero, se toma el valor del campo liga para avanzar al segundo nodo, el campo liga de este nodo nos dará la dirección del tercer nodo, y así sucesivamente.  Inserción: Esta operación consiste en agregar un nuevo nodo a la lista. Para esta operación se pueden considerar tres casos: o Insertar un nodo al inicio. o Insertar un nodo antes o después de cierto nodo.
  • 14. o Insertar un nodo al final.  Borrado: La operación de borrado consiste en quitar un nodo de la lista, redefiniendo las ligas que correspondan. Se pueden presentar cuatro casos: o Eliminar el primer nodo. o Eliminar el último nodo. o Eliminar un nodo con cierta información. o Eliminar el nodo anterior o posterior al nodo cierta con información.
  • 15.  Búsqueda. Esta operación consiste en visitar cada uno de los nodos, tomando al campo liga como puntero al siguiente nodo a visitar. Elementos de las listas 1. Nodo 2. Enlace o dirección de la lista 3. Dato: (esta dentro de un nodo, si el nodo esta vacio su dato es nulo (NULL)) Ventajas de usar listas o Las listas son dinámicas, es decir, podemos almacenar en ellas tantos elementos como necesitemos, siempre y cuando haya suficiente espacio en memoria. o Al insertar un elemento en la lista, la operación tiene un tiempo constante independientemente de la posición en la que se inserte, solo se debe crear el nodo y modificar los enlaces. o Al eliminar un elemento paso lo mismo que se menciono en el punto anterior. Desventaja de usar listas: El acceso a un elemento es más lento, debido a que la información no está en posiciones contiguas de memoria, por lo que no podemos acceder a un elemento con base en su posición como se hace en los arreglos. Representación de listas enlazadas en memoria
  • 16. El siguiente ejemplo muestra la representación memoria de una lista enlazada en la que cada nodo de la lista contiene un único carácter. Podemos obtener la lista de caracteres o, en otras palabras, la cadena de la forma siguiente: COMIENZO = 9, luego INFO [9] = N primer carácter. ENLACE [9] = 3, luego INFO [3] = 0 segundo carácter. ENLACE [3] = 6, luego INFO [6] = (carácter blanco) tercer carácter. ENLACE [6] = 11, luego INFO [11] = E cuarto carácter. ENLACE [11] = 7, luego INFO [7] = X quinto carácter. ENLACE [7] = 10, luego INFO [10] = I sexto carácter. ENLACE [10] = 4, luego INFO [4] = T séptimo carácter. ENLACE [4] = -999 valor nulo, luego termina la lista. Tipos de listas más comunes: Listas Enlazadas Simples: Lista simple o enlazada simple, solo tiene un enlace por nodo. Este enlace apunta al siguiente nodo en la lista, o al valor NULL o final de la lista. Listas enlazadas Dobles:
  • 17. Esta lista es la que tiene doble enlace al nodo (dos vías). Cada nodo tiene dos enlaces, uno apunta al nodo anterior (o apunta a NULL se es el nodo inicial) y el otro apunta al nodo siguiente (o apunta a NULL si es el último nodo). Listas Circulares: Una lista circular es una lista lineal en la que el último nodo a punta al primero. Las listas circulares evitan excepciones en las operaciones que se realicen sobre ellas. No existen casos especiales, cada nodo siempre tiene uno anterior y uno siguiente. En algunas listas circulares se añade un nodo especial de cabecera, de ese modo se evita la única excepción posible, la de que la lista esté vacía. o Listas enlazadas simples circulares Cada nodo tiene un enlace, similar al de las listas enlazadas simples, excepto que el siguiente nodo del último apunta al primero. Como en una lista enlazada simple, los nuevos nodos pueden ser solo eficientemente insertados después de uno que ya tengamos referenciado. Por esta razón, es usual quedarse con una referencia solamente al último elemento en una lista enlazada circular simple, esto nos permite rápidas inserciones al principio, y también permite accesos al primer nodo
  • 18. desde el puntero del último nodo. o Listas enlazadas doblemente circulares En una lista enlazada doblemente circular, cada nodo tiene dos enlaces, similares a los de la lista doblemente enlazada, excepto que el enlace anterior del primer nodo apunta al último y el enlace siguiente del último nodo, apunta al primero. Como en una lista doblemente enlazada, las inserciones y eliminaciones pueden ser hechas desde cualquier punto con acceso a algún nodo cercano. Aunque estructuralmente una lista circular doblemente enlazada no tiene ni principio ni fin, un puntero de acceso externo puede establecer el nodo apuntado que está en la cabeza o al nodo cola, y así mantener el orden tan bien como en una lista doblemente enlazada. Nodos centinelas A veces las listas enlazadas tienen un nodo centinela (también llamado falso nodo o nodo ficticio) al principio o al final de la lista, el cual no es usado para guardar datos. Su propósito es simplificar o agilizar algunas operaciones, asegurando que cualquier nodo tiene otro anterior o posterior, y que toda la lista (incluso alguna que no contenga datos) siempre tenga un “primer y último” nodo.
  • 19. Aplicaciones de las 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. Hay pocas ventajas en este uso de las listas enlazadas; hay mejores formas de implementar éstas estructuras, por ejemplo con árboles binarios de búsqueda equilibrados. Sin embargo, a veces una lista enlazada es dinámicamente creada fuera de un subconjunto propio de nodos semejante a un árbol, y son usadas más eficientemente para recorrer ésta serie de datos. Historia de las listas: Las listas enlazadas fueron desarrolladas en 1955-56 y H por Cliff Shawerbert Simon en RAND Corporation, como la principal estructura de datos para su Lenguaje de Procesamiento de la Información (IPL). IPL fue usado por los autores para desarrollar varios programas relacionados con la inteligencia artificial, incluida la Máquina de la Teoría General, el Solucionador de Problemas Generales, y un programa informático de ajedrez. El diagrama clásico actual, que consiste en bloques que representan nodos de la lista con flechas apuntando a los sucesivos nodos de la lista, apareció en Programming the Logic Theory Machine, de Newell y Shaw. Newell y Simon fueron reconocidos por el ACM Turing Award en 1975 por “hacer contribuciones básicas a la inteligencia artificial, a la psicología del conocimiento humano y al procesamiento de las listas”.
  • 20. El problema de los traductores del procesamiento natural del lenguaje condujo a Victor Yngve del Instituto Tecnológico de Massachusetts (MIT) a usar listas enlazadas como estructura de datos en su COMIT, lenguaje de programación para computadoras, que investigó en el campo de la Lingüística computacional. Un informe de este lenguaje, titulado “A Programming Language for Mechanical Translation” apareció en Mechanical Translation en 1958. LISP, el principal procesador de listas, fue creado en 1958. Una de las mayores estructuras de datos de LISP es la lista enlazada. En torno a los 60, la utilidad de las listas enlazadas y los lenguajes que utilizaban estas estructuras como su principal representación de datos estaba bien establecida. Bert Green, del Lincoln Laboratory del MIT, publicó un estudio titulado Computer languages for symbol manipulation en IRE Transaction on Human Factors in Electronicsen marzo de 1961 que resumía las ventajas de las listas enlazadas. Un posterior artículo, A Comparison of list-processing computer languages de Bobrow y Raphael, aparecía en Communications of the ACM en abril de 1964. Muchos sistemas operativos desarrollados por la empresa TSC (Technical Systems Consultants) usaron listas enlazadas simples como estructuras de ficheros. Un directorio de entrada apuntaba al primer sector de un fichero y daba como resultado porciones de la localización del fichero mediante punteros. Los sistemas que utilizaban esta técnica incluían Flex (para el Motorola 6800 CPU), mini-Flex (la misma CPU) y Flex9 (para el Motorola 6809 CPU). Una variante desarrollada por TSC se comercializó a Smoke Signal Broadcasting en California, usando listas doblemente enlazadas del mismo modo. El sistema operativo TSS, desarrollado por IBM para las máquinas System 360/370, usaba una lista doblemente enlazada para su catálogo de ficheros de sistema. La estructura de directorios era similar a Unix, donde un directorio podía contener ficheros u otros directorios que se podían extender a cualquier profundidad. Una utilidad fue creada para arreglar problemas del sistema después de un fallo desde las porciones modificadas del catálogo de ficheros que estaban
  • 21. a veces en memoria cuando ocurría el fallo. Los problemas eran detectados por comparación de los enlaces posterior y anterior por consistencia. Si el siguiente de ellos era corrupto y el anterior enlace del nodo infectado era encontrado, el enlace posterior era asignado al nodo marcado con el enlace anterior.
  • 22. CONCLUSIÓN La versatilidad de la implementación de estructuras dinámicas permite aprovechar más eficientemente los recursos de memoria pues estas se amplían y contraen durante la ejecución del programa, basada en los registros de almacenamiento de datos del programa. Por lo anteriormente mencionado, podemos afirmar que una estructura dinámica de datos es una colección de elementos (llamadas nodos) que son normalmente registros. Las estructuras dinámicas de datos, referidas en este trabajo fueron listas, las cuales son definas como una colección de elementos llamados nodos. Cada nodo contiene un dato y una referencia al siguiente nodo; las mismas se utilizan para almacenamiento de datos del mundo real, que están cambiando constantemente; ejemplo característico, es la lista de pasajeros de una línea aérea. Por otro lado, para su recorrido e implementación requiere de estructuras o clases auto-referenciadas, las cuales contiene un miembro de apuntador que apunta a una estructura del mismo tipo de estructura; es decir se define un tipo, struct node, donde el miembro nextPtr apunta a una estructura de tipo struct node, una estructura del mismo tipo que la que se está declarando en la misma clase, de ahí el término de "estructura autoreferenciada". El apuntador nextPtr se conoce como un enlace o vínculo, ya que sirve para vincular una estructura de tipo struct node con otra estructura del mismo tipo. Por ello podemos mencionar que la implementación de las estructuras auto- referenciadas pueden ser enlazadas juntas para formar útiles estructuras de datos como son las listas, las colas, las pilas y los árboles; permitiendo por tanto definir la organización e interrelación de los datos y un conjunto de operaciones que se pueden realizar sobre ellos.
  • 23. BIBLIOGRAFIA Fuentes Primarias: 1. http://www.Slideshare.net/PatriciaU/estructuras-dinamicas 2. http://es.wikipedia.org/wiki/Lista_(inform%C3%A1tica) 3. http://casicodigo.blogspot.com/2012/10/listas-enlazadas-simples-en-c.html 4. http://www.calcifer.org/documentos/librognome/glib-lists-queues.html Fuentes Bibliográficas 1. Aho, Alfred. Estructuras de Datos y Algoritmos. Editorial McGraw-Hill 2. Luis Joyanes. Programación en C: Metodología, Estructura de Datos y Objetos. Editorial McGraw-Hill
  • 24. ANEXOS CODIGO PARA CORRER UNA LISTA DOBLEMENTE ENLAZADA Ejemplo Lista Doblemente Enlazada Clase donde se definen los procedimientos a utilizar También se define el nodo que va a recorrer la lista “ant” “y sig” Se define el nodo “raíz”.
  • 25. Definición de los procedimientos
  • 26.
  • 27.
  • 28. Desde la clase program que contiene el Main creamos el objeto que referencie a la clase anterior y llamamos los procedimientos.
  • 30. Salida del programa en pantalla