You are on page 1of 2

Estructuras de Datos - Marzo 16, 2011

Laboratorio 1:
Pila de Strings sobre una Lista enlazada.
Prof. Mauro San Martín Prof. Samuel López

Pila sobre una Lista enlazada


Una pila es un TAD secuencial donde las operaciones de inserción y
borrado son permitidas en un extremo de la estructura denominado tope de la
pila. Esta estructura exhibe la propiedad LIFO (last in first out) lo que implica
que es posible remover elementos de la pila en orden inverso al cual se
insertaron en ella. Las operaciones básicas para insertar un elemento en la pila y
para removerlo reciben el nombre de push y pop respectivamente. La siguiente
figura ilustra la ejecución de estas operaciones sobre una pila.

La implementación de una pila sobre una lista enlazada involucra


la creación de estructuras en memoria dinámica a partir de los
elementos que se deseen almacenar .

Por ejemplo en el caso de querer almacenar un valor entero, la estructura


podría ser la siguiente:
typedef struct nodo{
int valor;
struct nodo *sig;
} NodoPila;

Como siempre en una pila es necesario mantener información acerca del


elemento en el tope de la pila, el cual será útil al momento de efectuar las
operaciones push y pop.

1
Manejo de Strings
En C los strings son arreglos de caracteres terminados en el carácter nulo.
Como tales pueden ser manejados como punteros a char con el cuidado de
solicitar suficiente memoria para contenerlos. Consecuentemente, un arreglo
de strings se puede declarar como un arreglo de punteros a char, y a medida
que es necesario se puede ir solicitando la memoria suficiente para cada uno.

Por ejemplo:
char *variasPalabras[TAMANO];
char *unaPalabra = "hola mundo!";
...
variasPalabras[i] = malloc((strlen(unaPalabra)+1)*sizeof(char));
strcpy(variasPalabras[i], unaPalabra);
...

Importante. El puntero que referencia un bloque de memoria obtenido


dinámicamente es el único medio de manipular sus contenidos y luego
liberarlos: es indispensable conservar su valor mientras dicho bloque esté
en uso. Recuerde que C no es garbage collected. Si se usa memoria fuera de
los límites asignados el comportamiento del programa se vuelve
impredecible.

Ejercicio: Pila de Strings


Cree una estructura de datos para contener y manipular una pila de
palabras, y un programa que ilustre su funcionamiento, especialmente en los
casos límite. La estructura de datos y sus operaciones debe estar en un
archivo llamado pilapalabras.h, y el programa principal en un archivo
llamado main.c.
La implementación de la pila debe realizarse en base a una lista enlazada y
como mínimo debe incluir funciones para inicializar una pila recién
declarada, apilar una palabra, desapilar una palabra, mostrar las palabras
en la pila, y eliminar la pila.
La solución propuesta debe ser correcta y eficiente, y el código fuente
autoexplicativo.

You might also like