SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
Pilas y Colas
Cursos Propedéuticos 2015
Dr. René Cumplido
M. en C. Luis Rodríguez Flores
Contenido de la sección
Pilas
Estructura
Operaciones
Ejemplos de
aplicación
Implementación
Colas
Definición
Operaciones
Ejemplos de aplicación
Implementación
Colas con prioridad
Colas circulares
La estructura de datos PILA
• Su nombre se deriva de la
metáfora de una pila de
platos en una cocina.
• La inserción y extracción
de elementos de la pila
siguen el principio LIFO
(last-in-first-out).
• El último elemento en
entrar es el único accesible
en cada momento.
Entra Sale
Tope
Definición de Pila
• Una pila (stack) es una colecciona ordenada de
elementos en la cual los datos se insertan o se retiran
por el mismo extremo llamado “parte superior” de la pila.
Operaciones básicas en Pilas (Push)
Existe solamente un lugar en donde cualquier elemento
puede ser agregado a la pila. Después de haber insertado el
nuevo elemento, G ahora es el elemento en la cima.
Operaciones básicas en Pilas (Pop)
Basta indicar que sea retirado un elemento. No
podemos decir “retirar C”, porque C no está en la cima
de la pila.
Ejemplo
4 4
1
4
1
1
4
1
4
1
4
4
1
push(4) push(1) push(1) pop() push(4) pop()
La dinámica de la pila, es decir, la manera en cómo entran
y salen los datos a la estructura de datos se denomina fifo
(first input, first output)
Utilidad de las Pilas
El concepto de pila es muy importante en computación y
en especial en teoría de lenguajes de programación. En
lenguajes procedurales como Pascal o C, la pila es una
estructura indispensable, debido a las llamadas a función.
Por que?
Cuando ocurre una llamada a alguna función, el estado
global del sistema se almacena en un registro y éste en
una pila. Cuando se termina de ejecutar algún
procedimiento, se recupera el registro que está en la cima
de la pila.
Otras aplicaciones de las Pilas?
Aplicaciones de las pilas
• Navegador Web
– Se almacenan los sitios previamente visitados
– Cuando el usuario quiere regresar (presiona el botón
de retroceso), simplemente se extrae la última
dirección (pop) de la pila de sitios visitados.
• Editores de texto
– Los cambios efectuados se almacenan en una pila
– Usualmente implementada como arreglo
– Usuario puede deshacer los cambios mediante la
operación “undo”, la cual extraer el estado del texto
antes del último cambio realizado.
Balance de Paréntesis
Es útil poder detectar si es que los paréntesis en un
archivo fuente están o no balanceados.
Se puede usar un stack: a+(b+c)*[(d+e])/f
Pseudo-código:
Crear el stack.
Mientras no se ha llegado al final del archivo de entrada:
• Descartar símbolos que no necesiten ser balanceados.
• Si es un paréntesis de apertura: poner en el stack.
• Si es un paréntesis de cierre, efectuar un pop y comparar.
• Si son de igual tipo continuar
• Si son de diferente tipo: avisar el error.
•Si se llega al fin de archivo, y el stack no esta vacío: avisar error.
Implementación de las Pilas
Una pila está conformada por dos elementos:
• Un espacio suficiente para almacenar los elementos
insertados en la pila.
• Una elemento que indique cuál es el elemento en la cima
de la pila.
La estructura Pila:
definir nuevo tipo estructura llamado "stack" con item :
un arreglo de 0 a “máximos” elementos enteros
top : un numero de -1 a (máximos – 1)
fin de la nueva estructura
Implementación de las Pilas
Es posible escribir un código en C/C++ que represente lo
anteriormente propuesto.
Implementación con arreglos
• Una pila es una colección
ordenada de objetos.
• En C, los arreglos
permiten almacenar
colecciones ordenadas.
• La desventaja de
implementar una pila
mediante un arreglo es
que esta última es de
tamaño fijo, mientras que
usando punteros la pila
puede ser de tamaño
dinámico.
#define STACKSIZE 100
typedef struct stack{
int top;
int nodes[STACKSIZE];
}Stack;
Stack *create_stack
(Stack *S) {
S= (Stack *)
malloc(sizeof(Stack));
S->top=-1;
return S;
}
main(){
Stack *S;
S=create_stack(S);
:
}
Operaciones en Pilas
Las operaciones básicas de una pila son:
1. En la pila S, insertar un elemento e: push(S,e)
2. Retirar un elemento de la pila S: pop(S)
3. Verificar si la pila S está vacía: stackempty(S)
4. Saber cuál es el elemento en la cima de la pila S:
stacktop(S).
La Operación Push
Esta operación sirve para insertar un elemento e en la pila
S, lo vamos a escribir como: push(S,e).
Después de hacer esta operación sucede que: El elemento
en la cima de la pila S ahora es e
t
r
e
Pila S
La Operación Push
(1) La operación push recibe : la dirección de una
estructura pila y un elemento entero.
(2) Incrementa el tope (cima) de la pila para agregar el
elemento en una posición libre de la pila.
(3) Asignando el valor e en la casilla S->top.
La Operación Push
(1) La operación push recibe : la dirección de una
estructura pila y un elemento entero.
(2) Incrementa el tope (cima) de la pila para agregar el
elemento en una posición libre de la pila.
(3) Asignando el valor e en la casilla S->top.
void push(Stack *S, int e) {
if(S->top == (STACKSIZE-1))
printf(“Full stackn");
else {
S->top++;
S->nodes[S->top] = e;
}
}
La Operación Pop
Esta operación sirve para retirar el elemento en la cima de
la pila S, lo vamos a escribir como: pop(S,e).
t
r
e
Pila S
La Operación Pop
(1) La función devuelve un tipo entero al recibir la dirección
de una variable de tipo estructura pila (struct stack *).
Las líneas (4) y (5) son las mas importantes ya que se
almacena el valor que ser devuelto y se decrementa el
tope de la pila.
La Operación Pop
(1) La función devuelve un tipo entero al recibir la dirección
de una variable de tipo estructura pila (struct stack *).
Las líneas (4) y (5) son las mas importantes ya que se
almacena el valor que ser devuelto y se decrementa el
tope de la pila.
int pop(Stack *ps) {
if(ps->top == -1)
printf(“Empty stackn");
else {
int t;
t = ps->nodes[ps-> top];
ps->top--;
return t;
}
}
La Operación Stacktop
Esta función debe devolver un número entero y dejar la
pila sin cambio. Para esto:
• pop(&A)
• Mostrar el elemento A
• push(&A,elemento).
t
r
e
Pila S
t
r
e
Pila S
Mostrar e
La Operación Stacktop
El siguiente segmento de código ilustra cómo se han
usado las funciones antes creadas para implementar
Stacktop, por supuesto que se pueden separar y crear una
nueva función que haga lo mismo:
La Operación Stackempty
La operación stackempty se describe en el siguiente
segmento de código:
La estructura de datos cola
En una cola hay dos extremos, uno es llamado la parte
delantera y el otro extremo se llama la parte trasera de la
cola. En una cola, los elementos se retiran por la parte
delantera y se agregan por la parte trasera.
La estructura de datos cola
• Su nombre se deriva de la
metáfora de una cola de
personas en una taquilla.
• La inserción y extracción
de elementos de la cola
siguen el principio FIFO
(first-in-first-out).
• El elemento con más
tiempo en la cola es el que
puede ser extraído.
Entra
Sale
cola
frente
Operaciones en una cola
• Las operaciones básicas de una cola son “enqueue”
(meter) y “dequeue” (sacar)
– enqueue: añade un nuevo elemento al final de la cola
– dequeue: elimina (saca) el primer elemento de la cola
• Otras operaciones usualmente incluidas en el tipo
abstracto COLA son:
– isEmpty (estáVacia): verifica si la cola está vacía
– isFull (estáLlena): verifica si la cola está llena
Ejemplo de operaciones en una cola
a b
a b c
b c
Cola vacía
enqueue(a)
enqueue(b)
enqueue(c)
dequeue()
a
Aplicaciones de las colas
• En general, operaciones en redes de
computadoras.
– Trabajos enviados a una impresora
– Solicitudes a un servidor.
• Clientes solicitando ser atendidos por una
telefonista.
• Mas aplicaciones de las estructuras tipo cola?
Implementación de la estructura cola
De manera similar a las pilas, las colas definen una
estructura no estándar, de manera que se debe crear un
nuevo tipo de dado, el tipo cola, que debe tener los
siguientes elementos:
•Un arreglo de n elementos de algún tipo específico, puede
incluso ser un tipo estándar o no.
•Un número que indica el elemento que está en la posición
del frente de la cola.
•Un número que indica el elemento que está en la posición
trasera de la cola.
Implementación de la estructura cola
Suponiendo que los elementos son números enteros, una
idea para representar una cola en C/C++ es usar un
arreglo para contener los elementos y emplear otras dos
variables para representar la parte frontal y trasera de la
cola.
Implementación de la estructura cola
• Una cola es una colección
ordenada de objetos.
• En C, los arreglos
permiten almacenar
colecciones ordenadas.
• Los arreglos tienen
tamaño fijo.
#define QUEUESIZE 100
typedef struct queue{
int front;
int rear;
int nodes[QUEUESIZE];
}Queue;
Queue *create_queuek
(Queue *ps) {
ps = (Queue *)
malloc(sizeof(Queue));
ps->front = 0;
ps->rear = -1;
return ps;
}
main(){
Queue *ps;
ps=create_queue(ps);
}
Operaciones en colas
Suponiendo que no existiera la posibilidad de caer en un
desbordamiento del arreglo, las operaciones enqueue
(insert) y dequeue (remove) quedan**:
** Asumiendo un comportamiento tipo Buffer.
Operaciones en colas
void enqueue(Queue* ps,int i) {
if (ps->rear == (QUEUESIZE -1))
printf(“Full queuen");
else {
ps->rear++;
ps->nodes[ps->rear] = i;
}
}
int dequeue (Queue *ps) {
if(ps->front == ps->rear + 1)
printf(“Empty queuen");
else{
int t= ps->nodes[ps-> front];
ps->front++;**
return t;
}
}
ENQUEUE DEQUEUE
** Asumiendo un comportamiento tipo Buffer.
Operaciones en colas
La operación empty:
Colas con prioridad
Una cola con prioridad es una estructura de datos en la
que se ordenan los datos almacenados de acuerdo a un
criterio de prioridad. Hay dos tipos de colas de prioridad:
•Las colas de prioridad con ordenamiento descendente.
•Las colas de prioridad con ordenamiento ascendente.
Colas con prioridad
Si CPA es una cola de prioridad ascendente, la operación
insert(CPA,x) inserta el elemento x en la cola CPA; y la
operación x=minRemove(CPA) asigna a x el valor del
elemento menor (de su prioridad) y lo remueve de la cola.
En las colas de prioridad descendente las operaciones
aplicables son insert(CPD,x) y x=maxRemove(CPD),
cuando CPD es una cola de prioridad descendente y x es
un elemento.
La operación empty(C) se aplica a cualquier tipo de cola y
determina si una cola de prioridad está vacía. La operación
de borrar se aplica solamente si la pila no está vacía.
Colas con prioridad
Cuando se requiere eliminar un dato de una cola de
prioridad se necesitan verificar todos los elementos
almacenados para saber cuál es el menor (o el mayor).
Esto conlleva algunos problemas, el principal es que el
tiempo necesario para eliminar un elemento puede crecer
tanto como elementos tenga la cola.
Colas Circulares
• El objetivo de una cola
circular es aprovechar al
máximo el espacio del
arreglo.
• La idea es insertar
elementos en las
localidades previamente
desocupadas.
• La implementación
tradicional considera dejar
un espacio entre el frente
y la cola.
Colas Circulares
Si se eliminan componentes quedan espacios disponibles en
las primeras posiciones del arreglo.
Cuando se encolan elementos disminuye el espacio para
agregar nuevos elementos en la zona alta del arreglo.
Este buffer se puede implementar aplicando aritmética
modular, si el anillo tiene N posiciones, la operación: rear =
(rear+1) Mod N, mantiene el valor de la variable cola entre 0 y
N-1.
Colas Circulares
Operación similar puede efectuarse para la variable head
cuando deba ser incrementada en uno.
La variable rear puede variar entre 0 y N-1.
Si rear tiene valor N-1, al ser incrementada en uno (módulo
N), tomará valor cero.
También se agrega una variable N con el numero de
elementos encolados para poder distinguir entre la cola
vacía y llena.

Más contenido relacionado

Similar a Curso-PROPE-PyED-5-Pilas-Colas-programacion

Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Juan Astudillo
 
Sesion n°1 estructura de datos
Sesion n°1 estructura de datosSesion n°1 estructura de datos
Sesion n°1 estructura de datosJosé Braganza
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrbviela6
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrbviela6
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrbviela6
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrbviela6
 
Ejercicios pilas y_colas
Ejercicios pilas y_colasEjercicios pilas y_colas
Ejercicios pilas y_colaskelvinst
 
TRABAJO JOSE GABRIEL LUCENA PILAS PDF1233
TRABAJO JOSE GABRIEL LUCENA PILAS PDF1233TRABAJO JOSE GABRIEL LUCENA PILAS PDF1233
TRABAJO JOSE GABRIEL LUCENA PILAS PDF1233GABRIEL64287
 

Similar a Curso-PROPE-PyED-5-Pilas-Colas-programacion (20)

Practica 3
Practica  3Practica  3
Practica 3
 
Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)
 
Sesion n°1 estructura de datos
Sesion n°1 estructura de datosSesion n°1 estructura de datos
Sesion n°1 estructura de datos
 
Pilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datosPilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datos
 
Pilas Colas
Pilas ColasPilas Colas
Pilas Colas
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrb
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrb
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrb
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrb
 
DECLARACIÓN DE PILAS.pdf
DECLARACIÓN DE PILAS.pdfDECLARACIÓN DE PILAS.pdf
DECLARACIÓN DE PILAS.pdf
 
Ejercicios pilas y_colas
Ejercicios pilas y_colasEjercicios pilas y_colas
Ejercicios pilas y_colas
 
Pilas colas
Pilas colasPilas colas
Pilas colas
 
TRABAJO JOSE GABRIEL LUCENA PILAS PDF1233
TRABAJO JOSE GABRIEL LUCENA PILAS PDF1233TRABAJO JOSE GABRIEL LUCENA PILAS PDF1233
TRABAJO JOSE GABRIEL LUCENA PILAS PDF1233
 
2- TDA Listas
2- TDA Listas2- TDA Listas
2- TDA Listas
 
Pilas .pptx
Pilas .pptxPilas .pptx
Pilas .pptx
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Operaciones con colas
Operaciones con colasOperaciones con colas
Operaciones con colas
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
PilasyColas.ppt
PilasyColas.pptPilasyColas.ppt
PilasyColas.ppt
 
Datos
DatosDatos
Datos
 

Último

FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDUgustavorojas179704
 
Procesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxProcesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxMapyMerma1
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPELaura Chacón
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleJonathanCovena1
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosCesarFernandez937857
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxdanalikcruz2000
 
Flores Nacionales de América Latina - Botánica
Flores Nacionales de América Latina - BotánicaFlores Nacionales de América Latina - Botánica
Flores Nacionales de América Latina - BotánicaJuan Carlos Fonseca Mata
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxYeseniaRivera50
 
Factores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFactores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFlor Idalia Espinoza Ortega
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...JAVIER SOLIS NOYOLA
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxjosetrinidadchavez
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 

Último (20)

FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
 
Procesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxProcesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptx
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPE
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo Sostenible
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos Básicos
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
 
Flores Nacionales de América Latina - Botánica
Flores Nacionales de América Latina - BotánicaFlores Nacionales de América Latina - Botánica
Flores Nacionales de América Latina - Botánica
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
Repaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia GeneralRepaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia General
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
 
Factores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFactores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamica
 
Unidad 4 | Teorías de las Comunicación | MCDI
Unidad 4 | Teorías de las Comunicación | MCDIUnidad 4 | Teorías de las Comunicación | MCDI
Unidad 4 | Teorías de las Comunicación | MCDI
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 

Curso-PROPE-PyED-5-Pilas-Colas-programacion

  • 1. Pilas y Colas Cursos Propedéuticos 2015 Dr. René Cumplido M. en C. Luis Rodríguez Flores
  • 2. Contenido de la sección Pilas Estructura Operaciones Ejemplos de aplicación Implementación Colas Definición Operaciones Ejemplos de aplicación Implementación Colas con prioridad Colas circulares
  • 3. La estructura de datos PILA • Su nombre se deriva de la metáfora de una pila de platos en una cocina. • La inserción y extracción de elementos de la pila siguen el principio LIFO (last-in-first-out). • El último elemento en entrar es el único accesible en cada momento. Entra Sale Tope
  • 4. Definición de Pila • Una pila (stack) es una colecciona ordenada de elementos en la cual los datos se insertan o se retiran por el mismo extremo llamado “parte superior” de la pila.
  • 5. Operaciones básicas en Pilas (Push) Existe solamente un lugar en donde cualquier elemento puede ser agregado a la pila. Después de haber insertado el nuevo elemento, G ahora es el elemento en la cima.
  • 6. Operaciones básicas en Pilas (Pop) Basta indicar que sea retirado un elemento. No podemos decir “retirar C”, porque C no está en la cima de la pila.
  • 7. Ejemplo 4 4 1 4 1 1 4 1 4 1 4 4 1 push(4) push(1) push(1) pop() push(4) pop() La dinámica de la pila, es decir, la manera en cómo entran y salen los datos a la estructura de datos se denomina fifo (first input, first output)
  • 8. Utilidad de las Pilas El concepto de pila es muy importante en computación y en especial en teoría de lenguajes de programación. En lenguajes procedurales como Pascal o C, la pila es una estructura indispensable, debido a las llamadas a función. Por que? Cuando ocurre una llamada a alguna función, el estado global del sistema se almacena en un registro y éste en una pila. Cuando se termina de ejecutar algún procedimiento, se recupera el registro que está en la cima de la pila. Otras aplicaciones de las Pilas?
  • 9. Aplicaciones de las pilas • Navegador Web – Se almacenan los sitios previamente visitados – Cuando el usuario quiere regresar (presiona el botón de retroceso), simplemente se extrae la última dirección (pop) de la pila de sitios visitados. • Editores de texto – Los cambios efectuados se almacenan en una pila – Usualmente implementada como arreglo – Usuario puede deshacer los cambios mediante la operación “undo”, la cual extraer el estado del texto antes del último cambio realizado.
  • 10. Balance de Paréntesis Es útil poder detectar si es que los paréntesis en un archivo fuente están o no balanceados. Se puede usar un stack: a+(b+c)*[(d+e])/f Pseudo-código: Crear el stack. Mientras no se ha llegado al final del archivo de entrada: • Descartar símbolos que no necesiten ser balanceados. • Si es un paréntesis de apertura: poner en el stack. • Si es un paréntesis de cierre, efectuar un pop y comparar. • Si son de igual tipo continuar • Si son de diferente tipo: avisar el error. •Si se llega al fin de archivo, y el stack no esta vacío: avisar error.
  • 11. Implementación de las Pilas Una pila está conformada por dos elementos: • Un espacio suficiente para almacenar los elementos insertados en la pila. • Una elemento que indique cuál es el elemento en la cima de la pila. La estructura Pila: definir nuevo tipo estructura llamado "stack" con item : un arreglo de 0 a “máximos” elementos enteros top : un numero de -1 a (máximos – 1) fin de la nueva estructura
  • 12. Implementación de las Pilas Es posible escribir un código en C/C++ que represente lo anteriormente propuesto.
  • 13. Implementación con arreglos • Una pila es una colección ordenada de objetos. • En C, los arreglos permiten almacenar colecciones ordenadas. • La desventaja de implementar una pila mediante un arreglo es que esta última es de tamaño fijo, mientras que usando punteros la pila puede ser de tamaño dinámico. #define STACKSIZE 100 typedef struct stack{ int top; int nodes[STACKSIZE]; }Stack; Stack *create_stack (Stack *S) { S= (Stack *) malloc(sizeof(Stack)); S->top=-1; return S; } main(){ Stack *S; S=create_stack(S); : }
  • 14. Operaciones en Pilas Las operaciones básicas de una pila son: 1. En la pila S, insertar un elemento e: push(S,e) 2. Retirar un elemento de la pila S: pop(S) 3. Verificar si la pila S está vacía: stackempty(S) 4. Saber cuál es el elemento en la cima de la pila S: stacktop(S).
  • 15. La Operación Push Esta operación sirve para insertar un elemento e en la pila S, lo vamos a escribir como: push(S,e). Después de hacer esta operación sucede que: El elemento en la cima de la pila S ahora es e t r e Pila S
  • 16. La Operación Push (1) La operación push recibe : la dirección de una estructura pila y un elemento entero. (2) Incrementa el tope (cima) de la pila para agregar el elemento en una posición libre de la pila. (3) Asignando el valor e en la casilla S->top.
  • 17. La Operación Push (1) La operación push recibe : la dirección de una estructura pila y un elemento entero. (2) Incrementa el tope (cima) de la pila para agregar el elemento en una posición libre de la pila. (3) Asignando el valor e en la casilla S->top. void push(Stack *S, int e) { if(S->top == (STACKSIZE-1)) printf(“Full stackn"); else { S->top++; S->nodes[S->top] = e; } }
  • 18. La Operación Pop Esta operación sirve para retirar el elemento en la cima de la pila S, lo vamos a escribir como: pop(S,e). t r e Pila S
  • 19. La Operación Pop (1) La función devuelve un tipo entero al recibir la dirección de una variable de tipo estructura pila (struct stack *). Las líneas (4) y (5) son las mas importantes ya que se almacena el valor que ser devuelto y se decrementa el tope de la pila.
  • 20. La Operación Pop (1) La función devuelve un tipo entero al recibir la dirección de una variable de tipo estructura pila (struct stack *). Las líneas (4) y (5) son las mas importantes ya que se almacena el valor que ser devuelto y se decrementa el tope de la pila. int pop(Stack *ps) { if(ps->top == -1) printf(“Empty stackn"); else { int t; t = ps->nodes[ps-> top]; ps->top--; return t; } }
  • 21. La Operación Stacktop Esta función debe devolver un número entero y dejar la pila sin cambio. Para esto: • pop(&A) • Mostrar el elemento A • push(&A,elemento). t r e Pila S t r e Pila S Mostrar e
  • 22. La Operación Stacktop El siguiente segmento de código ilustra cómo se han usado las funciones antes creadas para implementar Stacktop, por supuesto que se pueden separar y crear una nueva función que haga lo mismo:
  • 23. La Operación Stackempty La operación stackempty se describe en el siguiente segmento de código:
  • 24. La estructura de datos cola En una cola hay dos extremos, uno es llamado la parte delantera y el otro extremo se llama la parte trasera de la cola. En una cola, los elementos se retiran por la parte delantera y se agregan por la parte trasera.
  • 25. La estructura de datos cola • Su nombre se deriva de la metáfora de una cola de personas en una taquilla. • La inserción y extracción de elementos de la cola siguen el principio FIFO (first-in-first-out). • El elemento con más tiempo en la cola es el que puede ser extraído. Entra Sale cola frente
  • 26. Operaciones en una cola • Las operaciones básicas de una cola son “enqueue” (meter) y “dequeue” (sacar) – enqueue: añade un nuevo elemento al final de la cola – dequeue: elimina (saca) el primer elemento de la cola • Otras operaciones usualmente incluidas en el tipo abstracto COLA son: – isEmpty (estáVacia): verifica si la cola está vacía – isFull (estáLlena): verifica si la cola está llena
  • 27. Ejemplo de operaciones en una cola a b a b c b c Cola vacía enqueue(a) enqueue(b) enqueue(c) dequeue() a
  • 28. Aplicaciones de las colas • En general, operaciones en redes de computadoras. – Trabajos enviados a una impresora – Solicitudes a un servidor. • Clientes solicitando ser atendidos por una telefonista. • Mas aplicaciones de las estructuras tipo cola?
  • 29. Implementación de la estructura cola De manera similar a las pilas, las colas definen una estructura no estándar, de manera que se debe crear un nuevo tipo de dado, el tipo cola, que debe tener los siguientes elementos: •Un arreglo de n elementos de algún tipo específico, puede incluso ser un tipo estándar o no. •Un número que indica el elemento que está en la posición del frente de la cola. •Un número que indica el elemento que está en la posición trasera de la cola.
  • 30. Implementación de la estructura cola Suponiendo que los elementos son números enteros, una idea para representar una cola en C/C++ es usar un arreglo para contener los elementos y emplear otras dos variables para representar la parte frontal y trasera de la cola.
  • 31. Implementación de la estructura cola • Una cola es una colección ordenada de objetos. • En C, los arreglos permiten almacenar colecciones ordenadas. • Los arreglos tienen tamaño fijo. #define QUEUESIZE 100 typedef struct queue{ int front; int rear; int nodes[QUEUESIZE]; }Queue; Queue *create_queuek (Queue *ps) { ps = (Queue *) malloc(sizeof(Queue)); ps->front = 0; ps->rear = -1; return ps; } main(){ Queue *ps; ps=create_queue(ps); }
  • 32. Operaciones en colas Suponiendo que no existiera la posibilidad de caer en un desbordamiento del arreglo, las operaciones enqueue (insert) y dequeue (remove) quedan**: ** Asumiendo un comportamiento tipo Buffer.
  • 33. Operaciones en colas void enqueue(Queue* ps,int i) { if (ps->rear == (QUEUESIZE -1)) printf(“Full queuen"); else { ps->rear++; ps->nodes[ps->rear] = i; } } int dequeue (Queue *ps) { if(ps->front == ps->rear + 1) printf(“Empty queuen"); else{ int t= ps->nodes[ps-> front]; ps->front++;** return t; } } ENQUEUE DEQUEUE ** Asumiendo un comportamiento tipo Buffer.
  • 34. Operaciones en colas La operación empty:
  • 35. Colas con prioridad Una cola con prioridad es una estructura de datos en la que se ordenan los datos almacenados de acuerdo a un criterio de prioridad. Hay dos tipos de colas de prioridad: •Las colas de prioridad con ordenamiento descendente. •Las colas de prioridad con ordenamiento ascendente.
  • 36. Colas con prioridad Si CPA es una cola de prioridad ascendente, la operación insert(CPA,x) inserta el elemento x en la cola CPA; y la operación x=minRemove(CPA) asigna a x el valor del elemento menor (de su prioridad) y lo remueve de la cola. En las colas de prioridad descendente las operaciones aplicables son insert(CPD,x) y x=maxRemove(CPD), cuando CPD es una cola de prioridad descendente y x es un elemento. La operación empty(C) se aplica a cualquier tipo de cola y determina si una cola de prioridad está vacía. La operación de borrar se aplica solamente si la pila no está vacía.
  • 37. Colas con prioridad Cuando se requiere eliminar un dato de una cola de prioridad se necesitan verificar todos los elementos almacenados para saber cuál es el menor (o el mayor). Esto conlleva algunos problemas, el principal es que el tiempo necesario para eliminar un elemento puede crecer tanto como elementos tenga la cola.
  • 38. Colas Circulares • El objetivo de una cola circular es aprovechar al máximo el espacio del arreglo. • La idea es insertar elementos en las localidades previamente desocupadas. • La implementación tradicional considera dejar un espacio entre el frente y la cola.
  • 39. Colas Circulares Si se eliminan componentes quedan espacios disponibles en las primeras posiciones del arreglo. Cuando se encolan elementos disminuye el espacio para agregar nuevos elementos en la zona alta del arreglo. Este buffer se puede implementar aplicando aritmética modular, si el anillo tiene N posiciones, la operación: rear = (rear+1) Mod N, mantiene el valor de la variable cola entre 0 y N-1.
  • 40. Colas Circulares Operación similar puede efectuarse para la variable head cuando deba ser incrementada en uno. La variable rear puede variar entre 0 y N-1. Si rear tiene valor N-1, al ser incrementada en uno (módulo N), tomará valor cero. También se agrega una variable N con el numero de elementos encolados para poder distinguir entre la cola vacía y llena.