Clase 5 - Programación I

Anuncio
Estructuras de Datos Dinámicas:
Pilas y Filas
Tipo de Dato Abstracto
Programación I
Departamento de Informática
Universidad Nacional de San Luis
Argentina
Repaso de Estructuras de Datos (1)
•
Nociones Generales
– Agrupación de valores que por razones lógicas,
se quiere conservar ‘juntos’.
– Cómo se incorpora un nuevo elemento a la
estructura.
– Cómo se elimina o cambia un elemento que ya
está en la estructura.
– Cómo se inspecciona un elemento que ya está en
la estructura.
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas y TDA
2
Repaso de Estructuras de Datos (2)
•
•
Estos tres últimos aspectos tienen que ver
con las operaciones que pueden hacerse
sobre la estructura de datos: Poner, Sacar,
Inspeccionar.
Orden, con respecto a las operaciones:
Cronológico, No Cronológico.
– Cómo se guardan los elementos en la estructura,
es decir en qué orden se encuentran unos con
respecto a los otros. Deben tener algún orden o
estructura.
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas y TDA
3
Repaso de Estructuras de Datos (3)
•
•
•
Cuántos elementos se pueden guardar, capacidad
de almacenamiento de la estructura: Estática /
Dinámica.
Identificar o seleccionar los elementos de la
estructura: sin ambigüedad. Selector de la
estructura, Unívoco. Explícito / Implícito.
Tipo de los datos de los elementos de la estructura.
A este tipo de dato le llamaremos tipo de dato base
de la estructura. Simples / Compuestos.
Homogéneo / Heterogéneo.
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas y TDA
4
Estructuras de Datos Dinámicas:
Pila (stack) (1)
• Capacidad:
Dinámica, crece y disminuye con las
inserciones y supresiones
Por eso se habla de que la estructura puede
estar vacía
• Orden: LIFO
Departamento de Unformática - UNSL
Last In First Out.
Programación I - Estrucutras Dinámicas y TDA
5
Estructuras de Datos Dinámicas:
Pila (stack) (2)
• Operaciones.
–
–
–
–
–
Inicialización (init)
Inserción (insert o push)
Supresión (suppress o pop)
Copia (copy o top o peek)
Predicados: isEmpty, isFull.
tope
• Selector: implícito  tope
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas y TDA
6
Estructuras de Datos Dinámicas:
Pila (stack) (3)
suprimir (pop)
insertar (push) Z
insertar (push) R
insertar (push) Q
Z
R
Q
tope
isEmpty
isEmpty == false
true
(verdadero)
(falso)
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas y TDA
7
Estructuras de Datos Dinámicas:
Fila o cola (queue) (1)
• Capacidad:
Dinámica, crece y disminuye con las
inserciones y supresiones
Por eso se habla de que la estructura puede
estar vacía.
•
Orden: FIFO
Departamento de Unformática - UNSL
First In First Out.
Programación I - Estrucutras Dinámicas y TDA
8
Estructuras de Datos Dinámicas:
Fila o cola (queue) (2)
• Operaciones.
–
–
–
–
–
Inicialización (init)
Inserción (insert)  después del último
Supresión (suppress)
primero
Copia (copy)
Predicados: isEmpty, isFull.
• Selector: implícito  primero / último
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas y TDA
9
Estructuras de Datos Dinámicas:
Fila o cola (queue) (2)
suprimir
insertar Z
insertar R
Insertar Q
primero
Q
último
Departamento de Unformática - UNSL
R
Z
isEmpty = false isEmpty = true
(falso)
(verdadero)
Programación I - Estrucutras Dinámicas y TDA
10
Tipo de Datos Abstracto (TDA) (1)
• En inglés: Abstract Data Type (ADT).
• TDA se define a partir de las operaciones que
pueden ser realizadas sobre los datos del tipo.
• Hay modelos matemáticos para los tipos de
datos. Ej.: enteros y suma.
• Ocultamiento de la información (information
hiding).
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas y TDA
11
Tipo de Datos Abstracto (TDA) (2)
Ejemplo: Stack (Pila) podría ser definido por
solo tres operaciones (funciones) sobre las pilas:
init, push, pop, y un predicado: isEmpty.
Operaciones (funciones) :
init:  Stack
push: Elem  Stack  Stack
pop: Stack  Stack  Elem
isEmpty: Stack  boolean
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas y TDA
12
Tipo de Datos Abstracto (TDA) (3)
init:  Stack
push: Elem  Stack  Stack
pop: Stack  Stack  Elem
isEmpty: Stack  boolean
pop(init()) = ERROR
pop(push(e, s)) = (s, e)
isEmpty(init()) = true
isEmpty(push(e, s)) = false
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas y TDA
13
Tipo de Datos Abstracto (TDA) (4)
• Lenguaje de programación: se implementa un
nuevo tipo no provisto por el lenguaje, sobre la
base de los tipos y operaciones existentes.
• TDA en C para prácticas de pilas, filas, listas
cuyo tipo base puede ser enteros (int) y
carácter (char).
• Declaraciones de variables y operaciones.
– Ej.: pila_char pila;
• Apunte TDA.
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas y TDA
14
Tipo de Datos Abstracto (TDA) (5)
Ejemplo de uso (1)
/* ****** Print fila int ****** */
void printFilaInt (fila_int x) {
while (!isEmpty(x)) {
printf("%d ", copy(x));
suppress(&x);
}
printf("\n");
} /* fin de printFilaInt */
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas y TDA
15
Tipo de Datos Abstracto (TDA) (6)
Ejemplo de uso (2)
/* ****** Buscar en fila int ****** */
void buscaFilaInt (fila_int x, int y) {
while (!isEmpty(x) && copy(x) != y) {
suppress(&x);
}
if (!isEmpty(x))
printf(“%d esta en la fila\n”, y);
else
printf(“%d NO esta en la fila\n“, y);
} /* fin de buscaFilaInt */
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas y TDA
16
Tipo de Datos Abstracto (TDA) (7)
Ejemplo de uso (3)
/* ****** Copiar fila int ****** */
void copiaFilaInt (fila_int *x,
fila_int y){
while (!isEmpty(y)) {
insert(x, copy(y));
suppress(&y);
}
} /* fin de copiaFilaInt */
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas y TDA
17
Estructuras de Datos Dinámicas:
Listas (1)
•
Capacidad: dinámica, crece y disminuye con las
inserciones y supresiones
•
Orden: No tiene orden cronológico de
inserción o supresión.
Secuencia.
•
–
unidireccional, 1º  último
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas
18
Estructuras de Datos Dinámicas:
Listas (2)
•
Elementos de una lista unidireccional o
secuencia, llamados nodos, constan de dos
partes:
•
•
•
Variable de Información Propiamente Dicha
(VIPD)
puntero al elemento (nodo) siguiente en la
lista.
último elemento, el puntero no apunta a un
elemento y se dice que su valor es nil
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas
19
Estructuras de Datos Dinámicas:
Listas (3)
Operaciones
–
–
–
–
Inserción
Supresión
Copia
Predicados: isEmpty, isFull.
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas
20
Estructuras de Datos Dinámicas:
Listas (4)
• Selector de la lista: implícito  cursor
• Operaciones sobre el cursor de la lista
– Ir al primero: reset
– Avanzar: forwards
– Predicado:
Fuera de la estructura (cursor = nil): isOos
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas
21
Estructuras de Datos Dinámicas:
Listas: Representación gráfica (4)
Acceso a
la lista
Puntero al
siguiente
vipd
•••
A
nil
•••
Elemento i
Cursor
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas
22
Cursor
insert con lista vacía
– isEmpty = true  isOos = true
Z
– isEmpty = false  isOos = false
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas
23
Cursor
insert con lista NO vacía
– isEmpty = false  isOos = false
•••
G
•••
i
i+1
i
•••
P
G
•••
– isEmpty = false  isOos = false
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas
24
Cursor
insert con lista NO vacía
– isEmpty = false  isOos = true
•••
7
•••
•••
7
•••
4
– isEmpty = false  isOos = false
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas
25
Cursor
suppress con lista NO vacía
– isEmpty = false  isOos = false
•••
Y
T
•••
i
i+1
•••
T
•••
i
– isEmpty = false  isOos = false
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas
26
Cursor
suppress con lista NO vacía
– isEmpty = false  isOos = false
•••
S
D
n
n-1
•••
– isEmpty = false  isOos = true
Departamento de Unformática - UNSL
S
n-1
Programación I - Estrucutras Dinámicas
27
Cursor
suppress con lista NO vacía
– isEmpty = false  isOos = false
R
– isEmpty = true  isOos = true
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas
28
Tipo de Datos Abstracto (TDA) (1)
Ejemplo de uso (1)
#include “list_of_int.h”
...
/**** Imprime lista de enteros ****/
void printListaInt (list_of_int x) {
reset(&x);
while (!isOos(x)) {
printf("%d ", copy(x));
forwards(&x);
}
printf("\n");
} /* fin de printListaInt */
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas y TDA
29
Tipo de Datos Abstracto (TDA) (2)
Ejemplo de uso (2)
#include “list_of_char.h”
...
/* ***** Buscar en lista de char ***** */
void buscaListaChar(list_of_char x, char y) {
reset(&x);
while (!isOos(x) && copy(x) != y) {
forwards(&x);
}
if (!isOos(x))
printf(“%c esta en la lista\n”, y);
else
printf(“%c NO esta en la lista\n“, y);
} /* fin de buscaListaChar */
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas y TDA
30
Tipo de Datos Abstracto (TDA) (3)
Ejemplo de uso (3)
#include “list_of_int.h”
...
/* ****** Copiar lista de int ****** */
void copiaListaInt (lista_of_int *x,
lista_of_int y) {
reset(&y);
while (!isOos(y)) {
insert(x, copy(y));
forwards(&y);
}
} /* fin de copiaListaInt */
Departamento de Unformática - UNSL
Programación I - Estrucutras Dinámicas y TDA
31
Descargar