02 tad pila - eafranco.com...(memoria estática) pila hablamos de una estructura de datos estática...

34
Estructuras de datos (Prof. Edgardo A. Franco) 1 M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom Tema 02: TAD Pila

Upload: others

Post on 01-Jan-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Estructuras de datos (Prof. Edgardo A. Franco)

1M. en C. Edgardo Adrián Franco Martínez http://[email protected]

@edfrancom edgardoadrianfrancom

Tema 02: TAD Pila

Page 2: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Contenido• Descripción del TAD Pila• Especificación del TAD Pila

• Cabecera• Definición• Operaciones• Observaciones

• Implementación del TAD Pila• Implementación estática• Implementación dinámica

• Aplicaciones del TAD Pila• Ejemplo 01: Problema Invertir una secuencia• Ejemplo 02: Problema validar paréntesis correctos

• Expresiones aritméticas• Expresiones infijas, prefijas y postfijas• Evaluación de expresiones infijas• Conversión de infijo a postfijo• Evaluación de expresiones postfijas

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

2

Page 3: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Descripción del TAD Pila

• Uno de los conceptos mas útiles en computación esla pila o stack.

• Es un conjunto de elementos, en la que:

• Los elementos se añaden y se remueven por un soloextremo.

• Este extremo es llamado “tope” de la pila.

• A las pilas se les llama también listas LIFO (last-infirst-out) o listas “ultimo en entrar, primero ensalir”.

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

3

Page 4: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

La ultima en llegar, sera la primera en

salir: LAST IN, FIRST OUT

LIFO

Cuando un empleado se va de vacaciones, le llega correo asu escritorio.▪ Las cartas se van “apilando”.

▪ Al regresar de vacaciones, la ultima carta en llegar, será la primeraque revisara

▪ Al terminar de revisarla, la nueva carta del tope de la pila habrácambiado

▪ Del “pilo” de cartas, la mas nueva que queda, será la siguiente en serrevisada

Descripción del TAD Pila (Ejemplo)

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

4

Page 5: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Especificación del TAD Pila

Cabecera• Nombre: PILA (stack)

• Lista de operaciones:

• Inicializar pila (Initialize): Recibe una pila y la inicializa para sutrabajo normal.

• Empilar (Push): Recibe la pila y un elemento, e inserta este ultimoen el tope.

• Desempilar (Pop): Recibe la pila, y devuelve el elemento del tope.

• Es vacía (Empty): Recibe la pila y devuelve verdadero si esta estavacía.

• Tope pila (Top): Recibe la pila, y devuelve el elemento de la cima dela pila.

• Tamaño pila (Size): Recibe la pila, y devuelve el valor del tope.

• Eliminar pila (Destroy): Recibe una pila y la libera completamente.

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

5

Page 6: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Definición• Dada una Pila llamada S

Push(s,elemento1)

Elemento 1

Tope o Cima

Push(s,elemento2)

Elemento 2

Push(S,elemento3)

Elemento 3

Pop(S)

EstaVacia? NoSi

▪ Al desempilar: ▪ Se “saca” elemento a elemento de la

pila: elemento = pop(s)

▪ La operación pop remueve el elemento del tope de la pila y lo retorna. La pila disminuye su tamaño.

▪ Al empilar: ▪ Cada elemento, es “colocado” a la pila:

push(S,elemento).

▪ La operación push aumenta un elemento a la pila, y esta aumenta en su tamaño

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

6

ERROR: Subdesbordamiento de la pila

Page 7: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

• Elementos en la pila:

• A los elementos almacenados en la pila les correspondeuna posición según fueron insertados, y esta posición semantiene fija mientras se encuentren en la pila.

• El TAD pila mantiene su estructura:

• Lo único variante es la cantidad de elementos que seencuentran “empilados” según se lleven a cabo lasoperaciones de empilar y desempilar. (No mutable)

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

7

Page 8: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Operaciones

• Inicializar pila (Initialize): recibe<- pila (S);

• Initialize(S);• Efecto: Recibe una pila y la inicializa para su trabajo normal.

• Empilar (Push): recibe<- pila (S); recibe<- elemento (e)

• Push(S,e);• Efecto: Recibe la pila y aumenta su tamaño, poniendo el elemento

en la cima de la pila.

• Desempilar (Pop): recibe<- pila (S); retorna -> elemento

• e=Pop(S);• Efecto: Recibe la pila, remueve el elemento tope y lo retorna.

• Excepción: Si la pila esta vacía, produce error.

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

8

Page 9: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

• Es vacía (Empty): recibe<- pila (S); retorna -> boolean

• b=Empty(S);• Efecto: Recibe una pila y devuelve true si esta vacía y false en caso

contrario.

• Tope pila (Top): recibe<- pila (S); retorna -> elemento

• e=Top(S);• Efecto: Devuelve el elemento cima de la pila.

• Excepción: Si la pila esta vacía produce error

• Tamaño pila (Size): recibe<- pila (S); retorna -> valor del tope

• n=Size(S);• Efecto: Devuelve el número de elementos que contiene la pila

(Altura de la pila).

• Eliminar pila (Destroy): recibe<- pila (S)

• Destroy(S);• Efecto: Recibe una pila y la libera completamente

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

9

Page 10: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Observaciones• El usuario de un pila debe remover hasta el ultimo elemento de

una pila verificando no caer en error.

• Una vez vacía, no se pueden “sacar o desempilar” mas elementos de la pila.

• Antes de sacar un elemento de la pila

• Debemos saber si la pila No esta vacía

• El tope de la pila siempre esta cambiando

• Deberíamos poder “revisar” el elemento tope de la pila.

• Si la pila esta vacía, el tamaño de la pila es 0

• El tratar de remover elementos o acceder a elementos de una pila vacía se llama

• Subdesbordamiento de la pila

• Al tratar de empilar elementos en una pila que ha llegado a su MAX_ELEMENT (Se supone que no deberá de tener fin, aunque en la

realidad no es posible) se le llama:

• Desbordamiento de la pila

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

10

Page 11: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Aplicaciones del TAD Pila• Las pilas se usan cuando para

• Recuperar un conjunto de elementos en orden inverso acomo se introdujeron

• Un programa debe

• Leer una secuencia de elementos enteros

• Luego mostrarlos en orden inverso al ingresado

• Ejemplo 01: Problema Invertir una secuencia

• Si se ingresa: 1, 3, 5, 7

• Se mostrara: 7, 5, 3, 1

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

11

Page 12: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Ejemplo 01: Solución

1357

135

131

7 5 3 1

▪ Una vez llenada la pila,▪ Solo hay que “sacar”, elemento

tras elemento

▪ Hasta que la pila quede vacía

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

12

Page 13: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Ejemplo 02: Problema validar paréntesis correctos

• El compilador siempre sabe cuando se ha escrito un paréntesis, o una llave de mas

• ¿Como lo hace?

• Con el uso de pilas, expresiones escritas:

• (a+b)) Mal

• ((a+b) * c / 4*g-h) OK

• Se puede reconocer los paréntesis que no coinciden

• ¿Como lograr esta aplicación de la pila?

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

13

Page 14: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

• Cuando los paréntesis coinciden:• Al final de la expresión

• Total paréntesis izq = Total paréntesis der y

• En todo momento, en cualquier punto de la expresión

• Cada paréntesis der. esta precedido de uno izq

• Acum. paréntesis der. siempre es <= que Acum. paréntesis izq

• P.g.

7 - ((X* ((X+Y)/(J-3)) + Y) / (4-2.5))

(A+B)) + 3 Al final de la expresión:Total ( = 1Total ) = 2

En este punto de la expresión, ya se sabe que es incorrecta

Acum ( = 1Acum ) = 2

No se cumple la regla

Ejemplo 02: Problema

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

14

Page 15: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Todos los ), encontraron su (7 - ( ( X *( ( X+Y ) / ( J - 3) ) +Y ) / ( 4- 2) )

(

(

(

(

Ejemplo 02: Solución

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

15

Page 16: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Una expresión aritmética contiene constantes,variables y operaciones con distintos niveles deprecedencia.

Operaciones básicas:

^ potencia*/ multiplicación, división+,- suma, resta

Expresiones aritméticas

TAD Pila IV (Edgardo A. Franco)

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

16

Page 17: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Notación infija:Los operadores aparecen en medio de los operandos.

A + B, A – 1, E/F, A * C , A ^ B , A + B + C, A+B-C

Notación prefijaEl operador aparece antes de los operandos.

+ AB, - A1, /EF, *AC, ^AB, +AB+C, +AB-C

Notación postfija:El operador aparece al final de los operandos.

AB+, A1-, EF/, AC*, AB^, AB+C+, AB+C-

Expresiones infijas, prefijas y postfijas

TAD Pila IV (Edgardo A. Franco)

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

17

Page 18: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Pasos para evaluar una expresión:

1. Convertir a postfijo: convertir la expresión en notación infijo a notación postfijo. (Se emplea una pila)

2. Evaluar la expresión postfija: usar una pila para mantener los resultados intermedios cuando se evalúa la expresión en notación posfijo.

TAD Pila IV (Edgardo A. Franco)

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

18

Page 19: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Pasos para convertir expresión infija a postfija

1. Se crea una cadena resultado donde se almacena la expresión enpostfijo.

2. Los operandos se agregan directamente al resultado

3. Un paréntesis izquierdo se mete a la pila y tiene prioridad oprecedencia cero (0).

4. Un paréntesis derecho saca los elementos de la pila y los agrega alresultado hasta sacar un paréntesis izquierdo.

5. Los operadores se insertan en la pila si:• La pila esta vacía.

• El operador en el tope de la pila tiene menor precedencia.

• Si el operador en el tope tiene mayor precedencia se saca y agrega al resultado(repetir esta operación hasta encontrar un operador con menor precedencia o la pilaeste vacía).

6. Cuando se termina de procesar la cadena que contiene la expresióninfijo se vacía la pila pasando los elementos al resultado.

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

19

Page 20: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

A + B * C - D A B C * + D -El operador de mayor

precedencia en la expresión será el primero en aparecer en la

conversión

A

El operador de mayor

precedencia es el primero en

aparecer en la expresión

A es un operando, es añadido

directamente a la nueva expresión en

postfija

+

+ es un operador, pero, hasta lo que vamos

revisando, no es el de mayor prioridad, mejor,

guardarlo

* Es un operador. Si se compara con el ultimo recordado, el * tiene

mayor prioridad. Pero no sabemos si tiene “la”

mayor prioridad de todos aun. Mejor guardarlo

*

Comparado con el de mayor prioridad hasta ahora(el *), el –

no tiene mayor prioridad.Ahora si podemos decir, que el *

es el operador de mayor prioridad

Podemos añadir el * a la nueva expresion, y “olvidarnos” de el

Pero aun no podemos continuar. Seguimos

comparando el – con el de mayor prioridad

hasta ahora, el +. Como el – no tiene mayor

prioridad que el +, el + ya puede ser añadido

a la expresion. Como ya no queda mas en la

pila,

El – es definitivamente hasta ahora, el de

“mayor prioridad”, debemos recordarlo

-

Aquí terminamos de revisar la expresión, símbolo por símbolo.

En la pila, quedan aun operadores.

Todos se sacan y se añaden a la nueva expresión

Así termina la conversión

B C *+ D -

TAD Pila IV (Edgardo A. Franco)

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

20

Page 21: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Reglas para evaluar si se incluyen paréntesis

• Para resolver este problema, podemos seguir las siguientes

reglas:

• Los paréntesis izquierdos (

• Siempre van a ser añadidos a la pila, pase lo que pase

• Los paréntesis derechos )

• Significa que un ambiente de () ha sido terminado,

• Todos los operadores de la pila, se sacan, hasta encontrar un (

Conversión de infijo a postfijo

TAD Pila IV (Edgardo A. Franco)

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

21

Page 22: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Reglas para evaluar una expresión postfijaRecorrer la expresión de izquierda a derecha

1. Si es un operando

• Almacenar el valor en la pila de valores

2. Si es un operador:

• Obtener dos operandos de la pila de valores

• Aplicar el operador

• Almacenar el resultado en la pila de valores

Al finalizar el recorrido, el resultado estará en la pila de valores

TAD Pila IV (Edgardo A. Franco)

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

22

Page 23: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

• Deberíamos poder “recordar” cada operando de la expresión y su cálculo

• Si encontramos un operador• Los dos últimos operandos recordados son los usados y “olvidados”

• El resultado de la operación, debe ser también “recordado”

• Así, hasta que la expresión termine

ABC*+ *CB+A

A

B

C

B*C

TAD Pila IV (Edgardo A. Franco)

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

23

Page 24: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Implementación del TAD Pila

• Hay varias formas…• Verlo como un arreglo… con operaciones especificas

• Un arreglo de datos el cuál se va llenando conforme serealizan inserciones y vaciando por el final del arreglo(índice Tope que lleve el control).

• Verlo como una una Lista… empleando solo algunas de susoperaciones posibles y restringiendo el resto.

• En la lista los nuevos nodos se pueden insertar y remover• Al/Del Inicio, al final, dada una posición, etc.

• En la Pila los elementos solo se pueden insertar al final de la Pila• Y solo se pueden remover del Final de la Pila

• Más adelante en el curso se notará queimplementaciones de la lista simplemente enlazadapodrían usarse para implementar una pila.

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

24

Page 25: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Implementación estática

Montículo (Memoria libre)

Pila de ejecución

Código

Datos del main()(Memoria estática)

Pila

Hablamos de una Estructura dedatos estática cuando se le asignauna cantidad fija de memoria paraesa estructura antes de la ejecucióndel programa.▪ La cantidad de espacio asignado para la

memoria estática se determina durante lacompilación y no varía a la hora de ejecutarseel programa que la implemente.

TAD Pila II (Edgardo A. Franco)

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

25Datos de Función

(Variables estáticas)

Page 26: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Implementación estática del TAD Pila

• La Pila seria un arreglo

• typededef struct { arreglo elementos; int tope} Pila;

• Y solo deberemos implementar las

operaciones de

• Push, sumando el índice tope e insertando en

subíndice tope del arreglo al elemento.

• Pop, devolviendo el elemento del subíndice

tope y restando el índice tope.

• Top, devolviendo el elemento del subíndice

tope.

MAX_ELEM

Tope = -1

Tope = 0

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

26

Pop(e1);

e1

Page 27: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

0 1 2 3 4 5

TOPE: Apunta hacia el elemento que seencuentra en el extremo de la pila.(inicialmente es -1).

Usando arreglos: Define un arreglo de unadimensión (vector) donde se almacenan loselementos.

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

27

Page 28: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

TADPilaEst.h (Implementación estructurada en lenguaje C)

Tope =

MAX_ELEM-1

Tope = 0

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

28

//DEFINICIONES DE CONSTANTES

#define MAX_ELEMENT 1000

#define TRUE 1

#define FALSE 0

//DEFINICIONES DE TIPOS DE DATO

//Definir un boolean (Se modela con un "char")

typedef unsigned char boolean;

//Definir un elemento (Se modela con una estructura "elemento")

typedef struct elemento

{

//Variables de la estructura "elemento" (El usuario puede modificar)

char c;

//***

//***

//***

}elemento;

//Definir una pila (Se modela con una estructura que unicamente incluye un puntero a "elemento")

typedef struct pila

{

elemento arreglo[MAX_ELEMENT];//La pila es un arreglo estático de MAX_ELEMET

int tope; //El tope es un entero (Indice del arreglo de elementos)

}pila;

//DECLARACIÓN DE FUNCIONES

void Initialize(pila *s); //Inicializar pila (Iniciar una pila para su uso)

void Push(pila *s, elemento e);//Empilar (Introducir un elemento a la pila)

elemento Pop (pila *s); //Desempilar (Extraer un elemento de la pila)

boolean Empty(pila *s); //Vacia (Preguntar si la pila esta vacia)

elemento Top(pila *s); //Tope (Obtener el "elemento" del tope de la pila si extraerlo de la

pila)

int Size(pila *s); //Tamaño de la pila (Obtener el número de elementos en la pila)

void Destroy(pila *s); //Elimina pila (Borra a todos los elementos y a la pila de memoria)

Page 29: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Montículo (Memoria libre)

Pila de ejecución

Implementación dinámica

Código

Datos (Memoria estática)

Pila

Hablamos de una Estructura dedatos dinámica cuando se le asignamemoria a medida que esnecesitada, durante la ejecución delprograma.

▪ En este caso la memoria para laestructura de datos no queda fijadurante la compilación si no tiene uncomportamiento dinámico en laejecución.

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

29

Page 30: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Implementación dinámica del TAD Pila

• La implementación de una pila dinámica

obliga a que no sea necesario un

MAX_ELEMENT, si no que se logre

solicitar espacio durante la llamada a

empilar para almacenar el elemento y

liberar espacio durante la operación

desempilar elemento. En este caso el

tope a la región en memoria donde esta

el ultimo elemento.

DIN

ÁM

ICO

Tope = NULL

Tope =

MAX_MEMORIA

Tope = 0

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

30

Page 31: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

31

Page 32: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

TADPilaDin.h (Implementación estructurada en lenguaje C)

Tope =

MAX_ELEM-1

Tope = 0

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

32

//DEFINICIONES DE CONSTANTES

#define TRUE 1

#define FALSE 0

//DEFINICIONES DE TIPOS DE DATO

//Definir un boolean (Se modela con un "char")

typedef unsigned char boolean;

//Definir un elemento (Se modela con una estructura "elemento")

typedef struct elemento

{

//Variables de la estructura "elemento" (El usuario puede modificar)

char c;

//***

}elemento;

//Definir un nodo que será utilizado para almacenar una posición de la pila (Nodo), lo que

incluira a un elemento y a un apuntador al siguiente nodo

typedef struct nodo

{

elemento e; //Elemento a almacenar en cada nodo de la pila

struct nodo *abajo; //Apuntador al elemento de debajo

}nodo;

//Definir una pila (Se modela con una estructura que unicamente incluye un puntero a "elemento")

typedef struct pila

{

nodo *tope; //Apuntador al elemento en el tope de la pila

}pila;

//DECLARACIÓN DE FUNCIONES

void Initialize(pila *s); //Inicializar pila (Iniciar una pila para su uso)

void Push(pila *s, elemento e);//Empilar (Introducir un elemento a la pila)

elemento Pop (pila *s); //Desempilar (Extraer un elemento de la pila)

boolean Empty(pila *s); //Vacia (Preguntar si la pila esta vacia)

elemento Top(pila *s); //Tope (Obtener el "elemento" del tope de la pila si extraerlo de la

pila)

int Size(pila *s); //Tamaño de la pila (Obtener el número de elementos en la pila)

void Destroy(pila *s); //Elimina pila (Borra a todos los elementos y a la pila de memoria)

Page 33: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

TADPila.h (Implementación estructurada en lenguaje C)

Tope = 0

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

33

ESPECIFICACIÓN

TADPilaEst.hDeclaración de

funciones

TADPilaEst.cDefinición de

funciones

#include"TADPilaEst.h"

push(){}

pop(){}

-Declaración de funciones (prototipos)

-Declaración de tipos de datos y estructuras-Definición de constantes

-Definición de las funciones (código)

-Usa tipos, estructuras y constantes

Page 34: 02 TAD Pila - eafranco.com...(Memoria estática) Pila Hablamos de una Estructura de datos estática cuando se le asigna una cantidad fija de memoria para esa estructura antes de la

Uso del TADPila (En lenguaje C)

Estr

uct

ura

s d

e d

ato

s0

2 T

AD

Pila

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

34

main.c

#include"TADPila.h"

pila si;

elemento e1;e1=datos;push(si, e1)..

Compilar $gcc main.c TADPila.o -o programa (Compilación del main)

$gcc TADPila.c -c (Compilación de la librería)Se obtendrá: TADPila.o

$gcc main.c TADPilaEst.c -o prog (Compilación de la librería y el main si se tiene el .c de la pila)