Presentación




Estructuras de Datos No Lineales

          Mauricio Paletta
     INGENIERÍA EN INFORMÁTICA
                  Programación II




          Coordinación General de Pregrado
UNIVERSIDAD NACIONAL EXPERIMENTAL DE GUAYANA

                               Programación II
Definición

Son aquellas que ocupan bloques de
memoria no continuos / lineales. Para lidiar
con el problema de la fragmentación y, sobre
todo del crecimiento dinámico.
Los bloques deben estar enlazados unos con
otros para poder “navegar” por la estructura,
es decir, tener acceso a otro(s) dato(s) a
partir del actual.


                        Programación II
Definición

Las ventajas de las estructuras lineales son
desventajas en las estructuras no lineales y
viceversa.
Para los enlaces se requiere utilizar
direcciones de memoria / apuntadores.
Dos tipos de estructuras:
  1) Listas enlazadas: simples, dobles.
  2) Árboles: binarios, genéricos, grafos.

                           Programación II
Listas enlazadas

Estructura formada por nodos que se enlazan
entre sí partiendo de un nodo inicial cuya
referencia lleva el nombre de cabecera y una
posible referencia al nodo final o cola.
Si cada nodo apunta sólo a su siguiente se
dice que la lista enlazada es simple. Si
también se incluye una referencia al nodo
anterior, entonces la lista enlazada es doble.


                         Programación II
Listas enlazadas

NOTA: La mejor forma de entender
 estructuras enlazadas es manejar el
 diagrama de bloques y sus respectivos
 enlaces.
 Perder o no manejar bien un enlace
 provoca la pérdida de información a partir
 del bloque correspondiente.



                        Programación II
Listas enlazadas


            Data    Data          …          Data     NULO



 Cabecera
                                      Cola




NULO
             Data          Data
                                  …            Data
                                                       NULO



Cabecera
                                      Cola




                                  Programación II
Listas enlazadas




          Programación II
Listas enlazadas




          Programación II
Listas enlazadas




          Programación II
Listas enlazadas




          Programación II
Listas enlazadas




          Programación II
Listas enlazadas




          Programación II
Conjunto




      Programación II
Grafo

Estructura formada por un conjunto de nodos
o vértices y un conjunto de aristas o lados.
A ser usados por cualquier problema donde
se observa un conjunto de objetos y
conexiones entre ellos: mapa de rutas de
transporte, red de computadoras,
organigrama, diagrama de actividades
/prelaciones, etc.


                        Programación II
Grafo




    Programación II
Grafo




    Programación II
Grafo




    Programación II
Árboles

Tipo particular de grafo acíclico (sin ciclos)
formada por nodos en la cual cada uno de
ellos puede apuntar a uno o varios otros
nodos.
De forma recursiva, cada nodo puede apuntar
a otro árbol (sub-árbol).
Entre los nodos se establece una relación de
ascendencia / descendencia.


                          Programación II
Árboles

Nodo padre: nodo que contiene un apuntador
a otros nodos.
Nodo hijo: nodo que es apuntado por otro
nodo.
Nodo raíz: sólo se comporta como padre; él
mismo no tiene padre (no es hijo de nadie).
Nodo hoja: sólo se comporta como hijo; él
mismo no tiene hijos (no es padre de nadie).

                        Programación II
Árboles


               Raíz               Padre /
                                ascendente
                                   de G
   Hijos /
descendiente
   s de B
                                             Subárbol




      Hojas

                           Programación II
Árboles

Orden: número potencial de hijos que puede
tener cada nodo.
Grado: número de hijos que tiene el nodo con
más hijos en el árbol.
Nivel de un nodo: nivel de descendencia o
distancia a la raíz. El nivel de la raíz es 0.
Altura: nivel del nodo de mayor nivel.


                          Programación II
Árboles

Tres tipos de recorridos:
  1) Preorden: primero raíz y luego hijos
     empezando por hijo izquierdo.
  2) Postorden: primero hijos empezando por hijo
     izquierdo y luego raíz.
  3) Inorden: primero hijo izquierdo, luego raíz y
     finalmente el resto de los hijos.




                            Programación II
