Você está na página 1de 14

ESTRUCTURAS DE DATOS

Ing. Romn Martnez M


Semestre Enero-Mayo 2014

TAREA #2

A travs de esta tarea, pondrs en prctica el uso de Pilas y Fila conociendo a la librera STL, y
comprobando de nuevo la abstraccin de datos y la independencia de niveles, al probar una
implementacin realizada por ti mismo.

Para realizar esta tarea, te recomiendo que revises las presentaciones en powerpoint del curso
relacionadas con Pilas y Filas. Tambin puedes consultar el captulo 6 de mi libro. Por otro lado, tendrs
que hacer una breve investigacin de qu es STL y cmo se usan las pilas y filas que provee STL. Para
esto apyate en Internet, en donde encontrars muchas referencias.

El programa de aplicacin que hars en esta tarea es simple y es el mismo ejemplo que se encuentra en
las presentaciones del curso: El usuario del programa escribe una palabra/frase y el programa el indica si
esta palabra/frase es PALNDROME o no. Para resolver este caso, debers usar una pila y una fila. En
esta ocasin, si ocultaremos el nivel fsico de las pilas y las filas del programa de aplicacin utilizando
libreras .h .

El programa de aplicacin ser el mismo para las siguientes 3 versiones del nivel fsico de pilas y filas:
1. Utiliza las pilas y filas de STL. Para esta implementacin, debers haber investigado previamente
cul es la especificacin lgica de estas estructuras en STL y cules son los detalles de interfase
que hay que considerar.
2. Utilizando un diseo idntico al de la especificacin lgica de las pilas y filas de STL, implementa
ahora estas estructuras de datos considerando que sern representadas en un arreglo de 255
posiciones. En el caso de la pila, el fondo estar siempre en la ltima posicin del arreglo, y el
apuntador tope deber apuntar al siguiente lugar disponible en el arreglo. Para la fila,
utilizaremos una representacin ineficiente, pero vlida para practicar que consiste en que el
frente siempre es la primera posicin del arreglo (no hay apuntador y se recorren los datos al
sacar) y el final apunta al ltimo elemento aadido.
Una vez implementadas las pilas y filas, prueba el mismo programa de aplicacin y deber de
funcionar sin cambios con respecto a la versin anterior.
3. Utilizando el mismo diseo, se implementar a la fila siguiente la representacin de un arreglo
circular y un lugar reservado. En la sesin de clase se darn detalles de esta implementacin. De
igual forma, se probar el programa de aplicacin demostrando su independencia.

ENTREGABLES Y EVALUACIN
Para la sesin del jueves 30 de enero TODOS debern llevar los puntos 1 y 2 ya implementados,
funcionando o no, pero ser un momento para compartir y observar lo realizado. El punto 3 se deber
realizar despus de esa sesin en base a las explicaciones que se den.
El martes 4 de febrero se entregar en la sesin de clase el reporte completo de la tarea que deber
incluir lo siguiente:
1. Breve explicacin del diseo lgico que provee STL para las pilas y las filas, indicando cules
fueron las referencias consultadas en la investigacin de este tema.
2. Listado impreso del programa de aplicacin.
3. Listado impreso de la implementacin de la pila (punto 2).
4. Listados impresos de las implementaciones de la fila (versiones del punto 2 y 3).
5. Comentarios respecto al funcionamiento del programa con las diversas implementaciones del
nivel fsico y aclarando si funcion o no el programa. Incluir algunas evidencias del
funcionamiento a travs de la impresin de pantallas.
6. Breves comentarios respecto a las dificultades que tuviste en la tarea (si las hubo) y los
aprendizajes que lograste. Menciona que calificacin consideras merecer en la tarea
(autoevaluacin).

Para cualquier duda o situacin no explicada en este documento, consulta al profesor lo antes posible
envindole un correo.








































Eduardo Serna
A01196007
Estructura de Datos

