0% encontró este documento útil (0 votos)
17 vistas25 páginas

04 Pilas y Colas

Cargado por

Spam001 002
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
17 vistas25 páginas

04 Pilas y Colas

Cargado por

Spam001 002
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 25

Pilas

Dr. Alejandro Villarreal -


juan.villarrealmjc@uanl.
edu.mx

Definición
• Es un tipo especial de lista abierta en la que sólo
se pueden insertar y eliminar nodos en uno de
los extremos de la lista.

Elemento 6

Elemento 5

Elemento 4
Pila
Elemento 3
Elemento 2

Elemento 1
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx

Características
• Las operaciones se conocen como "push" y
"pop", respectivamente "empujar" y "tirar".

• Además, las escrituras de datos siempre son


inserciones de nodos, y las lecturas siempre
eliminan el nodo leído.

• Estas características implican un


comportamiento de lista LIFO (Last In First
Out), el último en entrar es el primero en salir.
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx

• Misma forma del nodo que en las listas:

class nodo {
public:
int dato;
nodo *siguiente;
};

Pila DATO DATO DATO DATO NULL


Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx

Operaciones básicas
• Añadir un elemento al final de la pila. (PUSH)

• Leer y eliminar un elemento del final de la pila.


(POP)
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx

Insertar un elemento
• Insertar un elemento en una pila vacía
Pila NULL

Nodo DATO

2 1
Pila DATO NULL
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.

• Insertar un elemento en una pila no vacía


edu.mx

Pila DATO DATO ……

Nodo DATO

Pila DATO DATO ……

2 1

Nodo DATO
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx

Leer y eliminar un elemento


• Eliminar el primer nodo de una pila
Pila DATO DATO ……

Nodo

4 2

Pila DATO DATO ……

1
3
Nodo
DATO
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx

Ejemplo 1
• Supongamos que queremos construir una pila
para almacenar números enteros. Haremos
pruebas intercalando varios "push" y "pop", y
comprobando el resultado.
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx

#include<stdlib.h> Los tipos que definiremos normalmente


#include <stdio.h> para manejar pilas serán casi los mismos
que para manejar listas, tan sólo
cambiaremos algunos nombres.
typedef struct nodo {
int valor; • tipoNodo: tipo para declarar nodos.
struct nodo *siguiente;
} tipoNodo; • pNodo: tipo para declarar punteros a nodo

typedef tipoNodo *pNodo; • Pila es el tipo para declarar pilas.


typedef tipoNodo *Pila;
Declaramos las funciones que tendrá la pila:

void Push(Pila *l, int v); • Push: agregar un entero a la pila


int Pop(Pila *l);
• Pop: eliminar el último nodo y retornar su
valor.
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx
int main() {
Pila pila = NULL; Declaramos un puntero de tipo Pila

Push(&pila, 20); Agregamos el valor 20 y el valor 10 a la pila.


Push(&pila, 10); Después mostramos el último entero en la
printf("%d, ", Pop(&pila)); pila, en este caso, se muestra el 10.

Push(&pila, 40); Ahora, agregamos el valor 40 y el valor 30.


Push(&pila, 30); Después mostramos los últimos dos valores,
printf("%d, ", Pop(&pila)); para nuestro caso, serán los valores que
printf("%d, ", Pop(&pila)); acabamos de agregar.

Push(&pila, 90); Añadimos el valor 90 a la pila.


printf("%d, ", Pop(&pila));
Mostramos los últimos dos valores
printf("%d\n", Pop(&pila));
insertados en la pila.
getchar();
return 0;
} RESULTADO: 10, 30, 40, 90, 20
Dr. Alejandro Villarreal -
void Push(Pila *pila, int v) { juan.villarrealmjc@uanl.
edu.mx
pNodo nuevo;
nuevo = (pNodo)malloc(sizeof(tipoNodo)); Crea un nodo nuevo.
nuevo->valor = v;

nuevo->siguiente = *pila; Añadimos la pila a continuación del nuevo nodo.

*pila = nuevo; Ahora, el comienzo de nuestra pila es en nuevo nodo.


}

int Pop(Pila *pila) {


pNodo nodo; Variable auxiliar para manipular nodo.
int v; variable auxiliar para retorno.

nodo = *pila; Nodo apunta al primer elemento de la pila.


if(!nodo) return 0; Si no hay nodos en la pila retornamos 0.

*pila = nodo->siguiente; Asignamos a pila toda la pila menos el primer


v = nodo->valor; elemento. Guardamos el valor de retorno.

free(nodo); Borramos el nodo y regresamos el valor que este


return v; contenia.
}
Prueba Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx

int main() {
Pila Pila Pila Pila Pila Pila
Pila pila = NULL;

Push(&pila, 20); 90 30 40 10 20 NULL

Push(&pila, 10);
printf("%d, ", Pop(&pila));
Nodo Nodo Nodo Nodo Nodo

Push(&pila, 40);
Resultado = 10 30 40 90 20
Push(&pila, 30);
printf("%d, ", Pop(&pila));
printf("%d, ", Pop(&pila));

Push(&pila, 90);
printf("%d, ", Pop(&pila));
printf("%d\n", Pop(&pila)); Pila
getchar(); 30
return 0; 90
40
10
} 20
Colas
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx

Definición
• Una cola es un tipo especial de lista abierta en la
que sólo se pueden insertar nodos en uno de los
extremos de la lista y sólo se pueden eliminar
nodos en el otro.

• Además, como sucede con las pilas, las


escrituras de datos siempre son inserciones de
nodos, y las lecturas siempre eliminan el nodo
leído.
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx

• Este tipo de lista es conocido como lista FIFO


(First In First Out), el primero en entrar es el
primero en salir.

• Forma típica del nodo:

class nodo {
public:
int dato;
nodo *siguiente;
};
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx

• La representación interna es la siguiente

DATO DATO DATO DATO NULL

primero

ultimo
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx

Operaciones básicas
• Insertar un elemento al final de la cola.

• Leer y eliminar un elemento del principio de la


cola.
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx

Insertar un elemento
• Insertar un elemento en una cola vacía
primero NULL nuevo DATO
ultimo NULL

ultimo 3

2 1
primero DATO NULL
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.

• Insertar un elemento en una cola no vacía


edu.mx

DATO DATO DATO DATO NULL

primero

ultimo

ultimo

DATO DATO DATO DATO NULL

primero
2
1
nuevo DATO NULL
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx

Leer y eliminar un elemento


• Eliminar un elemento en una cola con más de un
elemento
ultimo

DATO DATO DATO DATO NULL

primero

3 DATO
aux 1 ultimo

DATO DATO DATO DATO NULL

primero 2
4
primero
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.

• Leer un elemento en una cola con un solo


edu.mx

elemento
ultimo

primero DATO NULL

1 aux 3 DATO
ultimo

primero DATO NULL


4
2 primero NULL

5 ultimo NULL
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx

Ejemplo 2
• Crear un programa en el que se capture una
expresión matemática por el método postfijo,
evaluar la expresión y mostrar el resultado.

• La información sobre lo definición de notación postfija y el algoritmo de


conversión desde una formula infija, la pueden encontrar en la presentación
llamada “Algoritmos Postfijo y Prefijo”
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx

Ejemplo 3:
• Desarrollar un programa que implemente las
funciones agregar y leer para una estructura de
datos del tipo COLA. Probar su funcionamiento.
• Desarrollar el mismo ejemplo, pero con un
arreglo.
Dr. Alejandro Villarreal -
juan.villarrealmjc@uanl.
edu.mx

Ejemplo 4:
• Desarrollar un programa que solicite datos al
usuario y los vaya almacenando en una COLA.
Cuando el usuario termine de capturar, el
programa debe de mostrar los valores en el
orden en que fueron ingresados y en orden
inverso utilizando una PILA.

También podría gustarte