jueves, 31 de julio de 2008

Codigo fuente de una pila en lenguaje C++

Esta es la implementación de una pila en su forma más básica: utilizando arreglos y funciones; un simple arreglo de enteros con 10 elementos y unas cuantas funciones que describen en su manera más sencilla el funcionamiento de una pila.

#include <iostream>
#define N 10
using namespace std;
int V[N], tope = -1;
bool llena() {
    return tope == N-1;
}
bool vacia() {
    return tope == -1;
}
void insertar(int dato) {
    if (!llena()) { // No podemos colocar un elemento a una pila llena.
       tope++;
       V[tope] = dato;
    }           
}
int extraer() {
   if (!vacia()) {
      int aux = V[tope];
      tope--;
      return aux; //Una forma mas elegante era colocar: return V[tope--];
   }
   else return -9999; //Si la pila esta vacia, retornamos un valor bandera...
}
int main() {
   insertar(3);
   insertar(9);
   insertar(4);
   cout << extraer() << endl; //Muestra 4
   cout << extraer() << endl; //Muestra 9
   cout << extraer() << endl; //Muestra 3
}

Consideraciones respecto a este código:

  • Tope y cima: dos variables que dan lugar a confusiones. Aquí estamos utilizando como variable que demarca el último elemento en la pila como tope, como también podíamos haberlo denominado cima, en realidad esto no importa, solamente nos interesa tener una variable que nos muestre cuál es el último elemento en la pila :-)
  • Los arreglos en C++ comienzan con el índice 0, por esta razón el valor de la variable tope tiene inicialmente el valor de -1. Esto significa que inicialmente no existe ningún elemento en la pila. Así cuando coloquemos el primer elemento, el valor de tope será 0.

Pilas - Breve introducción e implementación en varios lenguajes

Probablemente esta sea una de las estructuras de datos más sencillas como se verá en seguida. Sin dar vueltas sobre el asunto, es preferible hacer una defición clara y concisa (y corta):

Una pila es simplemente una lista donde las inserciones y supresiones de elementos se realizan por un extremo de esta lista.

Gráficamente, se puede interpretar una pila de la siguiente manera:

Ahora bien, una pila puede implementarse de diferentes maneras; se puede utilizar un arreglo o una lista enlazada. Para el caso del arreglo, la pila tendrá un tamaño fijo y no se podrán colocar más elementos que el tamaño del arreglo utilizado. Si se utiliza una lista enlazada, el número de elementos que se pueden colocar está limitado por la memoria del ordenador utilizado (en otras palabras, podemos insertar cualquier cantidad de elementos hasta que se nos acabe la memoria RAM :-).

Supóngase que utilizamos un arreglo para implementar una sencilla pila; entonces el comportamiento de esta pila sería parecido a esto:



               
cima