Árbol binario

Tipo particular de árbol de orden 2 (todo nodo
tiene un máximo de dos hijos: izquierdo y
derecho).




                        Programación II
Árbol binario




         Programación II
Árbol binario




         Programación II
Árbol binario

Un ejemplo muy común es la representación
de expresiones.
                           Preorden:
                               *+12-34
                           Postorden:
                               12+34-*
                           Inorden:
                                1+2*3-4


                      Programación II
Árbol binario




         Programación II
Árbol binario

Otro ejemplo es el árbol binario de búsqueda
(para nodos con datos enteros o que
contenga una clave que pueda ser
comparada): para cada nodo, su valor
siempre es mayor que los valores de los
nodos de su descendencia del subárbol
izquierdo y menor que los valores de los
nodos de su descendencia del subárbol
derecho.

                        Programación II
Árbol binario




Buscar un elemento:
  • Si el árbol está vacío el elemento no está.
  • Si el elemento coincide con el de la raíz listo.
  • Si el elemento es menor que el de la raíz se busca en
    el subárbol izquierdo, caso contrario se busca en el
    subárbol derecho.

                               Programación II
Árbol binario

Agregar un elemento:
  • Si el elemento está en el árbol no se agrega.
  • Si el elemento no está, éste se inserta a continuación
    del último nodo visitado en la búsqueda, respetando la
    regla de construcción del árbol, a la izquierda o
    derecha del nodo dependiendo si el valor a agregar es
    menor o mayor respectivamente que el del nodo.




                               Programación II
Árbol binario

Suprimir un elemento:
  • Si el elemento no está en el árbol no se puede
    suprimir.
  • Si el elemento está y es un nodo hoja se borra
    directamente cuidando de que la referencia del nodo
    padre correspondiente se anule.
  • Si no es un nodo hoja, hay que buscar el nodo más a
    la izquierda del subárbol derecho o el más a la
    derecha del subárbol izquierdo e intercambiar los
    valores con el nodo (eliminación lógica).
  • El nodo intercambiado se elimina físicamente.


                              Programación II
Árbol binario




         Programación II
Árbol binario




         Programación II

