Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Descripcin General
Una Pila es una clase especial de lista en la cual todas las inserciones y borrados tienen lugar en un extremo denominado extremo, cabeza o tope. otro nombre para las pilas son listas FIFO (ltimo en entrar, primero en salir) o listas pushdown (empujadas hacia abajo).
telemento tope (pila P) Argumentos: Una pila P que debe ser no vaca. Efecto: Devuelve el elemento en la cabeza de la pila P.
void pop (pila P) Argumentos: Una pila P que debe ser no vaca. Es modificada.
void push (telemento x, pila P) Argumentos: x: Un elemento que deseamos poner en la pila. p: Una pila P val donde deseamos poner el elemento x.
Efecto: Inserta el elemento x en el tope de la pila P. El elemento tope antiguo se convierte en el siguiente al tope y as sucesivamente.
int vacia (pila P) Argumentos: Una pila P. Efecto: Devuelve si P es una pila vaca.
Implementacin C++
El puntero siguiente permitir el acceso al prximo elemento. typedef struct ElementoLista { char *dato; struct ElementoLista *siguiente; }Elemento; Para permitir las operaciones sobre la pila, vamos a guardar ciertos elementos: el primer elemento el numero de elementos
Para ello, ser utilizada otra estructura (no es obligatorio, pueden ser utilizadas variables). typedef struct ListaUbicacin{ Elemento *inicio; int tamao; } Pila;
El puntero inicio contendr la direccin del 1er elemento de la lista. La variable tamao contiene el numero de elementos
Inicializacin
void inicializacin (Pila *tas); Esta operacin debe ser hecha antes de cualquier otra operacin sobre la pila. Esta inicializa el puntero inicio con el puntero NULL, y el tamao con el valor 0. void inicializacin (Pila * tas){ tas->inicio = NULL; tas->tamao = 0; }
Modelo de la funcin:
int apilar (Pila *tas, char *dato);
La funcin /* apilar (aadir) un elemento en la pila */ int apilar (Pila * tas, char *dato){ Elemento *nuevo_elemento; if ((nuevo_elemento = (Elemento *) malloc (sizeof (Elemento))) == NULL) return -1; if ((nuevo_elemento->dato = (char *) malloc (50 * sizeof (char))) == NULL) return -1; strcpy (nuevo_elemento->dato, dato); nuevo_elemento->siguiente = tas->inicio; tas->inicio = nuevo_elemento; tas->tamao++; }
etapas:
el puntero sup_elemento contendr la direccin del 1er elemento el puntero inicio apuntar hacia el 2do elemento (despus de la eliminacin del 1er elemento, el 2do elemento estar en la cabeza de la pila) el tamao de la pila disminuir un elemento.
funcin int desapilar (Pila * tas){ Elemento *sup_elemento; if (tas->tamao == 0) return -1; sup_elemento = tas->inicio; tas->inicio = tas->inicio->siguiente; free (sup_elemento->dato); free (sup_elemento); tas->tamao--; return 0; }
Visualizacin de la pila Para mostrar la pila entera, es necesario posicionarse al inicio de la pila (el puntero inicio lo permitir). Luego, utilizando el puntero siguiente de cada elemento, la pila es recorrida del 1er hacia el ultimo elemento. La condicin para detenerse es dada por el tamao de la pila.
La funcin /* visualizacin de la pila */ void muestra (Pila * tas){ Elemento *actual; int i; actual = tas->inicio; for(i=0;i<tas->tamao;++i){ printf("\t\t%s\n", actual->dato); actual = actual->siguiente; } }