Sei sulla pagina 1di 4

Un TAD es un modelo, en general un modelo matemtico, sobre el que se define un

conjunto de operaciones. El TAD es un concepto que es independiente del lenguaje de


programacin, ( de ah su nombre, es abstracto pues no tiene en cuenta los detalles de como
se instrumenta en un lenguaje de programacin dado ) sin embargo la declaracin,
instrumentacin o programacin de un TAD depende del lenguaje que se utilice.
Ante todo queremos indicar que si usted quiere representar una coleccin de elementos, pero
conoce de antemano cuntos elementos tiene esa coleccin, no necesita una lista, lo que
necesita es un arreglo. El arreglo es de por s otro tipo abstracto de datos (TAD) que
puede usarse, adems, para representar listas y conjuntos.
Si queremos representar una coleccin dinmica de elementos, es decir, no sabemos de
antemano cuntos elementos va a contener la coleccin, entonces, s necesitaremos usar el
modelo de lista o el modelo de conjunto para poder representar esta coleccin en una
computadora.
El TAD Lista
Una lista es una coleccin de elementos que tiene un primer elemento y un ltimo elemento,
cada elemento, excepto el primero tiene un anterior, y cada elemento, excepto el ltimo, tiene
un siguiente.
Abstractamente, una lista de n elementos puede simbolizarse mediante la siguiente sucesin
de valores:

a1, a2, ... , ai, ..., an


El elemento ai est en la posicin i .

a1 es el primer elemento de la lista, an es el ltimo elemento.


ai-1 ( 1 < i n ) es el elemento anterior a ai
ai+1 ( 1 i < n ) es el elemento siguiente a ai
Las caractersticas anteriores hacen que la lista sea un modelo lineal.
Algunas de las operaciones que se pueden aplicar a una lista de datos son las siguientes:
-

Creacin e inicializacin : Siempre debemos partir de una lista vaca (sin elementos)
Obtener la cantidad de elementos de la lista.
Aadir un elemento a una lista. Esta operacin consiste en agregar un elemento al final
de la lista o a una lista vaca.
Insertar un elemento en cualquier posicin de la lista. En esta operacin, por ejemplo,
si insertamos en la segunda posicin, el elemento que estaba en la segunda posicin
pasa a la tercera, el que estaba en la tercera pasa a la cuarta y as sucesivamente. Si
aplicamos esta operacin a una lista vaca, se reducira a la operacin anterior.
Es conveniente definir una posicin que no contiene ningn elemento de la lista y es la
que ocupara un elemento que se aada al final de la lista o se inserte en una lista
vaca. Esta posicin es la que devolvera una operacin que llamaremos Fin End, y
es la posicin en la que se adiciona un elemento al final de la lista o la nica que
contiene una lista vaca.

Extraer el ltimo elemento de la lista. Esta operacin requiere que la lista tenga al
menos un elemento.
Extraer el elemento en cualquier otra posicin de la lista Esta operacin tambin
requiere que la lista tenga al menos un elemento. Si la lista tiene un elemento se
reduce a la operacin anterior, y la posicin que se utiliza es la anterior a la posicin
Fin o End. Si, por ejemplo, extraemos el elemento en la posicin 2, entonces el
elemento que ocupaba la posicin 3, ocupar ahora la posicin 2, el que ocupaba la
posicin 4 pasa ahora a ocupar la posicin 3 y as sucesivamente hasta llegar al final
de la lista.
Dada la posicin de un elemento de la lista, obtener la posicin siguiente (si no es la
ltima) o la anterior (si no es la primera).
Otras operaciones que pueden necesitarse en listas ms concretas, tales como buscar
un elemento en la lista, ordenar la lista, eliminar los elementos repetidos en la lista,
etc.

Normalmente se define un conjunto de operaciones bsicas ms generales, posteriormente se


irn definiendo otras que necesitemos, de acuerdo con la aplicacin a la que queramos aplicar
este modelo para representar una coleccin de datos.
Note que hasta aqu no hemos utilizado ningn concepto que pertenezca a un lenguaje de
programacin. Sin embargo, debemos imponer una restriccin importante al modelo anterior
para instrumentarlo en una computadora: los elementos de la lista deben ser del mismo tipo de
datos.
// Crea una pila vaca con capacidad inicial de hasta "cap" elementos.
bool Init(int cap, TPila& P)
{
P.elements = new TypeElem[cap];
if(P.elements == 0)
return false;
P.count = 0;
P.capacity = cap;
return true;
}
// Borra los elementos de la pila, convirtindola en una pila vaca.
bool Clear(TPila& P)
{
delete [] P.elements;
return Init(Size, P);
}
// Devuelve la cantidad de elementos que estn almacenados en la pila.
int Count(const TPila& P)
{
return P.count;
}
// Adiciona el elemento 'e' a la pila.
bool Push(TypeElem e, TPila& P)
{
if (P.count == P.capacity)
{
P.capacity += Size;
TypeElem *temp = new TypeElem[P.capacity];
if (temp == 0)
return false;

for (int i = 0; i < P.count; i++)


temp[i] = P.elements[i];
delete [] P.elements;
P.elements = temp;

}
P.elements[P.count++] = e;
return true;

// Extrae un elemento de la pila.


TypeElem Pop(TPila& P)
{
if (P.count > 0)
P.count--;
return P.elements[P.count];
}
// Copia la pila.
bool Copy(const TPila& Ps, TPila& Pt)
{
TypeElem *temp = new TypeElem[Ps.capacity];
if (temp == 0)
return false;
delete [] Pt.elements;
Pt.elements = temp;
Pt.capacity = Ps.capacity;
Pt.count = Ps.count;
for (int i = 0; i < Ps.capacity; i++)
Pt.elements[i] = Ps.elements[i];
return true;
}
// Muestra los elementos de la pila.
void Show(const TPila& P)
{
cout<< endl;
for (int i = P.count-1; i > 0; i--)
cout<< P.elements[i] << ' ';
cout<< endl;
}
// Destruye la pila.
void Destroy(TPila& P)
{
delete [] P.elements;
}

int main()
{
TPila Pila;
Init(Size, Pila);
char nombre[] = "Hola mundo.. ";
cout << "Cadena Original: " << nombre << endl;
for (int i = 0; i < strlen(nombre); i++)
Push(nombre[i], Pila);
//Show(Pila);
cout << "Cadena invertida: " << endl;
for (int i = 0; i < strlen(nombre); i++)
cout << Pop(Pila);
cout << endl;

//Show(Pila);
TPila Pila2;
Init(Size, Pila2);
Copy(Pila, Pila2);
Show(Pila2);
Destroy(Pila);
Destroy(Pila2);
}

return 0;

Potrebbero piacerti anche