Estructuras no-lineales

  • 1.
    Presentación Estructuras de DatosNo Lineales Mauricio Paletta INGENIERÍA EN INFORMÁTICA Programación II Coordinación General de Pregrado UNIVERSIDAD NACIONAL EXPERIMENTAL DE GUAYANA Programación II
  • 2.
    Definición Son aquellas queocupan bloques de memoria no continuos / lineales. Para lidiar con el problema de la fragmentación y, sobre todo del crecimiento dinámico. Los bloques deben estar enlazados unos con otros para poder “navegar” por la estructura, es decir, tener acceso a otro(s) dato(s) a partir del actual. Programación II
  • 3.
    Definición Las ventajas delas estructuras lineales son desventajas en las estructuras no lineales y viceversa. Para los enlaces se requiere utilizar direcciones de memoria / apuntadores. Dos tipos de estructuras: 1) Listas enlazadas: simples, dobles. 2) Árboles: binarios, genéricos, grafos. Programación II
  • 4.
    Listas enlazadas Estructura formadapor nodos que se enlazan entre sí partiendo de un nodo inicial cuya referencia lleva el nombre de cabecera y una posible referencia al nodo final o cola. Si cada nodo apunta sólo a su siguiente se dice que la lista enlazada es simple. Si también se incluye una referencia al nodo anterior, entonces la lista enlazada es doble. Programación II
  • 5.
    Listas enlazadas NOTA: Lamejor forma de entender estructuras enlazadas es manejar el diagrama de bloques y sus respectivos enlaces. Perder o no manejar bien un enlace provoca la pérdida de información a partir del bloque correspondiente. Programación II
  • 6.
    Listas enlazadas Data Data … Data NULO Cabecera Cola NULO Data Data … Data NULO Cabecera Cola Programación II
  • 7.
    Listas enlazadas Programación II
  • 8.
    Listas enlazadas Programación II
  • 9.
    Listas enlazadas Programación II
  • 10.
    Listas enlazadas Programación II
  • 11.
    Listas enlazadas Programación II
  • 12.
    Listas enlazadas Programación II
  • 13.
    Conjunto Programación II
  • 14.
    Grafo Estructura formada porun conjunto de nodos o vértices y un conjunto de aristas o lados. A ser usados por cualquier problema donde se observa un conjunto de objetos y conexiones entre ellos: mapa de rutas de transporte, red de computadoras, organigrama, diagrama de actividades /prelaciones, etc. Programación II
  • 15.
    Grafo Programación II
  • 16.
    Grafo Programación II
  • 17.
    Grafo Programación II
  • 18.
    Árboles Tipo particular degrafo acíclico (sin ciclos) formada por nodos en la cual cada uno de ellos puede apuntar a uno o varios otros nodos. De forma recursiva, cada nodo puede apuntar a otro árbol (sub-árbol). Entre los nodos se establece una relación de ascendencia / descendencia. Programación II
  • 19.
    Árboles Nodo padre: nodoque contiene un apuntador a otros nodos. Nodo hijo: nodo que es apuntado por otro nodo. Nodo raíz: sólo se comporta como padre; él mismo no tiene padre (no es hijo de nadie). Nodo hoja: sólo se comporta como hijo; él mismo no tiene hijos (no es padre de nadie). Programación II
  • 20.
    Árboles Raíz Padre / ascendente de G Hijos / descendiente s de B Subárbol Hojas Programación II
  • 21.
    Árboles Orden: número potencialde hijos que puede tener cada nodo. Grado: número de hijos que tiene el nodo con más hijos en el árbol. Nivel de un nodo: nivel de descendencia o distancia a la raíz. El nivel de la raíz es 0. Altura: nivel del nodo de mayor nivel. Programación II
  • 22.
    Árboles Tres tipos derecorridos: 1) Preorden: primero raíz y luego hijos empezando por hijo izquierdo. 2) Postorden: primero hijos empezando por hijo izquierdo y luego raíz. 3) Inorden: primero hijo izquierdo, luego raíz y finalmente el resto de los hijos. Programación II
  • 23.
    Árbol binario Tipo particularde árbol de orden 2 (todo nodo tiene un máximo de dos hijos: izquierdo y derecho). Programación II
  • 24.
    Árbol binario Programación II
  • 25.
    Árbol binario Programación II
  • 26.
    Árbol binario Un ejemplomuy común es la representación de expresiones. Preorden: *+12-34 Postorden: 12+34-* Inorden: 1+2*3-4 Programación II
  • 27.
    Árbol binario Programación II
  • 28.
    Árbol binario Otro ejemploes el árbol binario de búsqueda (para nodos con datos enteros o que contenga una clave que pueda ser comparada): para cada nodo, su valor siempre es mayor que los valores de los nodos de su descendencia del subárbol izquierdo y menor que los valores de los nodos de su descendencia del subárbol derecho. Programación II
  • 29.
    Árbol binario Buscar unelemento: • Si el árbol está vacío el elemento no está. • Si el elemento coincide con el de la raíz listo. • Si el elemento es menor que el de la raíz se busca en el subárbol izquierdo, caso contrario se busca en el subárbol derecho. Programación II
  • 30.
    Árbol binario Agregar unelemento: • Si el elemento está en el árbol no se agrega. • Si el elemento no está, éste se inserta a continuación del último nodo visitado en la búsqueda, respetando la regla de construcción del árbol, a la izquierda o derecha del nodo dependiendo si el valor a agregar es menor o mayor respectivamente que el del nodo. Programación II
  • 31.
    Árbol binario Suprimir unelemento: • Si el elemento no está en el árbol no se puede suprimir. • Si el elemento está y es un nodo hoja se borra directamente cuidando de que la referencia del nodo padre correspondiente se anule. • Si no es un nodo hoja, hay que buscar el nodo más a la izquierda del subárbol derecho o el más a la derecha del subárbol izquierdo e intercambiar los valores con el nodo (eliminación lógica). • El nodo intercambiado se elimina físicamente. Programación II
  • 32.
    Árbol binario Programación II
  • 33.
    Árbol binario Programación II