Tarea #2

La Standard Template Library (STL) es una libreria de software de C++ que provee cuatro
componentes: algoritmos, contenedores, funciones e iteradores (patrones de diseo). Esta librera ya
tiene implementadas las filas (queues) y las pilas (stacks), por lo que le otorgan al ingeniero de software
versatilidad al momento de querer incorporar alguna de estas estructuras de datos.
La clase Queue (fila) tiene 8 mtodos miembro, los cuales son los siguientes:

Fila
Empty
Entrada Fila a verificar
Salida TRUE si el tamao es 0, FALSE si el tamao es
mayor a 0
Precondicin Ninguna
Postcondicin Ninguna

Size
Entrada Fila a verificar
Salida Nmero de elementos de la fila
Precondicin Ninguna
Postcondicin Ninguna

Front
Entrada Fila a verificar
Salida Referencia a valor prximo a sacar (elemento
ms viejo en la fila)
Precondicin La fila no est vaca
Postcondicin Ninguna

Back
Entrada Fila a verificar
Salida Referencia a elemento ms nuevo en la fila
(ltimo elemento introducido)
Precondicin La fila no est vaca
Postcondicin Ninguna


Push
Entrada Fila a verificar y valor a meter en la fila
Salida Ninguno
Precondicin Ninguno
Postcondicin La fila se actualiza, se pone el valor ingresado en
el final de la fila (back)

Pop
Entrada Fila a verificar
Salida Ninguno
Precondicin La fila no est vaca
Postcondicin La fila se actualiza, se elimina el valor ubicado en
el frente de la fila

Swap
Entrada 2 filas
Salida Ninguna
Precondicin Las filas no estn vacas
Postcondicin El contenido de la fila 2 se pasa a la fila 1 y
viceversa.

La clase Stack (pila), en cambio, cuenta con 6 mtodos miembro:

Pila

Empty
Entrada Pila a verificar
Salida TRUE si el tamao es 0, FALSE si el tamao es
mayor a 0
Precondicin Ninguna
Postcondicin Ninguna

Size
Entrada Pila a verificar
Salida Nmero de elementos de la pila
Precondicin Ninguna
Postcondicin Ninguna

Top
Entrada Pila a verificar
Salida Valor ubicado en la cima de la pila
Precondicin La pila no est vaca
Postcondicin Ninguna

Push
Entrada Pila a verificar y valor a meter en la pila
Salida Ninguno
Precondicin Ninguno
Postcondicin La pila se actualiza, se pone el valor ingresado en
la cima de la pila.

Pop
Entrada Pila a verificar
Salida Ninguna
Precondicin La pila no est vaca
Postcondicin La pila se actualiza, se elimina el valor ubicado en
la cima de la pila.
Swap
Entrada 2 pilas
Salida Ninguna
Precondicin Las pilas no estn vacas
Postcondicin El contenido de la pila 2 se pasa a la pila 1 y
viceversa.

Programa de Aplciacin


#include <iostream>
using namespace std;
#include "queue.h"
#include "stack.h"


int main()
{
stack <char> pila;
queue<char> fila;
char ch;

while(cin.get(ch) && ch != ('\n'))
{
if (ch!=' ')
{
pila.push(ch);
fila.push(ch);
}

}

bool palindrome=true;
while (!pila.empty())
{
cout << pila.top() << " " << fila.front() << endl;

if (pila.top()!=fila.front())
{
palindrome=false;
}



pila.pop();
fila.pop();

}

if (palindrome)
cout << "La palabra es un palndrome" << endl;


else
cout << "La palabra no es un palndrome" << endl;
}

Implementacin de la Pila

#ifndef Estructura_de_Datos_stack_h
#define Estructura_de_Datos_stack_h

template <class T>
class stack{

private:
T arr [255];
int tope;
int max;

public:
stack();
bool empty();
int size();
T top();
void push(T);
void pop();


};

