Estructuras de datos. Estructuras de datos. Estructuras de datos. Estructuras de datos

17  Download (0)

Full text

(1)

Existen dos tipos de lista con una uso muy frecuente en el desarrollo de aplicaciones de software.

El primero son las pilas cuyo comportamiento es el de una lista que inserta y elimina sus elementos por el mismo extremo llamado tope. También se les conoce como listas LIFO (Last In First Out) o UEPS(Ultimo en Entrar Primero en Salir).

Ing. Jorge A. Hernández P.:Pilas y colas

Ing. Jorge A. Hernández P.:Pilas y colas

Las dos operaciones básicas para las pilas son:

PUSH(x, P) insertar un elemento x en el

tope de la pila P.

POP(P) devuelve el elemento que se

encuentra en el tope de la pila Py lo elimina. La implementación puede realizarse a partir de la implementación de listas de la forma que se muestra en la siguiente lámina.

Ing. Jorge A. Hernández P.:Pilas y colas

Ing. Jorge A. Hernández P.:Pilas y colas

Estructuras de datos

void PUSH(ELEMENTO x, LISTA P){ if (!LLENA(P))

INSERTA(x, PRIMERO(P), P); else{

fprintf(stderror, “Pila llena\n”); exit(1); } } ELEMENTO POP(LISTA P){ ELEMENTO x = RECUPERA(PRIMERO(P), P); SUPRIME(PRIMERO(P), P); return x; }

Estructuras de datos

TOPE TOPE PUSH TOPE TOPE POP

(2)

También resulta útil saber si la pila esta vacía o llena y la implementación es exactamente la misma que con las listas.

En la funciones anteriores se uso LLENA y el

uso de VACIAal suprimir (POP) un elemento

no es necesaria porque esta implicito en

RECUPERA y en SUPRIME. Se añade

además la función TOPE.

Ing. Jorge A. Hernández P.:Pilas y colas

Ing. Jorge A. Hernández P.:Pilas y colas

El conjunto de operaciones para una pila es:

PUSHmeter en la pila

POPsacar de la pila

VACIAevaluar pila vacia

LLENAevaluar pila llena

TOPE devolver elemento en el tope, sin

sacarlo.

Ing. Jorge A. Hernández P.:Pilas y colas

Ing. Jorge A. Hernández P.:Pilas y colas

Estructuras de datos

Las aplicaciones de las pilas son muchas, basta decir que el propio procesador de la máquina funciona con una pila que ayuda en el control de la ejecución de los programas.

La recursividad no puede implementarse sin la ayuda de una pila y hay muchos ejemplos de procedimientos que son 100% recursivos. Es decir, algunos problemas no pueden implementarse de manera secuencial sin la ayuda de una pila.

Ing. Jorge A. Hernández P.:Pilas y colas

Ing. Jorge A. Hernández P.:Pilas y colas

Estructuras de datos

Un ejemplo sencillo lo constituye un simple analizador de formulas(requiere de notación prefija o postfija). Otro ejemplo todavía más simple lo constituye un checador de balanceo de parentesis para su posterior eliminación.

Para el checador de balanceo de parentesis se hace una inserción(PUSH) por cada parentesis que abre y un POP por cada parentesis que cierra. Si la expresión esta balanceada deberá resultar la pila vacía.

Ing. Jorge A. Hernández P.:Pilas y colas

(3)

En el caso de la recursividad, la pila sirve para guardar resultados parciales y las llamadas pendientes del procedimiento recursivo. Existe un teorema que prueba que todo procedimiento recursivo puede convertirse en uno secuencial por medio de una cola (Estudiar recursividad de cola o TAIL RECURSION).

Ing. Jorge A. Hernández P.:Pilas y colas

Ing. Jorge A. Hernández P.:Pilas y colas

Algoritmo para convertir una expresión infija a prefija por medio de una pila (notación polaca): 1.Inicializar la pila

2.Definir la prioridad del conjunto de operaciones

3.Mientras no ocurra error y no sea fin de la expresión infija haz

Si el carácter es:

1. PARENTESIS IZQUIERDO. Colocarlo en la pila

