Vous êtes sur la page 1sur 35

Tipos abstractos de datos

EL TAD LISTA

UNSAAC - Area de Algortmica

Concepto
Una lista puede definirse como una n-tupla dinmica ordenada: L = (e1, e2, ., en) Tipos: -Listas homogneas -Listas heterogneas.
UNSAAC - Area de Algortmica 2

Representacin de listas
Representacin convencional Utiliza nodos constituidos por dos partes: la primera almacena la informacin y la segunda parte es un puntero que almacena la direccin del siguiente elemento:
Parte de la informacin Direccin del sgte. elemento

UNSAAC - Area de Algortmica

Las listas en consecuencia son una secuencia de nodos enlazados. Ej. Lista de ciudades:
Cusco Puno Ica Tacna n

Una lista tipo diccionario:


casa house rojo red zorro fox n

UNSAAC - Area de Algortmica

Una representacin ms general es utilizar nodos donde sus dos componentes son punteros:
Parte de la informacin Direccin del sgte. elemento

As, las dos listas anteriores quedan representadas de la siguiente manera:


UNSAAC - Area de Algortmica 5

Cusco

Puno

Ica

Tacna

casa

house

rojo

red

zorro

fox

n
UNSAAC - Area de Algortmica 6

Representacin recursiva
La definicin recursiva de una lista es:
Lista n elementos = Primer elemento + Lista n -1 elementos

Grficamente tenemos:
Lista de 4 elementos Lista de 3 elementos Lista de 2 elementos Lista de 1 elemento

Cusco

Puno

Ica

Tacna

nulo

UNSAAC - Area de Algortmica

EL TAD LISTA Vista del conceptor


Nombre del TAD: Lista Descripcin informal del TDA: Una lista es una secuencia de elementos.
Lista = (elemento1, elemento2, ., elementon)

Recursivamente se define como:


Lista n elem.= Primer elemento + Lista n-1 elem.
UNSAAC - Area de Algortmica 8

Especificacin del TAD Lista Elementos: Lista = (elemento, sub lista) ^ elemento Objeto ^ sub lista Lista Donde: Objeto es una clase. Representa a cualquier objeto del mundo real. sub lista es tambin de la clase Lista
UNSAAC - Area de Algortmica 9

Operaciones Operaciones primitivas Lista: Lista: Objeto x Lista ModificarElemento: Objeto x Lista ModificarSubLista: Lista x Lista Elemento: Lista SubLista: Lista EsVacia Lista

Lista Lista Lista Lista Objeto Lista Booleano

UNSAAC - Area de Algortmica

10

Operaciones derivadas Insertar: Objeto x Entero x Lista Ubicacion: Objeto x Lista Iesimo: Entero x Lista Eliminar: Entero x Lista Longitud: Lista

Lista Entero Objeto Lista Entero

UNSAAC - Area de Algortmica

11

Axiomas Definicin de variables: e : Objeto lista : Lista k : Entero k = Ubicacion(e,Insertar(e,k,lista)) e = Iesimo(k,Insertar(e,k,lista)) lista = Eliminar(k,Insertar(e,k,lista)) lista = Eliminar(Ubicacin(Ica,Lista(ca,lista)),lista) 0 = Longitud(Lista())
UNSAAC - Area de Algortmica 12

Descripcin de las operaciones


Operacin insertar
Nombre operacin: insertar Descripcin operacional: Insertar: Objeto x Entero x Lista Lista Explicacin de la operacin: Inserta un elemento en una determina ubicacin de la lista. Si i =1, inserta al inicio. Si i = Longitud(lista)+1, inserta al final Modelo: Caso Base Lista(e,lista) si i = 1 Insertar (e,i,lista) = Caso Recurrente Insertar (e,i,SubLista(lista)) si i > 1
UNSAAC - Area de Algortmica 13

Especificacin del algoritmo Diccionario de Variables Resultados lista = Lista con elemento insertado en la ubicacin i Datos e = elemento : Objeto i = ubicacin en la que se debe insertar : Entero lista = Lista de elementos : Lista Pre condicin {| 1 <= i <= longitud(lista)+1 |} Accin que debe realizar el algoritmo Insertar un elemento en una lista Pos condicin {| lista = lista con e en la ubicacin i |}

UNSAAC - Area de Algortmica

14

Operacin Ubicacion
Nombre operacin: Ubicacion Descripcin operacional: Ubicacion: Objeto x Lista Entero Explicacin de la operacin: Determina la ubicacin en la que se encuentra un elemento en la lista. Si el elemento no esta en la lista, devuelve CERO Modelo:

