PDF de programación - Estructuras de Datos Dinámicas: Listas - Teoría: Programación I

Imágen de pdf Estructuras de Datos Dinámicas: Listas - Teoría: Programación I

Estructuras de Datos Dinámicas: Listas - Teoría: Programación Igráfica de visualizaciones

Publicado el 29 de Diciembre del 2019
1.612 visualizaciones desde el 29 de Diciembre del 2019
96,7 KB
38 paginas
Creado hace 5a (10/10/2018)
Estructuras de Datos Dinámicas:

Listas

Teoría: Programación I

http://proguno.unsl.edu.ar

[email protected]

Listas

• Capacidad: dinámica
• Orden: no cronológico. El orden puede ser

definido por el programador. Ej. Orden
alfabético, orden numérico, etc…

• Implementaciones:

– Listas estáticas
– Listas dinámica

Departamento de Unformática - UNSL

Programación I - Estrucutras Dinámicas

2

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

3

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

4

Estructuras de Datos Dinámicas:

Listas (3)

Operaciones sobre la lista

– Inserción
– Supresión
– Copia
– Predicados: isEmpty, isFull

Departamento de Unformática - UNSL

Programación I - Estrucutras Dinámicas

5

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

6

Estructuras de Datos Dinámicas:
Listas: Representación gráfica (4)

Acceso a
la lista

vipd

Puntero al
siguiente

nil

• • •

A

• • •

Elemento i

Cursor

Departamento de Unformática - UNSL

Programación I - Estrucutras Dinámicas

7

Cursor

insert con lista vacía

– isEmpty = true  isOos = true

– isEmpty = false  isOos = false

Z

Departamento de Unformática - UNSL

Programación I - Estrucutras Dinámicas

8

Cursor

insert con lista NO vacía

– isEmpty = false  isOos = false

• • •

G

• • •

i

i

i + 1

• • •

P

G

• • •

– isEmpty = false  isOos = false

Departamento de Unformática - UNSL

Programación I - Estrucutras Dinámicas

9

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

10

Cursor

suppress con lista NO vacía

– isEmpty = false  isOos = false

• • •
i

Y

T

• • •

i + 1

• • •
i

T

• • •

– isEmpty = false  isOos = false

Departamento de Unformática - UNSL

Programación I - Estrucutras Dinámicas

11

Cursor
suppress con lista NO vacía

– isEmpty = false  isOos = false

• • •

S

D

n

n - 1

– isEmpty = false  isOos = true

• • •

S

n - 1

Departamento de Unformática - UNSL

Programación I - Estrucutras Dinámicas

12

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

13

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

14

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) {

forwards(&x);

reset(&x);
while (!isOos(x) && copy(x) != y) {
}
if (!isOos(x))
else

printf(“%c esta en la lista\n”, y);
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

15

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

16

¿Pensemos?

• ¿Es posible implementar una Pila dinámica?
• ¿Y una Fila?
• ¿Cómo implemento la lista en forma

dinámica? Memoria?

¿Cómo?

Departamento de Unformática - UNSL

Programación I - Estrucutras Dinámicas

17

Programación I
Datos Recursivos

http://proguno.unsl.edu.ar

[email protected]

Definiciones recursivas

Repaso

• La definición de un concepto es recursiva si

el concepto es definido en términos de sí
mismo.

• En una definición recursiva, en general,

distinguimos dos partes:
– Caso(s) base o elemental(es).
– Definición recursiva o caso general.

19

Recursividad en Computación

Repaso

• Se encuentra presente en:

–Definiciones recursivas de módulos.
–Definiciones recursivas de datos.

20

Definiciones Recursivas de Datos

• Ejemplo 1: Definición recursiva de una lista

elemento seguido de una Lista (Caso General)

Lista

Lista vacía (Caso base)

21

Definiciones Recursivas de Datos

• Ejemplo 2: Definición recursiva de un árbol

binario

Árbol derecho + Árbol izquierdo (Caso Gral.)

Árbol

Árbol vacío (Caso base)

22

Datos Recursivos en C

• Diversas estructuras de datos pueden ser

implementadas por medio de datos recursivos.

• En esta materia:

– Listas
– Pilas
– Colas

23

Datos Recursivos en C

• Se pueden implementar en C por medio de
structs que se autoreferencian por medio de
campos de tipo puntero.

24

Datos Recursivos en C - LISTAS
struct nodo{
char vipd;
struct nodo *siguiente;
};
• Cada struct nodo es un registro con dos
campos (vipd y siguiente), que tiene la
siguiente pinta:

‘A’

vipd

siguiente

25

Datos Recursivos en C -LISTAS
struct nodo{
char vipd;
struct nodo *siguiente;
};
• Podemos también representar gráficamente un
struct nodo de la forma que estamos más
habituados:

siguiente

26

‘A’

vipd

Datos Recursivos en C -LISTAS

struct nodo{
char vipd;
struct nodo *next;
}
typedef struct nodo Nodo;
typedef Nodo * list_of_char;
list_of_char lis = NULL;/*lista vacia*/

lis

27

Datos Recursivos en C -LISTAS
 ¿Nos basta con definir el tipo list_of_char como
Nodo *?
 Sí y no

• Si, porque es una posible representación para una lista.
– No, porque queremos implementar las listas
unidireccionales tal como lo hemos venido
haciendo, es decir, necesitaremos mantener
información no solo sobre el acceso a la lista sino
también sobre sus cursores.

28

Implementación de un TDA para

Listas Unidireccionales
– 1) Definir el tipo de dato para soportar las listas.
– 2) Definir las funciones típicas para operar con las listas y