2. PARENTESIS DERECHO. Extraer y desplegar los valores hasta encontrar paréntesis izquierdo. Pero NO desplegarlo.

Ing. Jorge A. Hernández P.:Pilas y colas

Ing. Jorge A. Hernández P.:Pilas y colas

Estructuras de datos

3. UN OPERADOR.

• Si la pila esta vacía o el operador tiene más alta prioridad que el operador del tope de la pila insertar el operador en la pila.

• En caso contrario extraer y desplegar el elemento del tope de la pila y repetir la comparación con el nuevo tope. 4. OPERANDO. Desplegarlo.

4.Al final de la expresión extraer y desplegar los elementos de la pila hasta que se vacíe.

Estructuras de datos

pila desplegar car +/ abc-d*c c +/ abc-d* / +* abc-d d +* abc-* abc-d*c/+ Fin +(-abc c + abc-) + a + +(-+( +( vacia ab ab a a -b ( a Ejemplo, convertir la expresión a + (b – c) * d / c a notación polaca.

El resultado es abc-d*c/+, a la derecha se muestra el desarrollo de las operaciones.

(4)

1. Inicializar la pila 1.2. Repetir

o Tomar un carácter.

o Si el carácter es un operando colocarlo en la pila.

o Si el carácter es un operador entonces tomar los dos valores del tope de la pila, aplicar el operador y colocar el resultado en el nuevo tope de la pila. (Se produce un error en caso de no tener los 2 valores)

Hasta encontrar el fin de la expresión.

Ing. Jorge A. Hernández P.:Pilas y colas

Ing. Jorge A. Hernández P.:Pilas y colas Ing. Jorge A. Hernández P.:Ing. Jorge A. Hernández P.:Pilas y colasPilas y colas

15 + 5, 10 / 5, 20, 2 c 5, 5, 4 d 5, 20 * 5 a 5, 5 5, 7, 2 5, 7 pila -c b car

Ejemplo, evaluar la expresión abc-d*c/+, si los valores de a, b, c, d son:

a = 5, b = 7; c = 2, d = 4;

Estructuras de datos

Otro tipo importante de lista lo constituyen las colas o listas FIFO(First In First Out) o PEPS(Primero en Entrar Primero en Salir). A diferencia de las pilas, las colas insertan elementos por un extremo llamado cola o fin de la lista y los eliminan por el inicio o cabeza de la cola.

Ing. Jorge A. Hernández P.:Pilas y colas

Ing. Jorge A. Hernández P.:Pilas y colas

Estructuras de datos

Las operaciones básicas de una cola o fila son

FORMAR, SALIR, VACIA, LLENA,

PRIMEROy ULTIMO.

FORMAR(x, C) inserta el elemento x en el

inicio de la cola C.

SALIR(C) devuelve el ultimo elemento de C

y lo borra de la lista.

Ing. Jorge A. Hernández P.:Pilas y colas

(5)

La implementación de colas es ligeramente más compleja que la de pilas. Se debe tener una implementación con apuntadores en donde existen tanto la marca del inicio como la del fin de la cola.

Una implementación con arreglos implica recorrer los elementos para insertarlos o para suprimirlos.

Ing. Jorge A. Hernández P.:Pilas y colas

Ing. Jorge A. Hernández P.:Pilas y colas Ing. Jorge A. Hernández P.:Ing. Jorge A. Hernández P.:Modelo de listasModelo de listas

0 1 2 n

a b c

0 1 2 n

a b c d

3

El elemento “d” se formo en la cola, de acuerdo con la definición debe ir despues del último que es “c”.

FORMAR

Estructuras de datos

0 1 2 n a b c 0 1 n b c

El elemento “a” salio de la cola, de acuerdo con la definición ahora el primero es “b”.

SALIR

Estructuras de datos

void FORMAR(ELEMENTO x, LISTA C){ if (!LLENA(C))

INSERTA(x, FIN(C), C); else{

fprintf(stderror, “Pila llena\n”); exit(1); } } ELEMENTO SALIR(LISTA C){ ELEMENTO x = RECUPERA(PRIMERO(C), C); SUPRIME(PRIMERO(C), C); return x; }

Figure

Updating...

References

Related subjects :