revista
DESCRIPTION
Analisis de AlgoritmoTRANSCRIPT
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.
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.
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
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
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
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
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; }
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--]; }
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
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
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; }
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
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
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
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
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
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
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
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
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
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
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
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
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.
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.