Programación

Solo disponible en BuenasTareas
  • Páginas : 8 (1928 palabras )
  • Descarga(s) : 0
  • Publicado : 20 de marzo de 2011
Leer documento completo
Vista previa del texto
PILA

Una pila es una estructura de datos a la cual se puede acceder solo por un extremo de la misma. Las operaciones de inserción y extracción se realizan a través del tope, por lo cual no se puede acceder a cualquier elemento de la pila. Se la suele llamar estructura L.I.F.O. como acrónimo de las palabras inglesas "last in, first out" (último en entrar, primero en salir). La pila se consideraun grupo ordenado de elementos, teniendo en cuenta que el orden de los mismos depende del tiempo que lleven "dentro" de la estructura.

Las pilas son frecuentemente utilizadas en el desarrollo de sistemas informáticos y software en general. Por ejemplo, el sistema de soporte en tiempo de compilación y ejecución del Pascal utiliza una pila para llevar la cuenta de los parámetros deprocedimientos y funciones, variables locales, globales y dinámicas. Este tipo de estructuras también son utilizadas para traducir expresiones aritméticas o cuando se quiere recordar una secuencia de acciones u objetos en el orden inverso del ocurrido.

• Insertar elemento (push)

Las operaciones con pilas son muy simples, no hay casos especiales, salvo que la pila esté vacía.

Push en una pila vacíaPartiremos de que ya tenemos el nodo a insertar y, por supuesto un puntero que apunte a él, además el puntero a la pila valdrá NULL:
El proceso es muy simple, bastará con que:
1. nodo->siguiente apunte a NULL.
2. Pilaa apunte a nodo.

Push en una pila no vacía

Podemos considerar el caso anterior como un caso particular de éste, la única diferencia es que podemos y debemos trabajar con unapila vacía como con una pila normal.
De nuevo partiremos de un nodo a insertar, con un puntero que apunte a él, y de una pila, en este caso no vacía:
El proceso sigue siendo muy sencillo:
1. Hacemos que nodo->siguiente apunte a Pila.
2. Hacemos que Pila apunte a nodo.

• Eliminar un elemento(pop)
Ahora sólo existe un caso posible, ya que sólo podemos leer desde un extremo de la pila.,Partiremos de una pila con uno o más nodos, y usaremos un puntero auxiliar, nodo:
Hacemos que nodo apunte al primer elemento de la pila, es decir a Pila.
1. Asignamos a Pila la dirección del segundo nodo de la pila: Pila->siguiente.
2. Guardamos el contenido del nodo para devolverlo como retorno, recuerda que la operación pop equivale a leer y borrar.
3. Liberamos la memoria asignada al primer nodo,el que queremos eliminar.
Si la pila sólo tiene un nodo, el proceso sigue siendo válido, ya que el valor de Pila->siguiente es NULL, y después de eliminar el último nodo la pila quedará vacía, y el valor de Pila será NULL.
• PilaVacía(Pila) : devuelve un valor booleano
Función : Indica si Pila está vacía.
Entrada: Pila a ser testeada.
Precondiciones: Pila existe.
Salida: PilaVacía (valorbooleano)
Poscondiciones: PilaVacía = (la pila está vacía)
• PilaLlena(Pila) : devuelve un valor booleano (para implementación estática)
Función : Indica si Pila está llena.
Entrada: Pila a ser testeada.
Precondiciones: Pila existe.
Salida: PilaLlena (valor booleano)
Poscondiciones: PilaLlena = (la pila está llena)

Ejemplo:
#include
#include

/* donde se declaranlas variables a utilizar */
struct tpila{
int clave;
struct tpila *sig;
};
/* prototipos e implementacion */

void crear(struct tpila **pila);
int vacia(struct tpila *pila);
void apilar(struct tpila *pila, int elem);void desapilar(struct tpila *pila, int *elem);


void crear(struct tpila **pila)
{ *pila = (struct tpila *) malloc(sizeof(struct tpila));
(*pila)->sig = NULL;}

int vacia(struct tpila *pila){
return (pila->sig == NULL);
}

void apilar(struct tpila *pila, int elem){
struct tpila *nuevo;

nuevo = (struct tpila *) malloc(sizeof(struct tpila));
nuevo->clave = elem; nuevo->sig = pila->sig;
pila->sig = nuevo;
}

void desapilar(struct tpila *pila, int *elem){
struct tpila *aux;

aux = pila->sig;
*elem = aux->clave;...
tracking img