Caso Base 0 si EsVacia(lista) 1 si e=Elemento(lista)


Ubicacion(e,lista) = Caso Recurrente 1+ Ubicacion(e,subLista(lista))
UNSAAC - Area de Algortmica

si no EsVacia(lista) si e<>Elemento(lista)15

Especificacin del algoritmo Diccionario de Variables Resultados lista = Lista con elemento insertado en la ubicacin i Datos e = elemento : Objeto i = ubicacin en la que se debe insertar : Entero lista = Lista de elementos : Lista Pre condicin {| 1 <= i <= Longitud(lista)+1 |} Accin que debe realizar el algoritmo Insertar un elemento en una lista Pos condicin {| lista = lista con e en la ubicacin i |}

UNSAAC - Area de Algortmica

16

Operacin Iesimo
Nombre operacin: Isimo Descripcin operacional: Entero x Lista Objeto Explicacin de la operacin: Determina el i simo elemento de la lista Modelo: Caso Base Elemento(lista) Iesimo(i,lista) = Caso Recurrente Iesimo(i-1,SubLista(lista)) si i > 1

si i = 1

UNSAAC - Area de Algortmica

17

Especificacin del algoritmo Diccionario de Variables Resultados iesimo = elemento iesimo de la lista : Objeto Datos i = ubicacin del elemento : Entero lista = Lista de elementos : Lista Pre condicin {| 1 <= i <= longitud(lista) |} Accin que debe realizar el algoritmo Determinar el elemento de la iesima ubicacin Pos condicin {| e = iesimo elemento de la lista |}

UNSAAC - Area de Algortmica

18

Operacin Eliminar
Nombre operacin: Eliminar Descripcin operacional: Entero x Lista Lista Explicacin de la operacin: Elimina el i simo elemento de la lista Modelo: Caso Base lista = subLista (lista) Eliminar(i,lista) = Caso Recurrente Eliminar(i -1,SubLista(lista))

si i = 1

si

i>1

UNSAAC - Area de Algortmica

19

Especificacin del algoritmo Diccionario de Variables Resultados lista = Lista sin el iesimo elemento : Lista Datos i = ubicacin del elemento a eliminar : Entero lista = Lista de elementos : Lista Pre condicin {| 1 <= i <= longitud(lista)|} Accin que debe realizar el algoritmo Eliminar el elemento de la iesima ubicacin Pos condicin {| lista sin el iesimo elemento |}

UNSAAC - Area de Algortmica

20

Operacin Longitud
Nombre operacin: Longitud Descripcin operacional: Lista Entero Explicacin de la operacin: Determina el nmero de elementos de la lista
Modelo: Caso Base 0 Longitud(lista) = Caso Recurrente 1 + Longitud(subLista(lista)) si no EsVacia(lista) si EsVacia(lista)

UNSAAC - Area de Algortmica

21

Diccionario de Variables Resultados longitud = nmero de elementos de la lista : Entero Datos lista = Lista de elementos : Lista Pre condicin {| verdadero |} Accin que debe realizar el algoritmo Determinar el nmero de elementos de una lista Pos condicin {| longitud = nmero de elementos de la lista |}

UNSAAC - Area de Algortmica

22

EL TAD LISTA Vista del Implementador


