Sei sulla pagina 1di 14

Algoritmos y Estructuras de

Datos II
Pilas y su implementacin en C++
Dr. Edgard I. Bentez-Guerrero

cursofei@gmail.com

1
Contenido
 Definicin
 Operaciones
 Implementacin esttica en C++
 Implementacin dinmica en C++

2
Pila
 Coleccin ordenada de elementos accesible por un
nico punto llamado cima o top.
 Los elementos en una pila tienen un orden LIFO (Last-
In First-Out, ltimo en entrar primero en salir)

x Cima
4 x
3 x
2 x
1 x
Pila

3
Operaciones bsicas

Push: Aadir un Push Pop


elemento al final de la
pila

Pop: Leer y eliminar un


elemento del final de la
pila

4
Ejemplo de funcionamiento

Operacin Pila Elemento


extrado
Push(a) a
Push(b) ab
Pop() a b
Push(c) ac
Push(d) acd
Pop() ac d

5
Implementacin esttica (1/2)
class Pila { void push(int v) {
private: if (! full()) {
static const int MAX = 3; valores[++tope]=v;}
int tope; else {
int valores[MAX]; cout << "No es posible
public: agregar un elemento" << endl;
Pila() { }
tope = -1; }
} int pop() {
if (! empty()) {
int empty() { return (valores[tope--]);}
if (tope==-1) return 1; else {
else return 0; cout << "No es posible
extraer un elemento" << endl;
}
return (0);
}
int full() {
}
if (tope== MAX-1) return 1;
};
else return 0;
}

6
Implementacin esttica (2/2)

int main(int argc, char *argv[])


{
Pila p;
p.push(5);
p.push(10);
p.push(15);
int x = p.pop();
if (x != 0)
cout << x << endl;

system("PAUSE");
return EXIT_SUCCESS;
}

7
Implementacin dinmica: nodo
class nodo {
Nodo es una
private:
clase que int valor;
permitir crear nodo *siguiente;
estructuras con public:
nodo(int v, nodo *sig)
dos atributos: {
un contenido y valor = v;
un apuntador al siguiente = sig;
}
siguiente Nodo int getValor() {return (valor);}

nodo *getSiguiente() {
return(siguiente); };
};

8
Implementacin dinmica: crear una pila
 Hacer que tope apunte a NULL

tope

9
Push: Insertar en una pila vaca
1. Crear un nodo y hacer que su siguiente
apunte a NULL

NULL

2. Hacer que tope apunte a nodo.


tope

NULL

10
Push: Inserta en una pila no vaca
1. Crear un nodo y hacer que su siguiente apunte
al tope
2. Hacer que tope apunte al nodo.

tope

antes

tope

despus

11
Pop: leer y eliminar un elemento
Suponiendo que se parte de una pila con uno o ms nodos,
considere un apuntador auxiliar nodo:
1. Hacer que nodo apunte al primer elemento de la pila, es decir a tope
2. Asignar a tope la direccin del segundo nodo de la pila; es decir, el de
su nodo siguiente
3. Guardar el contenido de nodo para devolverlo como retorno,
4. Liberar la memoria asignada a nodo, que es el que se desea eliminar

tope
despus
antes
tope

Si la pila slo tiene un nodo, el proceso sigue siendo vlido, ya que el siguiente del tope es NULL, y despus de
eliminar el ltimo nodo la pila quedar vaca y el valor de tope ser NULL. 12
Implementacin dinmica (1/2)
class pila { void pila::Push(int v){
private: /* Crear un nodo nuevo */
nodo *tope; nodo *n = new nodo(v, tope);
/* el comienzo de la pila es el nuevo
public: nodo */
pila(); tope = n;
~pila(); }
int pila::Pop(){
void Push(int v); int v; /*variable aux para retorno*/
int Pop(); /*Si la pila est vaca,regresar 0*/
if(tope == NULL) return 0;
}; nodo *n = tope; /* nodo apunta al
pila::pila() { primer elemento de la pila */
tope = NULL; tope = (*n).getSiguiente(); /* el nuevo
} tope es el siguiente del tope
pila::~pila(){ actual.Con esto nos lo saltamos*/
nodo *aux; v = (*n).getValor(); /* Guardamos el
while(tope!=NULL) { valor de retorno que es el
aux = tope; contenido del antiguo tope */
tope = (*tope).getSiguiente(); delete n; /* Borrar el nodo */
delete aux; return v;
} }
}

13
Implementacin dinmica (2/2)
int main()
{
pila Pila;

Pila.Push(20);
cout << "Push(20)" << endl;
Pila.Push(10);
cout << "Push(10)" << endl;

cout << "Pop() = " << Pila.Pop() << endl;


Pila.Push(40);
cout << "Push(40)" << endl;
Pila.Push(30);
cout << "Push(30)" << endl;
cout << "Pop() = " << Pila.Pop() << endl;
cout << "Pop() = " << Pila.Pop() << endl;
Pila.Push(90);
cout << "Push(90)" << endl;
cout << "Pop() = " << Pila.Pop() << endl;
cout << "Pop() = " << Pila.Pop() << endl;

cin.get();
return 0;
}

14

Potrebbero piacerti anche