Estructura de Datos I

Contenido
  Introducción
  Tipos de Datos Abstractos
  • Tipos de Datos
  • Tipos de Datos Abstractos
  Recursividad
  Análisisi de la Performance de Algoritmos
  TAD Lista
  Matrices
  • Matrices Esparcidas
    • Representación por líneas
    • Representación utilizando conjunto de listas encadenadas
  Hashing
  • Funciones Hash
    • Método de la División
      • Implementación
    • Hashing Universal
  • Colisiones
    • Encadenamiento Separado (Separate Chaining)
    • Direccionamiento Abierto (Open Addressing)
      • Distribución lineal
      • Distribución cuadrática
      • Distribución doble
  Ordenamiento
  • 47">BubbleSort
    • implementación
  • Método de inserción directa
    • implementación
  • Shell (Classificación de Incremento Decreciente)
    • Implementación
  • HeapSort
    • Implementación
      • Teorema Master
  • MergeSort
    • Implementación
  • QuickSort
    • implementación
  • BucketSort
  Arboles
  • Arboles Binarios
    • Representación de Árboles Binarios
      • Representación Implicita
      • Representación Encadenada
    • Recorrido de árboles binarios
  • Representación de Árboles a través de Árboles Binarios
  • Arbol de Búsqueda Binaria
    • Inserción en árboles de búsqueda binaria
    • Eliminación en árboles de búsqueda binaria
  • Árboles AVL
    • Algoritmo de Inserción en un árbol AVL
      • Implementación de las Rotaciones
      • Algoritmo de Inserción
    • Algoritmo de Eliminación en árbol AVL
  • Árboles-B
    • Búsqueda en un árbol-B
    • Inserción en un árbol-B
    • Eliminación en árbol-B
  • 75">Quad-Tree
  Grafos
  • Representación de Grafos
    • Matriz de Adyacencia
    • Listas de adyacencia
    • Multilistas
  • Búsqueda en Grafos
    • Búsqueda en Profundidade
    • Búsqueda en anchura
  • Árbol generador mínimo
  • Camino de costo Mínimo
    • Camino más Corto
    • Algoritmo de Dijkstra
  • Ordenación Topológica
  • Coloración en Grafos
  Bibliografia

Listas Encadenadas

En listas encadenadas, los elementos consecutivos en la lista no significa que los mismos esten consecutivamente representados (el orden es lógico)
En la implementación es necesario almacenar separadamente la información de un elemento de la lista, normalmente el primero.
Existen dos formas representar listas encadenadas, a través de array, denominadas listas estáticas, o por punteros llamadas listas dinámincas.
Listas Encadenadas
Las principales ventajas de las listas encadenadas son:
 1. Elimina el problema de los traslados de nodos
 2. En el caso de listas dinámicas no se requiere saber previamente el número de elementos a ser almacenados.
Las principales desventajas son:
 1. No se consigue (de manera directa) accesar a los elementos de la lista en tiempo constante.
 2. Mayor número de operaciones para mantener la integridad de los datos.
Las listas encadenadas puede ser divididas en:

En el caso de listas no circulares, las operaciones de inserción y eliminación deben considerar algunos o casos especiales, que son las inserciones y eliminaciones al comienzo y final de las listas.
La inserción del primer elemento en la lista (convirtiéndola en no vacía) y la eliminación del último elemento (convirtiéndoloa en vacía) deben ser considerados como casos especiales para todos los tipos de lista.

Listas Doblemente Encadenada

En una lista doblemente encadenada, cada elemento posee las informaciones de quien es su sucesor y su antecesor.
  Listas Doblemente Encadenada
Principales ventajas:
 1. Permite caminar en las dos direcciones de la lista.
 2. Inserción y eliminación de elementos son realizados con más facilidad.

Principales problemas:
 • Mayor espacio reservado
 • Manipulación de un puntero extra Implementación (Dinámica)

Por simplicidad los elementos almacenados serán números enteros. Los elementos serán insertados de forma ordenada. (Fig 4.2)La operación de inserción de un nuevo elemento en la posición anterior al elemento actual puede ser descrito como sigue (suponiendo que actual no es el primer elemento de la lista): Listas Doblemente Encadenada
nuevo->proximo = actual; 
nuevo->anterior = actual->anterior; 
actual->anterior->proximo = nuevo; 
actual->anterior = nuevo; 
 Note que en este caso no es necesario un elemento posterior. Especificación: Igual a la del ejemplo estático para listas simplemente encadenadas
Observación: En el ejemplo abajo todavía estamos utilizando un puntero auxiliar llamdo "ant", como ejercicio, realice una nueva implementación de la función inserta_elemento sin utilizar este puntero auxiliar.
  Descarga

Código:
 

Listas Circulares

Una lista circular puede ser simple o doblemente encadenada. Lo que caracteriza a las listas circulares es el hecho que el sucesor del último elemento es el primer elemento de la lista. En el caso de una lista doblemente encadenada, el predecesor del primer elemento es el último elemento de la lista.
  Listas Circulares
La principal ventaja de las listas circulares es que no necesitamos considerar casos especiales de inserción y eliminación de elemento (primero y último).

 Implementación (Dinámica)

Listas Circulares simplemente enlazada
Descarga
Código


Listas Circulares doblemente enlazada
Descarga
Código