Professional Documents
Culture Documents
Una pila (stack en ingls) es una estructura de datos de tipo LIFO (del ingls Last In First
Out, ltimo en entrar, primero en salir) que permite almacenar y recuperar datos. Se aplica
en multitud de ocasiones en informtica debido a su simplicidad y ordenacin implcita en
la propia estructura. Representacin grfica de una pila
Para el manejo de los datos se cuenta con dos operaciones bsicas: apilar (push), que
coloca un objeto en la pila, y su operacin inversa, retirar (o desapilar, pop), que retira el
ltimo elemento apilado.
En cada momento slo se tiene acceso a la parte superior de la pila, es decir, al ltimo
objeto apliado (denominado TOS, top of stack en ingls). La operacin retirar permite la
obtencin de este elemento, que es retirado de la pila permitiendo el acceso al siguiente
(apilado con anterioridad), que pasa a ser el nuevo TOS.
Por analoga con objetos cotidianos, una operacin apilar equivaldra a colocar un plato
sobre una pila de platos, y una operacin retirar a retirarlo.
Las pilas suelen emplearse en los siguientes contextos:
Evaluacin de expresiones en notacin postfija (notacin polaca inversa).
Reconocedores sintcticos de lenguajes independientes del contexto
Implementacin de recursividad.
Ejemplo
Forma principal
Cdigo
void CmdInsercionClick(object sender, EventArgs e)
{
string elemento = txtElemento.Text;
txtElemento.Text = "";
txtElemento.Focus();
if (frmPrincipal.Cima == frmPrincipal.MaxPila)
{
MessageBox.Show("Pila llena (Overflow)");
return;
}
frmPrincipal.Cima = frmPrincipal.Cima + 1;
frmPrincipal.Pila[frmPrincipal.Cima] = elemento; // Inserta
elemento en Pila
}
Corrida
if (frmPrincipal.Cima == -1)
{
MessageBox.Show("Pila Vacia (Underflow)");
return;
}
int i = 0;
do
{
lsRecorrer.Items.Add(frmPrincipal.Pila[i]);
i = i + 1;
} while (i <= frmPrincipal.Cima);
}
Corrida
if (frmPrincipal.Cima == -1)
{
MessageBox.Show("Pila vacia (Underflow)");
return;
}
int i = 0;
do
{
int res =
string.Compare(elemento,frmPrincipal.Pila[i]);
if (res == 0)
{
lsRes.Items.Add(frmPrincipal.Pila[i]);
return;
}
i = i + 1;
} while (i <= frmPrincipal.Cima);
MessageBox.Show("Elemento no encontrado en Pila");
}
Corrida
}
string Elemento = frmPrincipal.Pila[frmPrincipal.Cima];
frmPrincipal.Cima = frmPrincipal.Cima - 1;
lsEliminados.Items.Add(Elemento);
}
Corrida