template <class T> stack<T>::stack()
{
tope=255;
max=0;

}

template <class T> void stack<T>::push(T ch)
{
if (tope!=max)
{
arr[--tope]=ch;

}


}

template <class T> bool stack<T>::empty()
{
return (tope==255);

}



template <class T> T stack<T>::top()
{
return arr[tope];

}

template <class T> void stack<T>::pop()
{
tope++;

}
}

#endif

Implementacin de la Fila (punto 2)

class Filas{

private:
char arr [255];

public:
Filas();
bool empty();
int size();
char front();
void push(char);
void pop();


};

Filas::Filas()
{
for (int i=0; i<255;i++)
{
arr[i]='-';
}


}

void Filas::push(char ch)
{
int tamano=this->size();
if (tamano<255)
arr[254-tamano]=ch;


}

int Filas::size()
{
int cont=0;
for (int i=0; i<255; i++)
{
if (arr[i]!='-')
{
cont++;
}
}

return cont;
}

bool Filas::empty()
{

if (arr[0] != '-' )
return false;
else if (arr[254] == '-')
return true;
else
return false;
}



char Filas::front()
{
return arr[254];
}

void Filas::pop()
{
arr[254]='-';
int tamano=this->size();
for (int i=254;i>=254-tamano;i--)
{
if(i!=0)
{
int j=i-1;
arr[i]=arr[j];

}

else
arr[i]='-';


}


}



Implementacin de la Fila (punto 3)

template <class T>

class queue{

public:

queue();
bool empty();
int size();
T front();
T back();
void push(T);
void pop();

private:
T arr[255];
int frente;
int final;
int cont;

};

template <class T>
queue<T>::queue()
{
cont=0;
frente=-1;
final=0;
}

template <class T> void queue <T> ::push(T ch)
{
if (frente == -1)
frente = 0;

final = (final + 1) % 255;
arr[final] = ch;



cont++;


}

template <class T> int queue <T>::size()
{
return cont;
}

template <class T> bool queue <T>::empty()
{
return (frente==final);
}


template <class T> void queue <T>::pop()
{
frente = (frente + 1) % 255;
cont--;

}

template <class T> T queue <T>::front()
{
return arr[(frente+1)%255];
}

template <class T> T queue <T>::back()
{
return arr[final];
}





Funcionamiento

El programa de aplicacin funcion sin problemas con las clases implementadas, y a
continuacin se desmuestra esto:


Imagen 1.1.- Utilizando la implementacin 2 y 3, se introduce la frase palndrome anita lava la
tina. Se muestra en pantalla que esta frase es un palndrome









Imagen 1.2.- Utilizando la implementacin 2 y 3, se introduce una frase que no es palndrome, y
por lo tanto. esto se muestra en pantalla.

Ahora bien, usando las libreras de STL tampoco hubo problemas. A continuacin se anexan
las capturas de pantalla que demuestran esto:

Imagen 1.4.-Utilizando la implementacin 1, se introduce la frase palndrome anita lava la tina,
el programa de aplicacin reconoce esto.

Imagen 1.4.- Utilizando la implementacin 1, se introduce una frase que no es palndrome, y
por lo tanto. esto se muestra en pantalla.


Comentarios Finales

Como comentario final, quisiera recalcar que no tuve ningn problema al momento de hacer el
programa de aplicacin ni la implementacin de la fila. Sin embargo, con la pila tuve ligeros
problemas debido a que estaba usando un mtodo algo ineficiente (llenar espacios vacos con
un carcter), lo cual haca que fallara en varios casos (sobre todo cuando el tipo de dato
cambiaba). Por lo tanto, opt cambiar toda la implementacin para mejorar esto, y en efecto, se
logr. Por ltimo, en este trabajo me calificara con un 100 debido a que le dediqu bastante
esfuerzo y dedicacin para poder entenderle.

Você também pode gostar