public class CLista { // ============= Atributos ================ protected Object aElemento; protected CLista aSubLista; // ============= Metodos ================= // ------------ Constructores -------------------------------public CLista() { aElemento=null; aSubLista=null; } // ------------------------------------------------------------------public CLista(Object pElemento,CLista pSubLista) { aElemento=pElemento; aSubLista=pSubLista; }
UNSAAC - Area de Algortmica 23

// ----------------- Propiedades ----------------------public Object elemento { get { return aElemento; } set { aElemento=value;} } // ----------------------------------------------------------public CLista subLista { get { return aSubLista; } set { aSubLista=value; } }
UNSAAC - Area de Algortmica 24

// ------------ Otros mtodos ---------------------------------------------// ---------- Operacion EstaVacia -------------------------------------------public bool EstaVacia() { return ((aElemento==null) && (aSubLista==null)); } // ---------- Operacion Longitud -------------------------------------------public int Longitud() { if (EstaVacia()) return 0; else return 1 + aSubLista.Longitud(); }

UNSAAC - Area de Algortmica

25

// ---------- Operacion Iesimo -------------------------------------------protected Object iesimo(int posicion) { if (posicion==1) return aElemento; else return aSubLista.iesimo(posicion-1); } // -------------------------------------------------------------------------------------public virtual Object Iesimo(int posicion) { //validar la posicion if (1<=posicion && posicion <= Longitud()) return iesimo(posicion); else { // la posicin no es correcta Console.WriteLine("ERROR: Posicin incorrecta"); return null; } }
UNSAAC - Area de Algortmica

26

// ---------- Operacin Eliminar ----------------------------------------protected void eliminar(int posicion) { if (posicion==1) { // quitar el elemento actual aElemento=aSubLista.elemento; aSubLista=aSubLista.subLista; } else // eliminar en la sublista aSubLista.eliminar(posicion-1); } // ----------------------------------------------------------------------------------public virtual void Eliminar(int posicion) { // validar la posicion if (1<=posicion && posicion <= Longitud()) eliminar(posicion); else Console.WriteLine("ERROR: Posicin incorrecta"); }
UNSAAC - Area de Algortmica 27

//------------ Operacin mostrar ---------------------public void Mostrar() { //-- muestra el elemento y el resto de la lista if (!(EstaVacia())) { Console.WriteLine(aElemento); aSubLista.Mostrar(); } } } //--- fin de la clase

UNSAAC - Area de Algortmica

28

TAD LISTA- Visin del usuario


Aplicacin del TAD Lista: Diccionario Quechua Espaol La idea es escribir una aplicacin que emule a un programa que aprende, esto es, si se le da una palabra al programa, ste debe mostrar el significado de la palabra, en caso de no saberlo, que pida que al usuario el significado de la palabra y luego debe recordarlo, de manera que si en una futura ocasin se le pregunta por el significado de la misma palabra, pueda mostrarlo. Inicialmente el programa no sabe el significado de ninguna palabra, ir aprendiendo a medida que le usuario interacte con l.
UNSAAC - Area de Algortmica 29

Esta es una aplicacin que requiere de una lista. Cada elemento en la lista ser un objeto que a su vez tendr dos elementos: Palabra en quechua y palabra en espaol, una es el significado de la otra. La aplicacin debe mostrar inicialmente un men con las siguientes opciones: Diccionario Quechua Espaol 1.- Quechua Espaol 2.- Espaol Quechua 3.- Listar 4.- Salir
UNSAAC - Area de Algortmica 30

Diseo del TAD QuechuaEspanol


Nombre del TAD: QuechuaEspanol Descripcin informal del TDA: El TAD QuechuaEspanol, es una representacin de una palabra en quechua y una palabra en espaol, donde una es el significado de la otra. Especificacin del TAD Lista Elementos QuechuaEspanol = (quechua,espanol) ^ quechua Texto ^ espanol Texto
UNSAAC - Area de Algortmica 31

Operaciones Operaciones primitivas QuechuaEspanol: QuechuaEspanol QuechuaEspanol: Texto x Texto QuechuaEspanol modificarQuechua: Texto x QuechuaEspanol QuechuaEspanol modificarEspanol: Texto x QuechuaEspanol QuechuaEspanol quechua: QuechuaEspanol Texto espanol: QuechuaEspanol Texto Axiomas Las operaciones de este TAD son bsicas, y estn constituidas por constructores, modificadores y selectores; por tanto no es necesario especificar axiomas. Descripcin de las operaciones Por la misma razn por la que no se especific axiomas, no se describirn las operaciones
UNSAAC - Area de Algortmica 32

TAD QuechuaEspanol - Implementacin


public class CQuechuaEspanol { /* ******************** Atributos ************************** */ private String aQuechua; private String aEspanol; /* ********************** Metodos **************************** */ /* ============= Constructores ================ */ public CQuechuaEspanol() { aQuechua = null; aEspanol = null; } /* -------------------------------------------------------------------------- */ public CQuechuaEspanol( String pQuechua, String pEspanol) { aQuechua = pQuechua; aEspanol = pEspanol; }
UNSAAC - Area de Algortmica 33

// ============== Propiedades ============== public String Quechua { set { aQuechua = value;} get { return aQuechua; } } // -----------------------------------------------------------------public String Espanol { set { aEspanol = value;} get { return aEspanol; } }
UNSAAC - Area de Algortmica 34

public overrides String ToString() { return aQuechua+: "+aEspanol; } /* ------------------------------------------------------------------- */ public overrides bool Equals(Object obj) { //-- verificar si es una cadena if (obj is String) return aQuechua.Equals(obj); else //-- verificar si es una palabra del diccionario if (obj is CQuechuaEspanol) { String texto = ((CQuechuaEspanol)obj).ToString(); return ToString().Equals(texto); } else return false; } UNSAAC - Area de Algortmica }

35

Vous aimerez peut-être aussi