Tipos de Datos Abstractos - TramixSakai ULP
Tipos de Datos Abstractos - TramixSakai ULP
Tipos de Datos Abstractos - TramixSakai ULP
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Introducción a la Programación – Parte 10 – <strong>Tipos</strong> <strong>de</strong> <strong>Datos</strong> <strong>Abstractos</strong><br />
<strong>Tipos</strong> <strong>de</strong> <strong>Datos</strong> <strong>Abstractos</strong><br />
A continuación se exploran algunos tipos <strong>de</strong> datos abstractos fundamentales. Se estudiaran listas,<br />
que son secuencias <strong>de</strong> elementos, y dos tipos especiales <strong>de</strong> listas: las pilas, don<strong>de</strong> los elementos<br />
se insertan y eliminan en un solo extremo, y las filas, don<strong>de</strong> los elementos se insertan por un<br />
extremo y se eliminan por el otro.<br />
Lista<br />
Las listas constituyen una estructura flexible en particular, porque pue<strong>de</strong>n crecer y acortarse<br />
según se requiera; los elementos son accesibles y se pue<strong>de</strong>n insertar y suprimir elementos en<br />
cualquier posición <strong>de</strong> la lista. Las listas también pue<strong>de</strong>n concatenarse (unirse) entre si o<br />
subdividirse. Para darle forma <strong>de</strong> tipo <strong>de</strong> dato abstracto a este concepto, se pue<strong>de</strong> <strong>de</strong>finir el tipo<br />
LISTA y un conjunto <strong>de</strong> operaciones (funciones) para manipularlas.<br />
Definición <strong>de</strong>l Tipo Lista<br />
const int MAX = 1024;<br />
type<strong>de</strong>f struct LISTA<br />
{<br />
int elementos[MAX];//representa los elementos<br />
int posicion;//indica la posición actual<br />
int cantidad;//indica la cantidad <strong>de</strong> elementos<br />
};<br />
La anterior es una <strong>de</strong>finición <strong>de</strong>l tipo LISTA usando una estructura y un arreglo. El tipo <strong>de</strong>l arreglo<br />
<strong>de</strong>finirá el tipo <strong>de</strong> la lista, en este caso es <strong>de</strong> enteros. Este tipo <strong>de</strong> listas implementadas con<br />
arreglos, tienen una capacidad máxima (indicada con la constante MAX). Existe otro tipo <strong>de</strong><br />
implementación utilizando punteros pero no será analizado en este curso.<br />
Operaciones <strong>de</strong> la Lista<br />
La i<strong>de</strong>a básica <strong>de</strong> usar estas representaciones es encapsular las operaciones con funciones que<br />
pi<strong>de</strong>n como principal parámetro el objeto (en este caso una LISTA) y así no tener que lidiar con la<br />
implementación interna <strong>de</strong> dicho objeto. Por ejemplo si queremos insertar un elemento, pasamos<br />
la lista, el elemento y la posición, y es la función la encargada <strong>de</strong> saber como <strong>de</strong>be realizarse la<br />
inserción. Otras operaciones principales incluyen:<br />
<br />
<br />
<br />
Suprimir: elimina un elemento en la posición dada.<br />
Buscar: <strong>de</strong>vuelve la primera posición <strong>de</strong> un elemento en la lista o -1 si no existe.<br />
Recuperar: recupera el elemento actual <strong>de</strong> la lista, aquel en la posición indicada por<br />
“posicion”.<br />
Olimpiadas Sanluiseñas <strong>de</strong>l Conocimiento en Informática – <strong>ULP</strong><br />
Mariano Luzza – Coordinador
Introducción a la Programación – Parte 10 – <strong>Tipos</strong> <strong>de</strong> <strong>Datos</strong> <strong>Abstractos</strong><br />
Existen otras operaciones que permiten preguntar o <strong>de</strong>volver la cantidad <strong>de</strong> elementos y la<br />
posición actual <strong>de</strong> la lista. También para avanzar, retroce<strong>de</strong>r y colocar al principio la posición <strong>de</strong> la<br />
lista. Cabe <strong>de</strong>stacar que con las operaciones avanzar y retroce<strong>de</strong>r es posible “caerse” <strong>de</strong> la lista,<br />
porque el índice <strong>de</strong> posicionamiento podría valer -1 o lo mismo que “cantidad”, con lo que en<br />
ambos casos no se podría recuperar el elemento actual. Esto es para facilitar la iteración sobre la<br />
lista, pero una llamada a retroce<strong>de</strong>r o avanzar ya fuera <strong>de</strong> rango daría error.<br />
Con este conjunto <strong>de</strong> operaciones es posible recorrer una lista. A continuación se muestra la<br />
implementación <strong>de</strong> la operación “Insertar” y un ejemplo para mostrar una lista. El resto <strong>de</strong> las<br />
operaciones se encuentran en un archivo <strong>de</strong> código fuente <strong>de</strong>nominado “lista.cpp”.<br />
//inserta un elemento en la lista en la posicion indicada<br />
void Insertar(LISTA& lista, int elemento, int pos)<br />
{<br />
if(lista.cantidad == MAX) //esta llena<br />
cout
Introducción a la Programación – Parte 10 – <strong>Tipos</strong> <strong>de</strong> <strong>Datos</strong> <strong>Abstractos</strong><br />
Pila<br />
Una pila es un tipo especial <strong>de</strong> lista en la que las inserciones y las supresiones tienen lugar en un<br />
extremo <strong>de</strong> la lista, <strong>de</strong>nominado tope. A las pilas se les suele llamar también, listas “LIFO” (last in,<br />
first out) o listas “último en entrar, primero en salir”. El mo<strong>de</strong>lo intuitivo <strong>de</strong> una pila es<br />
precisamente una pila <strong>de</strong> sillas, <strong>de</strong> libros o <strong>de</strong> platos, don<strong>de</strong> en todos los casos es conveniente<br />
agregar o quitar elementos <strong>de</strong>s<strong>de</strong> el extremo superior <strong>de</strong> la pila, el que en a<strong>de</strong>lante se <strong>de</strong>nominará<br />
como “tope”.<br />
Definición <strong>de</strong>l Tipo Pila<br />
const int MAX = 1024;<br />
type<strong>de</strong>f struct PILA<br />
{<br />
int elementos[MAX];//representa los elementos<br />
int tope;//indica el tope <strong>de</strong> la pila<br />
};<br />
La anterior es una <strong>de</strong>finición <strong>de</strong>l tipo PILA usando una estructura y un arreglo. El tipo <strong>de</strong>l arreglo<br />
<strong>de</strong>finirá el tipo <strong>de</strong> la pila, en este caso es <strong>de</strong> enteros. Este tipo <strong>de</strong> pilas implementadas con<br />
arreglos, tienen una capacidad máxima (indicada con la constante MAX). Existe otro tipo <strong>de</strong><br />
implementación utilizando punteros pero no será analizado en este curso.<br />
Operaciones <strong>de</strong> la Pila<br />
Las operaciones básicas <strong>de</strong> la pila son:<br />
<br />
<br />
<br />
Mete: introduce un elemento en el tope <strong>de</strong> la pila.<br />
Saca: quita y <strong>de</strong>vuelve el elemento en el tope <strong>de</strong> la pila.<br />
Tope: recupera el elemento <strong>de</strong>l tope <strong>de</strong> la pila sin quitarlo.<br />
Existen otras operaciones que permiten preguntar si la pila está llena o vacía como así también<br />
vaciar la pila. A continuación se pue<strong>de</strong>n ver las funciones “Mete” y “Saca”. El resto <strong>de</strong> las funciones<br />
se encuentran en un archivo <strong>de</strong> código fuente <strong>de</strong>nominado “pila.cpp”.<br />
//mete un elemento en la pila<br />
void Mete(PILA& pila, int elemento)<br />
{<br />
if(pila.tope + 1 == MAX) //esta llena<br />
cout
Introducción a la Programación – Parte 10 – <strong>Tipos</strong> <strong>de</strong> <strong>Datos</strong> <strong>Abstractos</strong><br />
//saca un elemento <strong>de</strong> la pila<br />
int Saca(PILA& pila)<br />
{<br />
int res = -1;<br />
if(pila.tope < 0)<br />
cout
Introducción a la Programación – Parte 10 – <strong>Tipos</strong> <strong>de</strong> <strong>Datos</strong> <strong>Abstractos</strong><br />
que el primer elemento podría estar en la posición 5 por ejemplo, y el último en la posición 3 <strong>de</strong>l<br />
arreglo, esto a causa <strong>de</strong> sucesivas inserciones y supresiones. A continuación se pue<strong>de</strong>n ver las<br />
funciones “EnFila” y “DesFila”. El resto <strong>de</strong> las funciones se encuentran en un archivo <strong>de</strong> código<br />
fuente <strong>de</strong>nominado “fila.cpp”.<br />
//pone en fila un elemento<br />
void EnFila(FILA& fila, int elemento)<br />
{<br />
if(EstaLlena(fila))//esta llena<br />
cout