a partir de las cuales podremos definir nuevas funciones:

– init
– isEmpty
– isFull
– reset
– forward
– isOos
– copy
– insert
– suppress

29

Implementación de un TDA para

Listas Unidireccionales

• 1) Definición del tipo de dato

– Para soportar una lista unidireccional tal como lo
hemos venido haciendo necesitaremos mantener
información sobre:
• Acceso a la lista
• Cursor de la lista
• Cursor auxiliar

30

Implementación de un TDA para

Listas Unidireccionales

struct nodo{

tipoBase vipd;
struct nodo *next;

};
typedef struct nodo Nodo;
typedef struct {

Acá vendrá el tipo de
los elementos de la

lista

Nodo *acc;
Nodo *cur;
Nodo *aux; /* cursor auxiliar */

/* acceso a la lista */
/* cursor de la lista */

} List_of_char;

31

Implementación de un TDA para
Listas Unidireccionales de char
struct nodo{
char vipd;
struct nodo *next;

tipo List_of_char para

En este caso estamos definiendo el

};
typedef struct nodo Nodo;
typedef struct {

soportar listas de caracteres, pero

podrían ser listas de cualquier
tipo simple o estructurado, por
ejemplo fechas, como se ve en la

próxima transparencia.

Nodo *acc;
Nodo *cur;
Nodo *aux; /* cursor auxiliar */

/* acceso a la lista */
/* cursor de la lista */

} List_of_char;

32

Implementación de un TDA para
Listas Unidireccionales de Fecha
#include Fecha.h /* TDA Fecha */
struct nodo{
Fecha vipd;
struct nodo *next;

En este caso estamos

definiendo el tipo

ListaDeFechas para
soportar listas cuyo tipo base
es el tipo Fecha, definido en el

};
typedef struct nodo Nodo;
typedef struct {

TDA Fecha

Nodo *acc;
Nodo *cur;
Nodo *aux; /* cursor auxiliar */

/* acceso a la lista */
/* cursor de la lista */

} ListaDeFechas;

33

Implementación de un TDA para
Listas Unidireccionales de char

• 2) Definición de las operaciones del TDA:

– init
– reset
– forwards
– isOos
– copy
– insert
– suppress
– isEmpty
– isFull

34

Implementación de un TDA para
Listas Unidireccionales de char

Inicialización de la lista (en vacío)
void init(list_of_char *l){
(*l).acc = NULL;
(*l).cur = NULL;
(*l).aux = NULL;

}

acc

cur

aux

35

Implementación de un TDA para
Listas Unidireccionales de Fecha
Inserción de una fecha en la posición apuntada por el cursor

void insert(list_of_char *l, char c);

nuevo elemento a insertar (un caracter, en este caso):

• Necesitaremos, entre otras cosas, pedir espacio al compilador para el
•malloc(n) /* asigna n bytes de memoria y devuelve el
puntero a la dirección del lugar asignado, sino retorna NULL.
*/

• ¿Cuántos bytes pedimos?

•sizeof(Tipo) /* devuelve el tamaño en bytes ocupado
por un objeto de datos de tipo T. */

36

Implementación de un TDA para
Listas Unidireccionales de Fecha

Supresión de la fecha corriente (apuntada por el cursor)

void suppress(list_of_char *l);

• Necesitaremos, entre otras cosas, devolver el espacio liberado:

•free(vble-ptr);
Devuelve al sistema los bytes apuntados por vble-ptr.

37

Fin … por suerte ... ¿no? ;-)

Departamento de Unformática - UNSL

Programación I - Estrucutras Dinámic
  • Links de descarga
http://lwp-l.com/pdf17091

Comentarios de: Estructuras de Datos Dinámicas: Listas - Teoría: Programación I (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad