PDF de programación - Tema 2. Pilas

Imágen de pdf Tema 2. Pilas

Tema 2. Pilasgráfica de visualizaciones

Publicado el 22 de Junio del 2019
850 visualizaciones desde el 22 de Junio del 2019
691,1 KB
79 paginas
Creado hace 7a (01/03/2017)
Programación II
Tema 2. Pilas

Iván Cantador y Rosa Mª Carro
Escuela Politécnica Superior
Universidad Autónoma de Madrid

Contenidos

1

• El TAD Pila
• Estructura de datos y primitivas de Pila
• Implementación en C de Pila

• Implementación con top de tipo entero

• Ejemplos de aplicación de Pila

• Balanceo de paréntesis
• Evaluación de expresiones posfijo
• Conversión entre notaciones infijo, posfijo y prefijo

• Anexo

• Implementación con top de tipo puntero

Programación II – Tema 2: Pilas

Escuela Politécnica Superior

Universidad Autónoma de Madrid

Contenidos

2

• El TAD Pila
• Estructura de datos y primitivas de Pila
• Implementación en C de Pila

• Implementación con top de tipo entero

• Ejemplos de aplicación de Pila

• Balanceo de paréntesis
• Evaluación de expresiones posfijo
• Conversión entre notaciones infijo, posfijo y prefijo

• Anexo

• Implementación con top de tipo puntero

Programación II – Tema 2: Pilas

Escuela Politécnica Superior

Universidad Autónoma de Madrid

El TAD Pila
• Pila (stack en inglés)

3

• Colección de elementos LIFO ‐ Last In, First Out: “el último que 

entra, el primero que sale”

Programación II – Tema 2: Pilas

Escuela Politécnica Superior

Universidad Autónoma de Madrid

El TAD Pila
• Definición de Pila

4

• Contenedor de elementos que son insertados y extraídos 

siguiendo el principio de que el último que fue insertado será el 
primero en ser extraído (LIFO – Last In, First Out)
‐ Los elementos se insertan de uno en uno: push (apilar)
‐ Los elementos se extraen de uno en uno: pop (desapilar)
‐ El último elemento insertado (que será el primero en ser extraído) es el 

único que se puede “observar” de la pila: top (tope, cima)

tiempo

push 1

push 2

push 3

pop 3

push 4

push 5

pop 5

pop 4

pop 2

pop 1

2
1

1

3
2
1

2
1

4
2
1

5
4
2
1

4
2
1

2
1

1

Programación II – Tema 2: Pilas

Escuela Politécnica Superior

Universidad Autónoma de Madrid

El TAD Pila
• Aplicaciones reales de las pilas

5

• En general, todas aquellas aplicaciones que conlleven:

‐ estrategias “vuelta atrás” (back tracking): la acción deshacer/undo
‐ algoritmos recursivos

• Ejemplos:

‐ Editores de texto: pila con los últimos cambios realizados sobre un documento
‐ Navegadores web: pila de direcciones con los sitios web más recientemente 

visitados

‐ Pila de programa: zona de memoria de un programa donde se guardan 

temporalmente los argumentos de entrada de funciones
‐ Comprobación del balanceo de (), {}, [] en compiladores
‐ Parsing de código XML/HTML, comprobando la existencia de etiquetas de 
comienzo <tag> y finalización </tag> de elementos en un documento XML

‐ Calculadoras con notación polaca inversa (posfijo): se convierten expresiones 

“infijo” a “posfijo” soportando complejidad superior a la de calculadoras 
algebraicas (p.e., realizan cálculos parciales sin tener que pulsar “=”)

Programación II – Tema 2: Pilas

Escuela Politécnica Superior

Universidad Autónoma de Madrid

Contenidos

6

• El TAD Pila
• Estructura de datos y primitivas de Pila
• Implementación en C de Pila

• Implementación con top de tipo entero

• Ejemplos de aplicación de Pila

• Balanceo de paréntesis
• Evaluación de expresiones posfijo
• Conversión entre notaciones infijo, posfijo y prefijo

• Anexo

• Implementación con top de tipo puntero

Programación II – Tema 2: Pilas

