proceso de admisión 2019 - cinvestav · estructuras de datos estructuras de datos lineales lista...
Post on 02-Aug-2020
8 Views
Preview:
TRANSCRIPT
Proceso de Admisión 2019
Curso de Programación Básica
Dr. Edwyn Javier Aldana Bobadilla
Temas:
1. Estructuras de datos
1.1 Uso y manejo de memoria: apuntadores en C
1.2 Variables y tipos de datos
1.3 Estructuras/Registros
1.4 Principales operaciones
1/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
En esta sección se revisará formalmente el concepto de Tipo de Dato
Abstracto (TDA) el cual es uno de los elementos fundamentales
en las ciencias de computación y programación. Posteriormente se
presentará una revisión de las estructuras de datos más comunes
modeladas y de�nidas en términos de TDAs. Los estudiantes deberán
realizar algunas implementaciones de dichas estructuras.
2/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Preliminares
• Las computadoras procesan cadenas conformadas por 1s y 0s,
las cuales representan datos e instrucciones para ser ejecutadas
por un microprocesador.
• En los inicios de la computación, los problemas eran
planteados a la computadora a través de esta representación.
• La complejidad de problemas generó la necesidad de crear
mecanismos que incorporaran representaciones más cercanas al
lenguaje natural (lenguajes de programación).
3/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Preliminares
• Las computadoras procesan cadenas conformadas por 1s y 0s,
las cuales representan datos e instrucciones para ser ejecutadas
por un microprocesador.
• En los inicios de la computación, los problemas eran
planteados a la computadora a través de esta representación.
• La complejidad de problemas generó la necesidad de crear
mecanismos que incorporaran representaciones más cercanas al
lenguaje natural (lenguajes de programación).
3/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Preliminares
• Las computadoras procesan cadenas conformadas por 1s y 0s,
las cuales representan datos e instrucciones para ser ejecutadas
por un microprocesador.
• En los inicios de la computación, los problemas eran
planteados a la computadora a través de esta representación.
• La complejidad de problemas generó la necesidad de crear
mecanismos que incorporaran representaciones más cercanas al
lenguaje natural (lenguajes de programación).
3/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Preliminares
• Un lenguaje de programación especifíca la forma en que los
datos y las instrucciones deben ser especi�cados(gramática del
lenguaje).
• La especi�cación de los datos de�ne lo que se denomina tipo
de dato, que no es más que la forma en la que cadena binaria
que representa un dato debe ser interpretada.
• Una interpretación básica podría ser un número real, entero o
un caractér.
• Esta interpretación se conoce como tipo de dato primitivo.
4/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Preliminares
• Un lenguaje de programación especifíca la forma en que los
datos y las instrucciones deben ser especi�cados(gramática del
lenguaje).
• La especi�cación de los datos de�ne lo que se denomina tipo
de dato, que no es más que la forma en la que cadena binaria
que representa un dato debe ser interpretada.
• Una interpretación básica podría ser un número real, entero o
un caractér.
• Esta interpretación se conoce como tipo de dato primitivo.
4/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Preliminares
• Un lenguaje de programación especifíca la forma en que los
datos y las instrucciones deben ser especi�cados(gramática del
lenguaje).
• La especi�cación de los datos de�ne lo que se denomina tipo
de dato, que no es más que la forma en la que cadena binaria
que representa un dato debe ser interpretada.
• Una interpretación básica podría ser un número real, entero o
un caractér.
• Esta interpretación se conoce como tipo de dato primitivo.
4/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Preliminares
• Un lenguaje de programación especifíca la forma en que los
datos y las instrucciones deben ser especi�cados(gramática del
lenguaje).
• La especi�cación de los datos de�ne lo que se denomina tipo
de dato, que no es más que la forma en la que cadena binaria
que representa un dato debe ser interpretada.
• Una interpretación básica podría ser un número real, entero o
un caractér.
• Esta interpretación se conoce como tipo de dato primitivo.
4/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Preliminares
• Es posible de�nir tipos de dato más complejos a través de un
Tipo Abstracto de Dato (TDA).
• El término abstracción se re�ere a que dicha de�nición es una
simpli�cación de la realidad que considera solamente las
propiedades y aspectos funcionales más importantes del tipo
de dato requerido.
• Un TDA especi�ca los posibles valores y las operaciones del
tipo de dato a ser de�nido.
• La especi�cación de un TDA es invariante a detalles de
implementación propios del lenguaje de programación.
5/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Preliminares
• Es posible de�nir tipos de dato más complejos a través de un
Tipo Abstracto de Dato (TDA).
• El término abstracción se re�ere a que dicha de�nición es una
simpli�cación de la realidad que considera solamente las
propiedades y aspectos funcionales más importantes del tipo
de dato requerido.
• Un TDA especi�ca los posibles valores y las operaciones del
tipo de dato a ser de�nido.
• La especi�cación de un TDA es invariante a detalles de
implementación propios del lenguaje de programación.
5/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Preliminares
• Es posible de�nir tipos de dato más complejos a través de un
Tipo Abstracto de Dato (TDA).
• El término abstracción se re�ere a que dicha de�nición es una
simpli�cación de la realidad que considera solamente las
propiedades y aspectos funcionales más importantes del tipo
de dato requerido.
• Un TDA especi�ca los posibles valores y las operaciones del
tipo de dato a ser de�nido.
• La especi�cación de un TDA es invariante a detalles de
implementación propios del lenguaje de programación.
5/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Preliminares
• Es posible de�nir tipos de dato más complejos a través de un
Tipo Abstracto de Dato (TDA).
• El término abstracción se re�ere a que dicha de�nición es una
simpli�cación de la realidad que considera solamente las
propiedades y aspectos funcionales más importantes del tipo
de dato requerido.
• Un TDA especi�ca los posibles valores y las operaciones del
tipo de dato a ser de�nido.
• La especi�cación de un TDA es invariante a detalles de
implementación propios del lenguaje de programación.
5/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Especi�cación formal de un TDA
La especi�cación de un TDA describe los posibles valores y las opera-
ciones asociadas al tipo. Si bien no existe una notación estandarizada,
aqui se utilizará la siguiente notación.
6/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Especi�cación formal de un TDA
TDA_<name>(values:<domain>;operations: < op1, op2, ..., opn >)Sintaxis:
Especi�cación de las operaciones<operation-name> (<argumentos>) =⇒<Tipo Resultado>
Semántica:Expresiones de casos base<operation-name> (<valores particulares>) =⇒< Resultado>
7/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Especi�cación formal de un TDA
La especi�cación de un TDA describe los posibles valores y las opera-
ciones asociadas al tipo. Si bien no existe una notación estandarizada,
aqui se utilizará la siguiente notación.
8/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Especi�cación formal de un TDA
TDA_Boolean(values:{True, False};operations:Not,And,Or, Implication, Iff)
Sintaxis:∗True =⇒ Boolean∗False =⇒ BooleanNot(Boolean) =⇒ BooleanAnd(Boolean,Boolean) =⇒ BooleanOr(Boolean,Boolean) =⇒ BooleanImplication(Boolean,Boolean) =⇒ BooleanI�(Boolean,Boolean) =⇒ Boolean
9/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Especi�cación formal de un TDA
Semántica:∀e de tipo BooleanNot(True) =⇒ FalseNot(False) =⇒ TrueAnd(e, T rue) =⇒ eAnd(e, False) =⇒ FalseOr(e, T rue) =⇒ TrueOr(e, False) =⇒ eImplication(True, e) =⇒ eImplication(False, e) =⇒ TrueI�(True, True) =⇒ TrueI�(False, False) =⇒ FalseI�(True, False) =⇒ FalseI�(False, True) =⇒ False
10/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Especi�cación formal de un TDA
Ejercicio: Realizar la implementación del TDA Boolean utilizando
lenguaje C
11/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Especi�cación formal de un TDA
Ejercicio: De�nir un TDA para números enteros. Dado el TDA reali-
zar la implementación usando el lenguaje C. Con dicha implementa-
ción, veri�car las sentencias de�nidas en la semántica.
12/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Tipo de Dato Abstracto (TDA)
Especi�cación formal de un TDA
TDA_Integer(values: Set of integer numbers Zoperations:Zero, Successor, Predecessor, Sum,Diff, Product)
Sintaxis:∗Zero =⇒ Integer∗Successor(Integer) =⇒ Integer∗Predecessor(Integer) =⇒ IntegerSum(Integer, Integer) =⇒ IntegerDi�(Integer, Integer) =⇒ IntegerProduct(Integer, Integer) =⇒ Integer
Semántica:∀m,n ∈ ZSuccesor(Predecessor(n)) =⇒ nPredecessor(Successor(n)) =⇒ nSum(n,Zero) =⇒ nSum(n, Succesor(m)) =⇒ Succesor(Sum(n,m))Sum(n, Predecessor(m)) =⇒ Predecessor(Sum(n,m))Di�(n,Zero) =⇒ nDi�(n, Succesor(m)) =⇒ Predecessor(Diff(n,m))Di�(n, Predecessor(m)) =⇒ Succesor(Diff(n,m))Product(n,Zero) =⇒ ZeroProduct(n, Succesor(m)) =⇒ Suma(Product(n,m), n)Product(n, Predecessor(m)) =⇒ Diff(Product(n,m), n)
13/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Una estructura de datos de�ne de manera abstracta la forma en
que los datos deben ser organizados con el propósito de almacenar-
los, consultarlos y modi�carlos de manera e�ciente. Tal de�nición
es posible en los términos de un TDA. La implementación de di-
cho TDA, determinará la forma física (dependiendo el lenguaje de
programación) en que la estructura será almacenada en memoria.
En las siguientes secciones se revisaran las estructuras de datos más
utlizadas en el contexto de la programación las cuales se han sub-
dividido en dos tipos: 1) Estructuras Lineales y 2) Estructuras
No-Lineales.
14/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Se denominarán estructuras lineales a aquellas en las que sus ele-
mentos son colocados de manera contigua (al menos desde el punto
de vista lógico). Los arreglos, las listas y las pilas son representantes
de esta categoría.
Logotipo.
15/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Lista Enlazada SimpleEstructura de datos conformada por una colección de elementos con-
tiguos denominados nodos. Un nodo es un registro conformado por
un campo de datos y un campo apuntador, el cual almacena la di-
rección del nodo sucesor o siguiente.
Figura 1: Ilustración de un nodo
16/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
• Existe un nodo especial o nodo base denominado head a
través del cual se pueden agregar nodos y tener acceso a estos.
• El nodo head no contiene datos, solo contiene la dirección al
primer nodo o elemento de la lista.
• Cuando la lista está vacia solo existirá el nodo head
apuntando a una dirección vacia o nula (denotada como NIL).
• Si existe uno o más nodos el nodo head apuntará al primer
elemento o nodo de la lista.
• El nodo terminal de la lista siempre apuntará a una dirección
de memoria vacia (NIL).
17/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
• Existe un nodo especial o nodo base denominado head a
través del cual se pueden agregar nodos y tener acceso a estos.
• El nodo head no contiene datos, solo contiene la dirección al
primer nodo o elemento de la lista.
• Cuando la lista está vacia solo existirá el nodo head
apuntando a una dirección vacia o nula (denotada como NIL).
• Si existe uno o más nodos el nodo head apuntará al primer
elemento o nodo de la lista.
• El nodo terminal de la lista siempre apuntará a una dirección
de memoria vacia (NIL).
17/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
• Existe un nodo especial o nodo base denominado head a
través del cual se pueden agregar nodos y tener acceso a estos.
• El nodo head no contiene datos, solo contiene la dirección al
primer nodo o elemento de la lista.
• Cuando la lista está vacia solo existirá el nodo head
apuntando a una dirección vacia o nula (denotada como NIL).
• Si existe uno o más nodos el nodo head apuntará al primer
elemento o nodo de la lista.
• El nodo terminal de la lista siempre apuntará a una dirección
de memoria vacia (NIL).
17/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
• Existe un nodo especial o nodo base denominado head a
través del cual se pueden agregar nodos y tener acceso a estos.
• El nodo head no contiene datos, solo contiene la dirección al
primer nodo o elemento de la lista.
• Cuando la lista está vacia solo existirá el nodo head
apuntando a una dirección vacia o nula (denotada como NIL).
• Si existe uno o más nodos el nodo head apuntará al primer
elemento o nodo de la lista.
• El nodo terminal de la lista siempre apuntará a una dirección
de memoria vacia (NIL).
17/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
• Existe un nodo especial o nodo base denominado head a
través del cual se pueden agregar nodos y tener acceso a estos.
• El nodo head no contiene datos, solo contiene la dirección al
primer nodo o elemento de la lista.
• Cuando la lista está vacia solo existirá el nodo head
apuntando a una dirección vacia o nula (denotada como NIL).
• Si existe uno o más nodos el nodo head apuntará al primer
elemento o nodo de la lista.
• El nodo terminal de la lista siempre apuntará a una dirección
de memoria vacia (NIL).
17/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Una lista enlazada simple es una colección de nodos interconecta-
dos mendiate apuntadores unidireccionales tal como se ilustra en la
Figura 2.
Figura 2: Tres posibles estados de una lista de enlace simple
18/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
A continuación se especi�ca formalmente una lista de enlace simplea través del TDA SingleLinkedList.
TDA_SingleLinkedList(values: Set of integer numbers Zoperations: Create, Push,AddIn, Pop,RemoveIn, Print)
Sintaxis:∗Create =⇒ SingleLinkedListPush(SingleLinkedList, Integer) =⇒ SingleLinkedListAddIn(SingleLinkedList, Integer, Integer) =⇒ SingleLinkedListPop(SingleLinkedList) =⇒ SingleLinkedListRemoveIn(SingleLinkedList, Integer) =⇒ SingleLinkedListLength(SingleLinkedList) =⇒ Integer
19/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Semántica: Let L = {Φ} be an empty single linked list. Let i, x, y, z be elements in ZPush(L, y) =⇒ L = {y}Push(L, x) =⇒ L = {x, y}AddIn(L, x,−1) =⇒ ErrorAddIn(L, z, 0) =⇒ L = {z, y, x}AddIn(L, x, 1) =⇒ L = {z, x, y, x}AddIn(L, y, Length(L)) =⇒ ErrorAddIn(L, y, Length(L)− 1) =⇒ L = {z, x, y, x, y}Pop(L) =⇒ L = {x, y, x, y}RemoveIn(L,−1) =⇒ ErrorRemoveIn(L, 0) =⇒ L = {y, x}Push(L, x) =⇒ L = {x, y, x}RemoveIn(L, x, 1) =⇒ L = {x, x}RemoveIn(L, y, Length(L)) =⇒ ErrorRemoveIn(L, y, Length(L)− 1) =⇒ L = {x}
Nótese que el TDA no se especifíca la estructura de los nodos de la lista. Esta de�niciónhace parte de la implementación.
20/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Ejercicio: Dado el TDA para la lista de enlace simple, realizar la
implementación usando el lenguaje C. Con dicha implementación,
veri�car las sentencias de�nidas en la semántica.
21/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Lista Enlazada DobleEs una colección de nodos contiguos en la que cada uno de estos al-
macena dos direcciones: 1) dirección al nodo siguiente y 2) dirección
al nodo anterior o precedente.
Figura 3: Ilustración de un nodo en una lista enlazada doble
22/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Existen dos nodos especiales: head y tail que solo almacenan direc-
ciones de memoria. Cuando la lista esta vacia, estos nodos apuntaran
a NIL.
Figura 4: Ilustración de lista enlazada doble vacía
23/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Cuando un nodo x va a ser adicionado, head deberá apuntar a dicho
nodo. Los apuntadores predecesor y sucesor del nodo x apuntarán
a una dirección vacía (NIL). Finalmente el apuntador tail deberá
apuntar a x.
Figura 5: Ilustración de lista enlazada doble con un elemento
24/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Conceptualmente, una lista enlazada doble tendrá las mismas opera-
ciones que una lista enlazada simple, la diferencia está en la forma en
que dichas operaciones son implementadas debido a los apuntadores
que permiten a un nodo tener referencias en dos direcciones (prede-
cesor y sucesor). Formalmente una lista enlazada puede ser de�nida
en términos de un TDA como el que se muestra a continuación:
25/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
PilaLa pila es una estructura de datos en la cual se insertan o eliminan
elementos exclusivamente por uno de los extremos denominado tope.
En función a está restricción, su comportamiento se describe como
LIFO (Last In ,First Out).
26/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Figura 6: Ilustración de una pila
27/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Una pila puede ser implementada a través de arreglos en cuyo caso es
necesario limitar el máximo número de elementos que la pila podrá
almacenar (lo cual representa un desventaja). Otra opción es a través
de lista enlazadas que le permiten crecer de manera dinámica.
28/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
A continuación de presenta una especi�cación formal de la pila através del TDA Stack.
TDA_Stack(values: Objects of type Elementoperations: Create, IsEmpty, Push, Pop, Size,Get)
Sintaxis:∗Create =⇒ StackIsEmpty(Stack) =⇒ BooleanPush(Stack,Element) =⇒ StackPop(Stack) =⇒ ElementSize(Stack) =⇒ IntegerGet(Stack) =⇒ Element
Semántica: Let P = {Φ} be an empty stack. Let i, x, y, z be elementsPush(P, y) =⇒ P = {y}Push(P, x) =⇒ P = {x, y}Pop(P ) =⇒ P = {y}IsEmpty(Pop(P )) =⇒ TrueGet(P ) =⇒ ErrorSize(P ) =⇒ ZeroPush(P, y) =⇒ P = {y}Get(P ) =⇒ x
29/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Ejercicio: Utilizando la implementación de la lista doblemente enla-
zada, realizar la implementación de la estructura de Pila basada en
el TDA Stack.
30/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Expresiones Aritméticas yPilas
Las expresiones aritméticas pueden representarse en las siguientes
notaciones
• Notación In�ja: a+b
• Notación Post�ja: ab+
• Notación Pre�ja: +ab
31/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Expresiones Aritméticas yPilas
Las expresiones aritméticas pueden representarse en las siguientes
notaciones
• Notación In�ja: a+b
• Notación Post�ja: ab+
• Notación Pre�ja: +ab
31/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Expresiones Aritméticas yPilas
Las expresiones aritméticas pueden representarse en las siguientes
notaciones
• Notación In�ja: a+b
• Notación Post�ja: ab+
• Notación Pre�ja: +ab
31/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Figura 7: Notaciones aritméticas
32/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Para transformar una expresión de notación in�ja a post�ja se utilizauna pila y se recorren los elementos de la expresión considerando:
1. Si el elemento es el operador ( se ignora.
2. Si el elemento es el operador ) se saca el elemento top de la pila y se imprime enla salida.
3. Si el elemento e es un operando se imprime directamente como salida.
4. Si el elemento e es un operador y la pila está vacia se agrega dicho elemento ala pila.
5. Si el elemento e es un operador y la pila no esta está vacia se compara con eltop de la pila. Si top � e se saca top de la pila y se imprime en la salida, de locontrario e se agrega a la pila.
6. Si la pila no esta vacia, se sacan uno a uno sus elementos para imprimirlos en lasalida.
33/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Para transformar una expresión de notación in�ja a pre�ja:
1. Se transforma la expresión in�ja a una expresión inversa (e.g.
A+B ∗ C −→ C ∗B +A). Cuando la expresión contiene
paréntesis '(' se tranforma en ')' y viceversa.
2. Obtener la expresión post�ja de la expresión inversa.
3. Invertir nuevamente la expresión resultante.
34/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Ejercicio: Crear un programa que permita transformar un expresión
in�ja en post�ja. Utilizar la estructura de pila implementada en ejer-
cicios anteriores.
35/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Cola• Una cola se puede de�nir como una colección de elementos en la que se
introducen elementos por un extremo y se eliminan por el otro. Debido al ordencon el cual se insertan o eliminan estos elementos el comportamiento de unacola se conoce como FIFO (First Input, First Output).
• Las operaciones importantes son: insertar elemento la cual típicamente seconoce como enqueue y eliminar conocido como dequeue. Para laimplementación de una cola se puede utilizar una lista simplemente enlazada.
36/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Cola• Una cola se puede de�nir como una colección de elementos en la que se
introducen elementos por un extremo y se eliminan por el otro. Debido al ordencon el cual se insertan o eliminan estos elementos el comportamiento de unacola se conoce como FIFO (First Input, First Output).
• Las operaciones importantes son: insertar elemento la cual típicamente seconoce como enqueue y eliminar conocido como dequeue. Para laimplementación de una cola se puede utilizar una lista simplemente enlazada.
36/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras de Datos Lineales
Ejercicio: De�nir el TDA denominado TDA_Queue con las ope-
raciones enqueue and dequeue. Utilizando la implementación de
la lista simplemente enlazada realizar la implementación para un
TDA_Queue.
37/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Árboles• En general un árbol es una estructura de datos jerárquica compuesta por
elementos denominados nodos.
• El primer nodo de la jerarquía es llamado nodo raiz.• Desde el punto de vista conceptual los nodos se contectan entre sí por medio de
aristas que de�nen una relación de parentesco, dando lugar a términos comopadre, hijo, hermano, antecesor, sucesor, etc.
• Los nodos que no tienen descendencia se llaman nodos terminales u hojas.
38/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Árboles• En general un árbol es una estructura de datos jerárquica compuesta por
elementos denominados nodos.• El primer nodo de la jerarquía es llamado nodo raiz.
• Desde el punto de vista conceptual los nodos se contectan entre sí por medio dearistas que de�nen una relación de parentesco, dando lugar a términos comopadre, hijo, hermano, antecesor, sucesor, etc.
• Los nodos que no tienen descendencia se llaman nodos terminales u hojas.
38/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Árboles• En general un árbol es una estructura de datos jerárquica compuesta por
elementos denominados nodos.• El primer nodo de la jerarquía es llamado nodo raiz.• Desde el punto de vista conceptual los nodos se contectan entre sí por medio de
aristas que de�nen una relación de parentesco, dando lugar a términos comopadre, hijo, hermano, antecesor, sucesor, etc.
• Los nodos que no tienen descendencia se llaman nodos terminales u hojas.
38/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Árboles• En general un árbol es una estructura de datos jerárquica compuesta por
elementos denominados nodos.• El primer nodo de la jerarquía es llamado nodo raiz.• Desde el punto de vista conceptual los nodos se contectan entre sí por medio de
aristas que de�nen una relación de parentesco, dando lugar a términos comopadre, hijo, hermano, antecesor, sucesor, etc.
• Los nodos que no tienen descendencia se llaman nodos terminales u hojas.
38/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Árboles binarios• Existe un tipo particular de arból denominado árbol binario en el cual todos su
nodos tienen dos hijos como máximo.
• Una de las operaciones más importantes es el recorrido, el cual consiste envisitar cada nodo de forma sistemática. Existen tres tipos de recorrido:
• Preorden: Consiste en visitar la raiz, recorrer en preorden (recursivamente) elsubárbol izquierdo y recorrer en preorden el subárbol derecho (raiz, izq, der).
• Inorden: Recorrer el subárbol izquierdo, visitar la raiz y recorrer el subárbolderecho. Los recorridos de los subárboles (izquierdo y derecho) se realizanrecursivamente siguiendo el recorrido mencionado (izq, raiz, der).
• Postorden: Recorrer el subárbol izquierdo, recorrer el subárbol derecho y visitarla raiz . Los recorridos de los subárboles (izquierdo y derecho) se realizanrecursivamente siguiendo el recorrido mencionado (izq, der, raiz).
39/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Árboles binarios• Existe un tipo particular de arból denominado árbol binario en el cual todos su
nodos tienen dos hijos como máximo.• Una de las operaciones más importantes es el recorrido, el cual consiste en
visitar cada nodo de forma sistemática. Existen tres tipos de recorrido:
• Preorden: Consiste en visitar la raiz, recorrer en preorden (recursivamente) elsubárbol izquierdo y recorrer en preorden el subárbol derecho (raiz, izq, der).
• Inorden: Recorrer el subárbol izquierdo, visitar la raiz y recorrer el subárbolderecho. Los recorridos de los subárboles (izquierdo y derecho) se realizanrecursivamente siguiendo el recorrido mencionado (izq, raiz, der).
• Postorden: Recorrer el subárbol izquierdo, recorrer el subárbol derecho y visitarla raiz . Los recorridos de los subárboles (izquierdo y derecho) se realizanrecursivamente siguiendo el recorrido mencionado (izq, der, raiz).
39/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Árboles binarios• Existe un tipo particular de arból denominado árbol binario en el cual todos su
nodos tienen dos hijos como máximo.• Una de las operaciones más importantes es el recorrido, el cual consiste en
visitar cada nodo de forma sistemática. Existen tres tipos de recorrido:• Preorden: Consiste en visitar la raiz, recorrer en preorden (recursivamente) el
subárbol izquierdo y recorrer en preorden el subárbol derecho (raiz, izq, der).
• Inorden: Recorrer el subárbol izquierdo, visitar la raiz y recorrer el subárbolderecho. Los recorridos de los subárboles (izquierdo y derecho) se realizanrecursivamente siguiendo el recorrido mencionado (izq, raiz, der).
• Postorden: Recorrer el subárbol izquierdo, recorrer el subárbol derecho y visitarla raiz . Los recorridos de los subárboles (izquierdo y derecho) se realizanrecursivamente siguiendo el recorrido mencionado (izq, der, raiz).
39/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Árboles binarios• Existe un tipo particular de arból denominado árbol binario en el cual todos su
nodos tienen dos hijos como máximo.• Una de las operaciones más importantes es el recorrido, el cual consiste en
visitar cada nodo de forma sistemática. Existen tres tipos de recorrido:• Preorden: Consiste en visitar la raiz, recorrer en preorden (recursivamente) el
subárbol izquierdo y recorrer en preorden el subárbol derecho (raiz, izq, der).• Inorden: Recorrer el subárbol izquierdo, visitar la raiz y recorrer el subárbol
derecho. Los recorridos de los subárboles (izquierdo y derecho) se realizanrecursivamente siguiendo el recorrido mencionado (izq, raiz, der).
• Postorden: Recorrer el subárbol izquierdo, recorrer el subárbol derecho y visitarla raiz . Los recorridos de los subárboles (izquierdo y derecho) se realizanrecursivamente siguiendo el recorrido mencionado (izq, der, raiz).
39/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Árboles binarios• Existe un tipo particular de arból denominado árbol binario en el cual todos su
nodos tienen dos hijos como máximo.• Una de las operaciones más importantes es el recorrido, el cual consiste en
visitar cada nodo de forma sistemática. Existen tres tipos de recorrido:• Preorden: Consiste en visitar la raiz, recorrer en preorden (recursivamente) el
subárbol izquierdo y recorrer en preorden el subárbol derecho (raiz, izq, der).• Inorden: Recorrer el subárbol izquierdo, visitar la raiz y recorrer el subárbol
derecho. Los recorridos de los subárboles (izquierdo y derecho) se realizanrecursivamente siguiendo el recorrido mencionado (izq, raiz, der).
• Postorden: Recorrer el subárbol izquierdo, recorrer el subárbol derecho y visitarla raiz . Los recorridos de los subárboles (izquierdo y derecho) se realizanrecursivamente siguiendo el recorrido mencionado (izq, der, raiz).
39/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Ejercicio: Realizar los recorridos preorden, inorden y postorden del árbol de la Figura8a.
(a) Árbol binario de búsqueda
40/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Ejercicio Crear el TDA_BinaryTree que permita de�nir un árbol binario con lassiguientes operaciones create, append, remove y print. La operación print deberá darla opción de mostrar el árbol en un recorrido seleccionado por el usuario (preorden,inorden, postorden). Con base en el TDA anterior realizar la implementación en C.
41/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Árbol Binario de Búsqueda• Los árboles binarios de búsqueda se utilizan para almacenar y tener acceso
rápido a la información.
• Para todo nodo x en el árbol los valores de todos los nodos de su subárbolizquierdo son menores que el valor de x.
• Para todo nodo x los valores de todos los nodos de su subárbol derecho sonmayores que el valor de x.
• No se almacenan nodos con información repetida. Si la información del nodo aagregar se encuentra en el árbol simplemente no se agrega.
42/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Árbol Binario de Búsqueda• Los árboles binarios de búsqueda se utilizan para almacenar y tener acceso
rápido a la información.• Para todo nodo x en el árbol los valores de todos los nodos de su subárbol
izquierdo son menores que el valor de x.
• Para todo nodo x los valores de todos los nodos de su subárbol derecho sonmayores que el valor de x.
• No se almacenan nodos con información repetida. Si la información del nodo aagregar se encuentra en el árbol simplemente no se agrega.
42/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Árbol Binario de Búsqueda• Los árboles binarios de búsqueda se utilizan para almacenar y tener acceso
rápido a la información.• Para todo nodo x en el árbol los valores de todos los nodos de su subárbol
izquierdo son menores que el valor de x.• Para todo nodo x los valores de todos los nodos de su subárbol derecho son
mayores que el valor de x.
• No se almacenan nodos con información repetida. Si la información del nodo aagregar se encuentra en el árbol simplemente no se agrega.
42/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Árbol Binario de Búsqueda• Los árboles binarios de búsqueda se utilizan para almacenar y tener acceso
rápido a la información.• Para todo nodo x en el árbol los valores de todos los nodos de su subárbol
izquierdo son menores que el valor de x.• Para todo nodo x los valores de todos los nodos de su subárbol derecho son
mayores que el valor de x.• No se almacenan nodos con información repetida. Si la información del nodo a
agregar se encuentra en el árbol simplemente no se agrega.
42/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Figura 9: Árbol binario de búsqueda
43/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Como operaciones básicas de un árbol binario se tienen:1. Buscar: Sea z un elemento para ser buscado en un árbol T . Para realizar una
búsqueda se compara z con el elemento del nodo raiz de T . Si z es menor, sesigue buscando únicamente dentro del subárbol izquierdo, en otro caso solo seconsiderará el subárbol derecho. Este proceso continúa hasta encontrar z ohasta alcanzar un nodo terminal sin haber tenido éxito en la búsqueda.
2. Insertar: Siempre el primer elemento se almacenará en la raiz del árbol. Parainsertar un elemento adicional en el árbol se debe determinar la posición que lecorresponde, a través del proceso de búsqueda. Si se encuentra el elemento, nose inserta y el proceso de inserción �naliza. En otro caso, se inserta a laizquierda o a la derecha del nodo terminal alcanzado, dependiendo si elelemento a agregar es mayor o menor.
44/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Como operaciones básicas de un árbol binario se tienen:1. Buscar: Sea z un elemento para ser buscado en un árbol T . Para realizar una
búsqueda se compara z con el elemento del nodo raiz de T . Si z es menor, sesigue buscando únicamente dentro del subárbol izquierdo, en otro caso solo seconsiderará el subárbol derecho. Este proceso continúa hasta encontrar z ohasta alcanzar un nodo terminal sin haber tenido éxito en la búsqueda.
2. Insertar: Siempre el primer elemento se almacenará en la raiz del árbol. Parainsertar un elemento adicional en el árbol se debe determinar la posición que lecorresponde, a través del proceso de búsqueda. Si se encuentra el elemento, nose inserta y el proceso de inserción �naliza. En otro caso, se inserta a laizquierda o a la derecha del nodo terminal alcanzado, dependiendo si elelemento a agregar es mayor o menor.
44/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
3. Eliminar: Es la operación más complicada debido a que al eliminar un elemento
se debe garantizar el cumplimiento de la de�nición del árbol binario de
búsqueda. Para esto se deben considerar tres casos:
3.1 Si el nodo a eliminar es hoja o nodo terminal, simplemente se elimina y elapuntador a él se sustituye por un apuntador a NULL.
3.2 Si tiene solo un hijo, entonces el nodo a ser eliminado se sustituye pordicho hijo.
3.3 Si tiene dos descendientes, entonces se sustituye por el nodo que está mása la derecha de su subárbol izquierdo o por el que está más a la izquierdade su subárbol derecho.
45/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Árboles AVLNo siempre resulta útil hacer búsquedas en un árbol binario ya que estas pueden serequivalentes a una búsqueda secuencial.
(a) (b)
Figura 10: Dos posibles instancias de un árbol binario de búsqueda46/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Para evitar el caso ilustrado, surge un nuevo tipo de árbol binario
en el que ninguna rama crece más que otra para evitar con�gura-
ciones secuenciales. Este tipo de árboles son denominados árboles
balanceados o también árboles AVL (Adelson. Velskii, Landis)
47/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Para describir este tipo de árboles es necesario precisar los siguientesconceptos:
1. Altura de un nodo: Es la longitud del camino que va desde el nodo hasta la hojamás lejana de sus descendientes.
2. Longitud de camino: Es la cantidad de aristas que se deben visitar para ir desdeel nodo x hasta el nodo y.
48/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Para describir este tipo de árboles es necesario precisar los siguientesconceptos:
1. Altura de un nodo: Es la longitud del camino que va desde el nodo hasta la hojamás lejana de sus descendientes.
2. Longitud de camino: Es la cantidad de aristas que se deben visitar para ir desdeel nodo x hasta el nodo y.
48/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Dado un árbol binario de búsqueda T con nodo raiz r, su altura
denotada como H(T ) puede ser expresada como:
H(T ) =
0 T = {r}
1 +max{H(Tizq), H(Tder)} otherwise(2.1)
donde H(Tizq) y H(Tder) son las alturas de los subárboles izquierdo
y derecho.
49/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
• Se dice que el árbol está equilibrado si la altura del hijo
izquierdo y la del hijo derecho de todos los nodos di�ere
cuando mucho en 1.
• Este valor se conoce como el factor de equilibrio (FE) y los
valores deseados son -1, 0 1.
50/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
• Se dice que el árbol está equilibrado si la altura del hijo
izquierdo y la del hijo derecho de todos los nodos di�ere
cuando mucho en 1.
• Este valor se conoce como el factor de equilibrio (FE) y los
valores deseados son -1, 0 1.
50/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
En la Figura se ilustra un árbol con la altura para cada uno de los
nodos, de donde se puede determinar que para el nodo 4, FE = 2
(la diferencia de sus subárboles 3− 1).
Figura 11: Altura en un árbol binario de búsqueda
51/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
De lo anterior se deduce que el árbol no está balanceado por lo cual
se tiene que realizar un reacomodo de los nodos como el que se ilustra
en la Figura 12b. Estos reacomodos se denominan rotaciones.
(a) (b)
Figura 12: Balanceo de un árbol binario de búsqueda52/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Al insertar un nuevo nodo, existe la posibilidad de que este produzca un desequilibrioen un nodo X (FE = 2 o FE = −2). Esto plantea las siguientes situaciones:
(a) Subárbol izquierdodel hijo izquierdo deX
(b) Subárbol derechodel hijo derecho de X
53/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
(a) Subárbol derechodel hijo izquierdo de X
(b) Subárbol izquierdodel hijo derecho de X
54/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Rotación II
55/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Rotación II
56/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Rotación II
57/64 Tipos de Datos Abstractos y Estructuras Junio 2019
Estructuras de Datos
Estructuras No-Lineales
Ejercicio: Para el siguiente árbol dibuje el árbol resultante después de eliminar el número5. Determine si el árbol es AVL, de no ser así realice las operaciones necesarias paraesta condición se cumpla.
58/64 Tipos de Datos Abstractos y Estructuras Junio 2019
top related