revista

25
Publicación Online V-17380456-0 1 | Año 1 | Edición 01 | Noviembre 2010 colas PILAS Implementación mediante array y mediante lista enlazada Colas Lineales, circulares, dobles y de prioridad.

Upload: mariana-mavare

Post on 01-Mar-2016

213 views

Category:

Documents


0 download

DESCRIPTION

Analisis de Algoritmo

TRANSCRIPT

Page 1: Revista

Publicación Online

V-17380456-0

1

| A

ño

1 |

Ed

ició

n 0

1 | N

ovie

mb

re 2

01

0

|colas

|PILAS Implementación mediante

array y mediante lista

enlazada

Colas Lineales,

circulares, dobles

y de prioridad.

Page 2: Revista

2 Mariana Mavare

13| |colas

03 || |PILAS

Es una lista ordinal o estructura de

datos en la que el modo de acceso

a sus elementos es de tipo LIFO (del

inglés Last In First Out, último en

entrar, primero en salir) que permite

almacenar y recuperar datos.

Es una estructura de datos,

caracterizada por ser una secuencia

de elementos en la que la

operación de inserción push se

realiza por un extremo y la

operación de extracción pop por el

otro. También se le llama estructura

FIFO (del inglés First In First Out),

debido a que el primer elemento en

entrar será también el primero en

salir

Casa de Estudio:

Universidad Fermín Toro

Facultad:

Ingeniería

Rectora:

Dra. Mayra Guijarro

Carrera:

Ingeniería Computación

Directora de Escuela:

Ing. Yaneth Margarita Castillo

Cátedra:

Análisis de Algoritmo

Prof.:

Ing. Elvia Sánchez

Alumna:

Mariana Mavare

Los datos físicos se encuentran

asociados a un mecanismo de datos,

que controla la forma en la que la

información puede ser accedida por

los programas, existen

principalmente cuatro tipos de estos

mecanismos: Las colas, pilas, listas y

árboles, cada uno de los métodos

mencionados proporciona una

solución a cada tipo de problema.

Cada uno un dispositivo que realiza

una operación de almacenamiento y

de recuperación de los datos dados.

Todos ellos tienen dos elementos

en común, como es el

almacenamiento de datos y la

recuperación de datos.

En esta primera edición de

COPITAS profundizaremos en las

Colas y las Pilas.

Page 3: Revista

Es una estructura de datos de acceso restrictivo a sus elementos. Se puede

entender como una pila de libros que se amontonan de abajo hacia arriba.

En principio no hay libros; después ponemos uno, y otro encima de éste, y

así sucesivamente.

Posteriormente los solemos retirar empezando desde la cima de la pila de

libros, es decir, desde el último que pusimos, y terminaríamos por retirar el

primero que pusimos, posiblemente ya cubierto de polvo.

3

Page 4: Revista

Las pilas ofrecen dos

operaciones fundamentales, que

son apilar y desapilar sobre la

cima. El uso que se les de a las

pilas es independiente de su

implementación interna. Es decir,

se hace un encapsulamiento. Por

eso se considera a la pila como un

tipo abstracto de datos.

Es una estructra de tipo LIFO

(Last In First Out), es decir, último

en entrar, primero en salir.

4

Page 5: Revista

Esta implementación es estática, es

decir, da un tamaño máximo fijo a la

pila, y si se sobrepasa dicho límite se

produce un error. La comprobación

de apilado en una pila llena o

desapilado en una pila vacía no se

han hecho, pero sí las funciones de

comprobación, que el lector puede

modificar según las necesidades de

su programa.

5

I m p l e m e n t a c i ó n m e d i a n t e

a r r a y

Page 6: Revista

I m p l e m e n t a c i ó n

m e d i a n t e a r r a y

Procedimiento de Creación:

void crear struct tpila *pila) { pila->cima = -1; }

Declaración:

struct tpila { int cima; Int elementos[MAX_PILA]; };

Nota: MAX_PILA debe ser mayor

o igual que 1.

Procedimiento de Pila Vacía:

int vacia(struct tpila *pila) { return (pila->cima == -1); }

6

Page 7: Revista

7

I m p l e m e n t a c i ó n m e d i a n t e

a r r a y

Procedimiento de Pila Llena :

int llena(struct tpila *pila) { return (pila->cima == MAX_PILA); }

Procedimiento de Apilado:

void apilar(struct tpila *pila, int elem) { pila->elementos[++pila->cima] = elem; }

Page 8: Revista

8

I m p l e m e n t a c i ó n m e d i a n t e a r r a y

Procedimiento de Desapilado:

void desapilar(struct tpila *pila, int *elem) { *elem = pila->elementos[pila->cima--]; }

Page 9: Revista

Para hacer la implementación

se utiliza una lista con cabecera

ficticia (ver apartado de listas).

Dado el carácter dinámico de

esta implementación no existe

una función que determine si la

pila está llena. Si el usuario lo

desea puede implementar un

análisis del código devuelto por

la función de asignación de

memoria.

9

I m p l e m e n t a c i ó n m e d i a n t e L i s t a E n l a z a d a

Page 10: Revista

10

Declaración:

struct tpila { int clave; struct tpila *sig; }

Procedimiento de Creación:

void crear(struct tpila **pila) { *pila = (struct tpila *) malloc(sizeof(struct tpila)); (*pila)->sig = NULL; }

Procedimiento de Pila Vacía:

int vacia(struct tpila *pila) { return (pila->sig == NULL); }

I m p l e m e n t a c i ó n m e d i a n t e L i s t a E n l a z a d a

Page 11: Revista

11

I m p l e m e n t a c i ó n m e d i a n t e L i s t a E n l a z a d a

Procedimiento de Apilado:

void apilar(struct tpila *pila, int elem) { struct tpila *nuevo; nuevo = (struct tpila *) malloc(sizeof(struct tpila)); nuevo->clave = elem; nuevo->sig = pila->sig; pila->sig = nuevo; }

Page 12: Revista

12

Procedimiento de Desapilado:

void desapilar(struct tpila *pila, int *elem) { struct tpila *aux; aux = pila->sig; *elem = aux->clave; pila->sig = aux->sig; free(aux); }

I m p l e m e n t a c i ó n m e d i a n t e L i s t a E n l a z a d a

Page 13: Revista

Es una estructura de datos, caracterizada por ser una secuencia de

elementos en la que la operación de inserción push se realiza por un

extremo y la operación de extracción pop por el otro. También se le

llama estructura FIFO (del inglés First In First Out), debido a que el primer

elemento en entrar será también el primero en salir.

13

Page 14: Revista

El tipo cola representa la idea que

tenemos de cola en la vida real. La

cola para subir al autobús está

compuesta de elementos

(personas), que dispone de dos

extremos comienzo y fin. Por el

comienzo se extraerá un elemento

cuando haya comprado el billete

para su viaje, y si llega una nueva

persona con intención de usar el

autobús, tendrá que colocarse al

final y esperar que todos los

elementos situados antes que él

abandonen la cola.

14

Page 15: Revista

En ellas, los elementos se atienden

en el orden indicado por una

prioridad asociada a cada uno. Si

varios elementos tienen la misma

prioridad, se atenderán de modo

convencional según la posición que

ocupen.

15

C o l a s d e p r i o r i d a d

Page 16: Revista

Hay 2 formas de implementación:

además los datos no son datos sino

son resultados que se representan a

través del tiempo. puede ser alguien o

algo.

1. Añadir un campo a cada nodo con

su prioridad. Resulta conveniente

mantener la cola ordenada por orden

de prioridad.

2. Crear tantas colas como prioridades

haya, y almacenar cada elemento en

su cola.

16

C o l a s d e p r i o r i d a d

Page 17: Revista

La cola lineal es un tipo de

almacenamiento creado por el

usuario que trabaja bajo la técnica

FIFO (primero en entrar primero en

salir). Las colas lineales se

representan gráficamente de la

siguiente manera: COLA [][][][][][]

Las operaciones que podemos

realizar en una cola son las de

inicialización, inserción y

extracción. Los algoritmos para

llevar a cabo dichas operaciones se

especifican más adelante.

17

C o l a s L i n e a l e s

Page 18: Revista

Las condiciones a considerar en

el tratamiento de colas lineales son

las siguientes:

Overflow (cola llena), cuando se

realice una inserción.

Underflow(cola vacía), cuando se

requiera de una extracción en la

cola.

Vacío.

18

C o l a s L i n e a l e s

Page 19: Revista

19

Algoritmo de Inicialización:

F < -- 1 A <-- 0

Algoritmo para Insertar:

Si A=máximo entonces mensaje (overflow) en caso contrario A<-- A+1 cola[A]<-- valor

C o l a s L i n e a l e s

Page 20: Revista

20

Algoritmo para Extraer:

Si A<F entonces mensaje (underflow) en caso contrario F <-- F+1 x <-- cola[F]

C o l a s L i n e a l e s

Page 21: Revista

Es una estructura de datos en la que

los elementos están de forma circular

y cada elemento tiene un sucesor y un

predecesor. Los elementos pueden

consultarse, añadirse y eliminarse

únicamente desde la cabeza del anillo

que es una posición distinguida.

Existen dos operaciones de

rotaciones, una en cada sentido, de

manera que la cabeza del anillo pasa

a ser el elemento sucesor, o el

predecesor, respectivamente, de la

cabeza actual.

21

C o l a s C i r c u l a r e s

Page 22: Revista

22

Algoritmo de Inicialización:

F <-- 0 A <-- 0

C o l a s C i r c u l a r e s

Algoritmo para Insertar:

Si (F+1=A) ó (F=1 y A=máximo) entonces mensaje (overflow) en caso contrario inicio si A=máximo entonces A<--1 cola[A]<-- valor en caso contrario A <--A+1 cola[A]<-- valor si F=0 entonces F <-- 1 fin

Page 23: Revista

23

C o l a s C i r c u l a r e s

Algoritmo para Extraer:

Si F=0 entonces mensaje (underflow) en caso contrario x <-- cola[F] si F=A entonces F <-- 0 A<-- 0 en caso contrario si F=máximo entonces F <--1 en caso contrario F <-- F+1

Page 24: Revista

24

C o l a s D o b l e s

Es una estructura de datos en la

cual las operaciones de agregar y

retirar se practican por ambos lados y

por la forma en que se realizan las

operaciones, puede comportarse

como pila o como cola.

La forma de operar de una cola

doble es así: se tiene un nuevo

elemento que desea agregarse a la

cola, éste podría hacerlo de tal forma

que ocupe la primera posición o la

última, los elementos que se

encuentran al principio y al final de la

cola pueden retirarse.

Page 25: Revista

25

C o l a s D o b l e s

Para indicar uno de los extremos de

la cola doble por donde se agregarán

o retirarán elementos, se utiliza un

apuntador (U) y para el otro extremo

se utiliza un apuntador (P). Para

delimitar el área de implementación

se tienen los apuntadores MAX y MIN,

de idéntica forma como la pila y la

cola para detectar la cola doble llena.

La cola doble estará vacía cuando P =

Vacío.