Escuela Politécnica Superior

Universidad Autónoma de Madrid

Estructura de datos y primitivas de Pila
• Una pila está formada por:

7

• datos: conjunto de elementos, en general del mismo tipo, ordenados 

implícitamente y accesibles desde un único punto: el tope

• tope: indicador de la posición del último elemento insertado; da lugar 

a una ordenación LIFO (last in, first out)

7

6

5

4

3

2

1

0

x
x
x
x
x

datos

4
tope

(en este dibujo asumimos que la pila
tiene tamaño máximo de 8, pero no
tiene por qué ser siempre ese valor)

Programación II – Tema 2: Pilas

Escuela Politécnica Superior

Universidad Autónoma de Madrid

Estructura de datos y primitivas de Pila

8

• Primitivas

Pila pila_crear(): crea, inicializa y devuelve una pila
pila_liberar(Pila s): libera (la memoria ocupada por) la pila
boolean pila_vacia(Pila s): devuelve true si la pila está vacía y false si no
boolean pila_llena(Pila s): devuelve true si la pila está llena y false si no
status pila_push(Pila s, Elemento e): inserta un dato en una pila
Elemento pila_pop(Pila s): extrae el dato que ocupa el top de la pila
Elemento pila_getTop(Pila s): devuelve el dato que ocupa el top de la pila 

sin extraerlo de ella

Programación II – Tema 2: Pilas

Escuela Politécnica Superior

Universidad Autónoma de Madrid

Estructura de datos y primitivas de Pila
• EdD en C

• datos: en este tema será un array de punteros: Elemento *datos[];
• top: en este tema se declarará de 2 maneras (versiones) distintas

• V1: Como un entero: int top;
• V2: Como un puntero a un elemento del array: Elemento **top;

9

7

6

5

4

3

2

1

0

x

x

x

x

x

7

6

5

4

3

2

1

0

x

x

x

x

x

datos

Versión 1

datos

top
Versión 2 (en anexo)

4
top

Programación II – Tema 2: Pilas

Escuela Politécnica Superior

Universidad Autónoma de Madrid

Contenidos

10

• El TAD Pila
• Estructura de datos y primitivas de Pila
• Implementación en C de Pila

• Implementación con top de tipo entero

• Ejemplos de aplicación de Pila

• Balanceo de paréntesis
• Evaluación de expresiones posfijo
• Conversión entre notaciones infijo, posfijo y prefijo

• Anexo

• Implementación con top de tipo puntero

Programación II – Tema 2: Pilas

Escuela Politécnica Superior

Universidad Autónoma de Madrid

Implementación en C de Pila

11

• Implementación con top de tipo entero

• Asumimos la existencia del TAD Elemento
• EdD de Pila mediante un array

// En pila.h
typedef struct _Pila Pila;
// En pila.c
#define PILA_MAX 8
struct _Pila {

Elemento *datos[PILA_MAX];
int

top;

};

7

6

5

4

3

2

1

0

4
top

datos

x

x

x

x

x

Programación II – Tema 2: Pilas

Escuela Politécnica Superior

Universidad Autónoma de Madrid

Implementación en C de Pila
• Implementación con top de tipo entero

• Asumimos la existencia del TAD Elemento que, entre otras, 

tiene asociadas las primitivas liberar y copiar:
void elemento_liberar(Elemento *pe);
Elemento *elemento_copiar(const Elemento *pe);

• Primitivas (prototipos en pila.h)

Pila *pila_crear();
void pila_liberar(Pila *ps);
boolean pila_vacia(const Pila *ps);
boolean pila_llena(const Pila *ps);
status pila_push(Pila *ps, const Elemento *pe);
Elemento *pila_pop(Pila *ps);

• Estructura de datos (en pila.c)

struct _Pila {

Elemento *datos[PILA_MAX];
int

top;

};

7

6

5

4

3

2

1

0

4
top

datos

12

x

x

x

x

x

Programación II – Tema 2: Pilas

Escuela Politécnica Superior

Universidad Autónoma de Madrid

Implementación en C de Pila
• Implementación con top de tipo entero

