Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TADPila Lista
TADPila Lista
a, b
(a,b) + (c,d)
(a,b) - (c,d)
(a,b) * (c,d)
(a,b) / (c,d)
(a,b)
(a,b)
(a,b)
(a,b)
(a,b)^c
(a,b)
= (a,b)
= (a*d+b*c , b*d)
= (a*d-b*c , b*d)
= (a*c , b*d)
= (a*d , b*c)
=a
=b
= a/b
...
= (a^c , b^c)
= ( a/mcd(a,b) , b/mcd(a,b) )
Departamento de Informtica
Ingeniera de la Programacin
Tipos de Datos Abstractos
Un TDA es el elemento bsico de la abstraccin de datos. Su
desarrollo es independiente del lenguaje de programacin
utilizado, aunque este puede aportar mecanismos que faciliten
su realizacin. Debe verse como una caja negra.
En un TDA existen dos elementos diferenciados:
- La Interfaz de utilizacin
- La representacin
7'$
,QWHUID]
'HILQLFLyQ
2SHUDFLRQHV
5HSUHVHQWDFLyQ
,PSOHPHQWDFLyQ
Departamento de Informtica
Ingeniera de la Programacin
Tipos de Datos Abstractos
Implementacin
Una vez definido el TAD se T C o mp lejo .h
escoge
una
representacin
interna utilizando los tipos que
o p erac i n1
proporciona el lenguaje y/o otros
o p erac i n2 +
o p erac i n3
TAD ya definidos previamente.
...
La
representacin
deber
ocultarse
utilizando
los
mecanismos que nos proporcione
el lenguaje. Ocultamiento de
Informacin.
Definic i n
d el tip o
T C o mp lejo .c
Normalmente la implementacin
del tipo se realiza en un mdulo
aparte que ser enlazado al
programa principal
R ep resentac i n:
es truc tura d e d ato s
Im p lem entac i n
d e o p erac io nes:
C d igo d e o p erac i n1
C d igo d e o p erac i n2
C d igo d e o p erac i n3
Departamento de Informtica
Ingeniera de la Programacin
Tipos de Datos Abstractos
TDA Pila
Definicin del Tipo
Es una coleccin lineal, dinmica y homognea, en la que los
elementos de insertan y se extraen por el mismo extremo.
Tambin conocida como estructura LIFO (Last In, First Out).
Operaciones:
CrearPila
Meter
Sacar
DestruirPila
EstaVacia
0HWHU
6DFDU
&LPD
Representacin:
Utilizaremos un array para representar la pila.
Definiremos un tamao mximo de array (MaxElemPila).
Llevaremos una variable: cima que indicar cual es el ltimo
elemento ocupado en el array.
#define MaxElemPila
struct _TPilaEnteros {
int elementos[MaxElemPila];
int cima;
};
typedef struct _TPilaEnteros TPilaEnteros;
void CreaPila (TPilaEnteros *p) { p->cima = 0; };
int InsertaPila (int nelem, TpilaEnteros *p) {
if (p->cima==MaxElemPila) {
return 0; /*No se ha podido insertar*/
} else {
p->cima++;
p->elementos[p->cima]=nelem;
return 1;
};
};
Departamento de Informtica
&LPD
23 4 56 45 11
Ingeniera de la Programacin
Tipos de Datos Abstractos
TDA Lista
Notas
Es una estructura homognea, dinmica y de acceso por
posicin.
El tipo lista no existe en C por lo que habr que
implementarlo como un TAD.
Definicin del tipo:
Una lista es una coleccin homognea de elementos con una
relacin lineal entre ellos. Es decir, cada elemento de la lista
(excepto el primero) tiene un nico elemento predecesor y cada
elemento (excepto el ltimo) tienen un elemento sucesor
Operaciones:
Creacin
CreaLista
Transformacion
VaciarLista
InsertarElementoLista
BorrarElementoLista
ModificarElementoLista
Observacin
LongitudLista
RecuperarElementoLista
Iteradores
PrimeroLista
SiguienteLista
AnteriorLista
FinalLista
Departamento de Informtica
Ingeniera de la Programacin
Tipos de Datos Abstractos
Representacin Listas
La representacin escogida depender de la utilizacin que
se le vaya a dar al tipo. Lo normal es implementarlas como
listas de elementos enlazados mediante punteros.
lis ta V a lo re s
4
78
Ejemplo de declaracin:
/*lista de enteros*/
struct Tnodo {
int dato;
struct Tnodo *siguiente;
};
typedef struct Tnodo *TLista;
TLista listaValores;
TPosicion p;
Operaciones habituales
Crea una nueva lista vaca o la borra
Determina si la lista est vaca
Inserta en la lista L un nodo con el campo
X, delante del nodo de direccin p.
Localiza(x,L),Recupera (x,p,L) Posicin donde est el valor x o su valor
Elimina el nodo p
Suprime(p,L)
Posicin anterior o siguiente del elemento p
Anterior(p,L), Siguiente(p,L)
Posicin del primer o ltimo elemento
Primero(L), Ultimo(L)
CreaLista(L), BorraLista(L)
EsVacia(L)
Inserta(x,p,L)
Departamento de Informtica
Ingeniera de la Programacin
Tipos de Datos Abstractos
InsertarFinalLista(i,lista1);
};
pl1=PrimeroLista(lista1); /*pl1 ser un iterador de la lista*/
pl2=FinalLista(lista1);
/*Recorremos los elementos de la lista del primero al ltimo y los
presentamos en pantalla.*/
while (pl1!=pl2) {
RecuperaElementoLista(&valor,pl1,lista1);
printf("\nEl valor es: %d",valor);
pl1=SiguienteLista(pl1,lista1);
};
/*Liberamos la memoria ocupada por la lista*/
DestruirLista(&lista1);
};
Departamento de Informtica
Ingeniera de la Programacin
Tipos de Datos Abstractos
FICHERO: listas.h
/*======================================================
Representacin del Tipo
======================================================*/
struct TNodo {
int info;
struct TNodo *siguiente;
};
typedef struct TNodo *TLista;
typedef struct TNodo *TposicionLista;
/*======================================================
Operaciones del Tipo
======================================================*/
/*Creacin*/
int
TLista
/*Transformacin*/
void InsertarElemento
(int ndato, TPosicionLista p, TLista l);
void InsertarFinalLista
(int x, TLista l );
void ModificarElementoLista
(int ndato, TPosicionLista p, TLista l);
void EliminarELemento (TPosicionLista p, TLista l);
void VaciarLista
(TLista l);
void DestruirLista
(TLista *l);
/*Observacin*/
int VaciaLista
(TLista l);
void RecuperaElementoLista
(int *ndato, TPosicionLista p, TLista l);
/*Iteracin*/
TPosicionLista PrimeroLista (TLista l);
TPosicionLista FinalLista
(TLista l);
TPosicionLista SiguienteLista
(TPosicionLista p ,
TLista l);
TPosicionLista AnteriorLista
(TPosicionLista p,
TLista l);
Departamento de Informtica
Ingeniera de la Programacin
Tipos de Datos Abstractos
Fichero: listas.c
#include <stdlib.h>
#include "listas.h"
/*======================================================
//MODULO:
Tipo de Dato Abstracto LISTA DE ENTEROS
//AUTOR/ES: Jos Ramn Balsas Almagro
//VERSIN: 1.2
//ULTIMA REVISIN: 30-11-1999
//DESCRIPCIN: Implementacin del TDA Lista de Enteros
//
mediante memoria dinmica utilizando un puntero
//
al nodo siguiente. Se tomar un nodo cabecera
//
sin informacin por comodidad en la
//
implementacin
//UTILIZACIN: Definir variables del tipo TLista que
//
se inicializarn mediante las operaciones
//
CrearLista1
o CrearLista2. Dichas variables se
//
deben eliminar cuando no se vayan a utilizar
//
utilizando la operacin DestruirLista. Las
//
variables del tipo TPosicionLista sirven para
//
referenciar posiciones concretas de elementos de
//
una lista. Se debe incluir el fichero cabecera
//
"listas.h" para poder trabajar con el tipo.
//PLATAFORMA: Independiente
=========================================================
Inicializa una variable del tipo pasada por referencia.
Devuelve 1 si todo ha ido bien. 0 en caso contrario.
======================================================*/
int CrearLista1 (TLista *l) {
*l=(TLista) malloc (sizeof(struct TNodo));
if (*l==NULL) {
return (0);
} else {
(*l)->siguiente=NULL;
return (1);
};
};
/*======================================================
Devuelve un elemento del tipo como resultado de la funcin o el
valor NULL en caso contrario
======================================================*/
TLista CrearLista2 (void) {
TLista l;
l=(TLista) malloc (sizeof(struct TNodo));
if (l!=NULL) {l->siguiente=NULL;};
return (l);
};
Departamento de Informtica
Ingeniera de la Programacin
Tipos de Datos Abstractos
/*======================================================
Devuelve un valor distinto de 0 si la lista tiene algn
elemento. 0 en caso de que est vaca.
Precondicin: La lista debe estar creada
======================================================*/
int VaciaLista(TLista l) {
return(l->siguiente==NULL);
};
/*======================================================
Devuelve la posicin del primer elemento de la lista. Si
no tiene ninguno devolver la posicin FINAL.
Precondicin: La lista debe estar creada.
======================================================*/
TPosicionLista PrimeroLista(TLista l) {
return (l);
};
/*======================================================
Devuelve la posicin siguiente a la ltima posicin.
Esta posicin se usar para insertar elementos al final
de la lista.
Precondicin: La lista debe estar creada
======================================================*/
TPosicionLista FinalLista(TLista l) {
TPosicionLista p;
p=l;
while (p->siguiente!=NULL) {
p=p->siguiente;
};
return (p);
};
/*======================================================
Devuelve la posicin del siguiente elemento en la lista a
la posicin p.
Precondicin: p debe ser una posicin vlida de la lista
=====================================================*/
TPosicionLista SiguienteLista (TPosicionLista p ,TLista l) {
if (p!=NULL && p->siguiente!=NULL) {
/*Comprobamos si tenemos una posicin vlida*/
return(p->siguiente);
};
};
Departamento de Informtica
Ingeniera de la Programacin
Tipos de Datos Abstractos
/*======================================================
Devuelve la posicin anterior a p en la lista l. Si p es
el primer elemento devuelve el valor NULL
Precondicin: p debe ser una posicin vlida de la lista
=====================================================*/
TPosicionLista AnteriorLista (TPosicionLista p, TLista l) {
TPosicionLista q;
q=l;
while (q->siguiente!=p && q!=NULL) {
q=q->siguiente;
};
return (q);
};
/*======================================================
Modifica el valor del elemento p de la lista con el dato
ndato.
Precondicin: p debe ser una posicin vlida de la lista.
=====================================================*/
void ModificarElementoLista(int ndato, TPosicionLista p, TLista l)
{
p->siguiente->info = ndato;
};
/*======================================================
Devuelve el dato almacenado en el elemento de la lista p
Precondicin: p debe ser una posicin vlida de la lista.
=====================================================*/
void RecuperaElementoLista(int *ndato,TPosicionLista p,TLista l) {
*ndato=p->siguiente->info;
};
/*======================================================
Crea un nuevo elemento en la lista l en la posicin p,
desplazando el existente una posicin ms adelante. Si p
es la posicin final crea un nuevo elemento al final de la lista.
Precondicin: p debe ser una posicin vlida de la lista.
=====================================================*/
void InsertarElemento (int ndato, TPosicionLista p, TLista l) {
TPosicionLista q;
q=(TPosicionLista)malloc(sizeof(struct TNodo));
q->info=ndato;
q->siguiente=p->siguiente;
p->siguiente=q;
};
Departamento de Informtica
Ingeniera de la Programacin
Tipos de Datos Abstractos
/*======================================================
Elimina el elemento de la posicin p de la lista l.
Precondicin: p debe ser una posicin vlida de la lista.
p no puede ser la posicin final.
=====================================================*/
void EliminarELemento (TPosicionLista p, TLista l) {
TPosicionLista q;
q=p->siguiente;
p->siguiente=q->siguiente;
free(q);
};
/*======================================================
Aade un elemento nuevo al final de la lista l
Precondicin: La lista l debe estar creada.
=====================================================*/
void InsertarFinalLista(int x, TLista l ) {
InsertarElemento(x,FinalLista(l),l);
};
/*======================================================
Borra todos los elementos de la lista l dejndola vaca
Precondicin: La lista l debe estar creada.
=====================================================*/
void VaciarLista (TLista l) {
TPosicionLista p,q;
p=l->siguiente;
l->siguiente=NULL;
while (p!=NULL) {
q=p->siguiente;
free(p);
p=q;
};
};
/*======================================================
Borra todos los elementos de la lista l y libera la memoria
ocupada por la misma.
Precondicin: La lista l debe estar creada.
=====================================================*/
void DestruirLista (TLista *l) {
VaciarLista(*l);
free(*l);
};
Departamento de Informtica