• Asumimos la existencia del TAD Elemento que, entre otras, 

tiene asociadas las primitivas liberar y copiar:
void elemento_liberar(Elemento *pe);
Elemento *elemento_copiar(const Elemento *pe);

• Primitivas (prototipos en pila.h)

Pila *pila_crear();
void pila_liberar(Pila *ps);
boolean pila_vacia(const Pila *ps);
boolean pila_llena(const Pila *ps);
status pila_push(Pila *ps, const Elemento *pe);
Elemento *pila_pop(Pila *ps);

• Estructura de datos (en pila.c)

struct _Pila {

Elemento *datos[PILA_MAX];
int

top;

};

7

6

5

4

3

2

1

0

4
top

datos

13

x

x

x

x

x

Programación II – Tema 2: Pilas

Escuela Politécnica Superior

Universidad Autónoma de Madrid

Implementación en C de Pila
• Implementación con top de tipo entero

14

Pila *pila_crear() {
Pila *ps = NULL;
int i;
ps = (Pila *) malloc(sizeof(Pila));
if (ps == NULL) {

return NULL;

}

for (i=0; i<PILA_MAX; i++) { // Bucle opcional

ps->datos[i] = NULL;

}
ps->top = -1;
return ps;

}

Programación II – Tema 2: Pilas

Escuela Politécnica Superior

Universidad Autónoma de Madrid

vacía

7

6

5

4

3

2

1

0

ps

‐1
top

datos

Implementación en C de Pila
• Implementación con top de tipo entero
Existe: void elemento_liberar(Elemento *pe);
void pila_liberar(Pila *ps) {

int i;

if (ps != NULL) {

for (i=0; i<=ps->top; i++) {

elemento_liberar(ps->datos[i]);
ps->datos[i] = NULL;

}
free(ps);
// ps = NULL; se hace fuera, tras llamar
// a pila_liberar

}

}

4
top

Programación II – Tema 2: Pilas

Escuela Politécnica Superior

Universidad Autónoma de Madrid

15

7

6

5

4

3

2

1

0

ps

datos

x

x

x

x

x

Implementación en C de Pila
• Implementación con top de tipo entero
Existe: void elemento_liberar(Elemento *pe);
void pila_liberar(Pila *ps) {

int i;

if (ps != NULL) {

for (i=0; i<=ps->top; i++) {

elemento_liberar(ps->datos[i]);
ps->datos[i] = NULL; // Opcional

}
free(ps);
// ps = NULL; se hace fuera, tras llamar
// a pila_liberar

}

}

16

7

6

5

4

3

2

1

0

ps

datos

x

x

x

x

x

4
top

Programación II – Tema 2: Pilas

Escuela Politécnica Superior

Universidad Autónoma de Madrid

Implementación en C de Pila
• Implementación con top de tipo entero
Existe: void elemento_liberar(Elemento *pe);
void pila_liberar(Pila *ps) {

int i;

if (ps != NULL) {

for (i=0; i<=ps->top; i++) {

elemento_liberar(ps->datos[i]);
ps->datos[i] = NULL; // Opcional

}
free(ps);
// ps = NULL; se hace fuera, tras llamar
// a pila_liberar

}

}

4
top

Programación II – Tema 2: Pilas

Escuela Politécnica Superior

Universidad Autónoma de Madrid

17

7

6

5

4

3

2

1

0

ps

datos

Implementación en C de Pila
• Implementación con top de tipo entero

• Asumimos la existencia del TAD Elemento que, entre otras, 

tiene asociadas las primitivas liberar y copiar:
void elemento_liberar(Elemento *pe);
Elemento *elemento_copiar(const Elemento *pe);

• Primitivas (prototipos en pila.h)

Pila *pila_crear();
void pila_liberar(Pila *ps);
boolean pila_vacia(const Pila *ps);
boolean pila_llena(const Pila *ps);
status pila_push(Pila *ps, const Elemento *pe);
Elemento *pila_pop(Pila *ps);

• Estructura de datos (en
  • Links de descarga
http://lwp-l.com/pdf16169

Comentarios de: Tema 2. Pilas (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad