Anda di halaman 1dari 19

1

ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

DRA.ROSA MARIA MICHEL NAVA

UNIDAD 3.
ESTRUCTURAS LINEALES
COMPETENCIA ESPECIFICA DE LA UNIDAD.

Conocer, identificar y aplicar las estructuras


lineales en la solucin de problemas del mundo
real.

3.1 LISTAS
Una lista es una coleccin de elementos llamados generalmente nodos. El orden entre los nodos se
establece por medio de enlaces o referencias a otros nodos.
Su representacin es la siguiente:
NODO
Informacin

Enlace

Ejemplo:
p
Garca

Prez

Lpez

Santos

null

3.1.1 OPERACIONES BASICAS CON LISTAS


Las operaciones elementales que pueden realizarse en una lista enlazada son:
Insercin de un elemento: al inicio, al final de la lista, o, antes / despus de otro nodo dado como
referencia.
Borrado de un elemento: eliminar el primer nodo, el ltimo nodo, un nodo con informacin X, el nodo
anterior / posterior al nodo con informacin X.
Recorrido de la lista (consulta general).
Bsqueda de un elemento (consulta individual)
3.1.2 TIPOS DE LISTAS
Existen tres tipos de listas:
Simples.
Dobles.
Circulares

2
ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

DRA.ROSA MARIA MICHEL NAVA

3.1.3 LISTAS SIMPLEMENTE ENLAZADAS


Su representacin es la siguiente:
p
Garca

Prez

Lpez

Las operaciones realizadas con estas listas se muestran a continuacin:


Hacer nuevo=inicio=p=null;
Insercin al final de la lista
CreaFinal
{
Crea nodo (nuevo);
Leer dato;
Hacer nuevo.informacin=dato;
Hacer nuevo.enlace = null;
Si (inicio=null) entonces { inicio=nuevo; }
Sino { p.enlace=nuevo; }
Hacer p=nuevo;
}
Consultar
Consultar
{
Hacer q=inicio;
Repetir Mientras(q!=null)
{
Escribir q.informacin;
Hacer q=q.enlace;
}
}
Insercin al inicio de la lista
CreaInicio
{
Crea nodo (nuevo);
Leer dato;
Hacer nuevo.informacin=dato;
Si (inicio=null) entonces { nuevo.enlace=null; }
Sino { nuevo.enlace=p; }
Hacer p=nuevo;
Hacer inicio=nuevo;
}

Santos

null

3
ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

DRA.ROSA MARIA MICHEL NAVA

Borrado de un elemento
Borrar
{
Si (inicio=null) entonces escribir Lista vaca;
Sino
{
Leer dato a eliminar;
Buscar (dato);
Si (ban=1)
{
Si (n=inicio) entonces { inicio=inicio.enlace; }
Sino { q.enlace=n.enlace; }
Si (n.enlace=null) entonces {p=q;}
Liberar (n);
}
}
}
Buscar
Buscar (dato)
{
Hacer n=inicio y ban=0;
Repetir Mientras (n!=null y ban=0)
{
Si (n.informacin=dato) entonces hacer ban=1;
Sino
{
Hacer q=n y n=n.enlace;
}
}
Si (ban=0) entonces escribir "Este dato no existe";
}
3.1.4 LISTAS DOBLEMENTE ENLAZADAS
Su representacin es la siguiente:
Izquierda

NODO
Informacin

Derecha

Al tener doble enlace, la lista puede recorrerse tanto del inicio al final (tomando el enlace derecho), como
en el sentido opuesto (tomando el enlace izquierdo).
Por ejemplo:

4
ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

DRA.ROSA MARIA MICHEL NAVA

p
null Garca

p
Prez

Lpez

Insercin por el inicio o por el final


Insertar
{
Crear nodo (nuevo);
Leer dato;
Hacer nuevo.informacin=dato;
Hacer nuevo.izq=null;
Hacer nuevo.der=null;
Si (inicio=null) entonces {inicio=nuevo; y final=nuevo;}\\
Sino
{
Preguntar Por I=inicio o por F=final?";
Si (respuesta=' I ') entonces
{
Hacer inicio.izq=nuevo; nuevo.der=inicio; inicio=nuevo;
}
Sino
{
Hacer final.der=nuevo; nuevo.izq=final; final=nuevo;
}
}
}
Consultar
Consulta
{
Preguntar Por dnde desea consultar? [I=inicio/F=final]: ;
Si (respuesta=' I ') entonces p=inicio;
Sino p=final;
Repetir mientras (p!=null)
{
Imprimir p.informacin;
Si (respuesta='I') entonces { p=p.der; }
Sino { p=p.izq; }
}
}

Santos null

5
ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

DRA.ROSA MARIA MICHEL NAVA

Borrado de un elemento en una lista doblemente enlazada


Borrar
{
Si (inicio=null) entonces escribir "Lista vaca";
Sino
{
Leer dato a eliminar;
Buscar (dato);
Si (ban=1) entonces
{
Si (inicio=final) entonces {inicio=null; y final=null;}
Sino
Si (n=inicio) entonces
{
Hacer inicio=inicio.der; inicio.izq=null;
}
Sino
Si (n=final) entonces
{
Hacer final=final.izq; final.der=null;
}
Sino
{
Hacer p=n.izq; p.der=n.der; p=n.der; p.izq=n.izq; p=null;
}
Liberar (n);
}
}
}
Buscar
Buscar (dato)
{
Hacer n=inicio y ban=0;
Repetir mientras (n!=null y ban=0)
{
Si (n.informacin=dato) entonces ban=1;
Sino n=n.der;
}
Si (ban=0) entonces escribir "Esta clave no existe";
}

6
ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

DRA.ROSA MARIA MICHEL NAVA

3.1.5 LISTAS CIRCULARES


Las listas circulares tienen la caracterstica de que el ltimo elemento de la misma apunta al primero. Su
representacin grfica es la siguiente:
p
Garca

Prez

Lpez

Santos

Las operaciones en listas circulares son similares a las operaciones en listas lineales.
En el caso de la operacin de recorrido de listas circulares, es necesario aclarar que se debe considerar
algn criterio para detectar cundo se han visitado todos los nodos para evitar caer en ciclos infinitos. Una
posible solucin consiste en usar un nodo extra, llamado nodo de cabecera, para indicar el inicio de la
lista. Este nodo contendr informacin especial, de tal manera que se distinga de los dems y as podr
hacer referencia al principio de la lista.
3.1.6 APLICACIONES
Dos de las aplicaciones ms conocidas de las listas son:
Representacin de polinomios
Resolucin de colisiones (hash)
En general, puede decirse que las listas son muy tiles para aquellas aplicaciones en las cuales se necesite
dinamismo en el crecimiento y reduccin de las estructuras de datos.
Representacin de polinomios
Las listas se utilizan para almacenar los coeficientes diferentes de cero del polinomio, junto al exponente.
As, por ejemplo, dado el polinomio:
P(x) = 3X4 + 0.5X3 + 6X - 4
su representacin mediante lista, sera como sigue:
p
3

0.5

Campo
Campo
Coeficiente Exponente

-4

null

7
ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

DRA.ROSA MARIA MICHEL NAVA

Solucin de colisiones (hash)


Se refiere al mtodo de bsqueda por transformacin de claves, ya que se utilizan listas para resolver
colisiones (mtodo de encadenamiento).
La funcin hash convierte una clave dada en una direccin (ndice) dentro de un arreglo.
Una colisin es la asignacin de una misma direccin a dos o ms claves distintas.
3.2 PILAS
Una pila es una lista de elementos a la cual se puede insertar o eliminar elementos slo por uno de los
extremos (llamado tope o cima).
En consecuencia, los elementos de una pila sern eliminados en orden inverso al que se insertaron. Es
decir, el ltimo elemento que se mete en la pila, es el primero que se saca. A esta estructura se le conoce
tambin como estructura LIFO (Last-In, First-Out: Ultimo en Entrar, Primero en Salir).
3.2.1 REPRESENTACION EN MEMORIA ESTATICA Y DINAMICA
Las pilas (tambin conocidas como Stacks) pueden representarse mediante el uso de arreglos o listas
enlazadas, aunque lo ms comn es usar arreglos. Por lo tanto, deber definirse el tamao mximo de la
pila y una variable auxiliar que se denominar TOPE, la cual ser un apuntador al ltimo elemento
insertado en la pila.
PILA
A
1

B
2

C
3

...

MAX

TOPE

PILA
MAX

:
TOPE

3
2
1

C
B
A

3.2.2 OPERACIONES BASICAS CON PILAS


Las operaciones elementales que pueden realizarse en una pila son:
Poner un elemento (Push)
Quitar un elemento (Pop)

8
ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

DRA.ROSA MARIA MICHEL NAVA

Poner un elemento
Aqu es muy importante verificar si la pila ya est llena, porque si ste es el caso, y se intenta insertar un
elemento ms, se tendra el error conocido como desbordamiento (overflow).
Algoritmo Pone
Si (tope < max) entonces
{
Hacer tope = tope + 1;
Hacer pila [tope] = dato;
}
Si no escribir Desbordamiento
Quitar un elemento
Otro error que puede presentarse al trabajar con pilas, es tratar de eliminar un elemento de una pila vaca.
Este tipo de error se conoce con el nombre de subdesbordamiento (underflow).
Algoritmo Quita
Si (tope > 0) entonces
{
Hacer dato = pila [tope];
Hacer tope = tope -1;
}
Si no escribir Subdesbordamiento
Representacin de pilas a travs de listas enlazadas
Hacer tope=nuevo=p=null;
Insertar
Insertar
{
Crear nodo (nuevo);
Leer dato;
Hacer nuevo.informacin=dato;
Si (tope=null) entonces nuevo.enlace=null;
Sino nuevo.enlace=tope;
Hacer tope=nuevo;
}

9
ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

DRA.ROSA MARIA MICHEL NAVA

Eliminar
Eliminar
{
Si (tope=null) entonces escribir "Pila vaca";
Sino
{
Hacer p=tope; tope=tope.enlace; y liberar (p);
}
}
Consultar
Consulta
{
Si (tope!=null) entonces
{
Hacer p=tope;
Repetir
{
Imprimir p.informacin;
Hacer p=p.enlace;
}Mientras (p!=null);
}
Sino escribir "Pila vaca";
}
3.2.3 APLICACIONES
Algunas aplicaciones usando pilas son las siguientes:
Llamadas a subprogramas. Cuando se tiene un programa que llama a un subprograma, internamente
se usan pilas para guardar el estado de las variables y la direccin del programa en el momento que se
hace la llamada, para que cuando termine la ejecucin del subprograma, los valores almacenados en la
pila puedan recuperarse para continuar con la ejecucin del programa en el punto en el cual fue
interrumpido.
Por ejemplo, se tiene un programa principal (PP) que llama a los subprogramas UNO y DOS. A su vez,
el subprograma DOS llama al subprograma TRES. Cada vez que la ejecucin de uno de los
subprogramas concluye, se regresa el control al nivel inmediato superior.
PP
UNO

DOS
TRES

10
ESTRUCTURA DE DATOS (ING.)

3
2
1

PP
TOPE = 1

UNIDAD 3. ESTRUCTURAS LINEALES

3
2
1
TOPE = 0

3
2
1

PP

TOPE = 1

3
2 DOS
1 PP
TOPE = 2

DRA.ROSA MARIA MICHEL NAVA

3
2
1

PP

TOPE = 1

3
2
1
TOPE = 0

Recursin. Con cada llamada recursiva se crea una copia de todas las variables y constantes que estn
vigentes, y se guarda esa copia en la pila, para usarse posteriormente una vez terminado el proceso
recursivo.
Tratamiento de expresiones aritmticas. Convertir expresiones en notacin infija (el operador est
entre los operandos, por ejemplo: A + B) a su equivalente en notacin postfija o prefija (el operador
est despus o antes de los operandos, respectivamente; por ejemplo: AB+ y +AB).
Ordenacin. Otra aplicacin de las pilas puede verse en el mtodo de ordenacin rpida.
3.2.4 NOTACION INFIJA Y POSTFIJA
Notacion infija, prefija y postfija en expresiones
Dada la expresin A+ B se dice que est en notacin infija, y su nombre se debe a que el operador ( + )
est entre los operandos (A y B).
Dada la expresin AB+ se dice que est en notacin postfija, y su nombre se debe a que el operador
( + ) est despus de los operandos (A y B).
Dada la expresin +AB se dice que est en notacin prefija, y su nombre se debe a que el operador
( + ) est antes que los operandos (A y B).
La ventaja de usar expresiones en notacin polaca postfija o prefija radica en que no son necesarios los
parntesis para indicar orden de operacin, ya que ste queda establecido por la ubicacin de los
operadores con respecto a los operandos.
Para convertir una expresin dada en notacin infija a una notacin postfija (o prefija), debern
establecerse previamente ciertas condiciones:
Solamente se manejarn los siguientes operadores (estn dados ordenadamente de mayor a menor
segn su prioridad de ejecucin):
^
(potencia)
* / (multiplicacin y divisin)
+ - (suma y resta)
Los operadores de ms alta prioridad se ejecutan primero.
Si hubiera en una expresin dos o ms operadores de igual prioridad, entonces se procesarn de
izquierda a derecha.
Las subexpresiones parentizadas tendrn ms prioridad que cualquier operador (aunque los parntesis
como operadores, para efectos del algoritmo tienen prioridad cero).
Como ejemplo, se presenta paso a paso, la conversin de una expresin infija a notacin polaca postfija
utilizando el siguiente algoritmo:

11
ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

DRA.ROSA MARIA MICHEL NAVA

Algoritmo para convertir una expresion infija a postfija


// Este algoritmo traduce una expresin infija EI a postfija EPOS, haciendo uso de una pila. PILA, TOPE
es una variable de tipo entero
TOPE = 0;
Mientras EI != NULO
{
Tomar el smbolo ms a la izquierda de EI, avanzando con la expresin.
Si el smbolo es parntesis izquierdo {
TOPE=TOPE + 1;
PILA[TOPE] = smbolo;
}
Si no {
Si smbolo es parntesis derecho {
Mientras PILA[TOPE] != parntesis izquierdo {
Agregar PILA[TOPE] a EPOS;
TOPE=TOPE - 1;
}
Sacamos el parntesis izquierdo de PILA y no lo agregamos a EPOS
TOPE = TOPE -1;
}
Si no {
Si smbolo es un operando
Agregar smbolo a EPOS
Si no {
// Es un operador
Mientras TOPE > 0 y la prioridad del operador sea <= que la prioridad del operador
que est en la cima de PILA
{
Agregar PILA[TOPE] a EPOS;
TOPE = TOPE - 1;
}
TOPE = TOPE + 1;
PILA[TOPE] = smbolo
}
}
}
}
Mientras TOPE > 0 {
Agregar PILA[TOPE] a EPOS;
TOPE = TOPE - 1;
}
Escribir EPOS
FIN
3.2.5 RECURSIVIDAD CON AYUDA DE PILAS
La mecnica que sigue la recursin cuando se invoca a un mtodo es la siguiente:

12
ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

DRA.ROSA MARIA MICHEL NAVA

Se enva un mensaje a un objeto receptor; el emisor del mensaje detiene la ejecucin.


El receptor del mensaje los recibe y da lugar a que se ejecute el mtodo correcto.
El receptor crea las variables locales del mtodo (parmetros y dems variables locales).
Los parmetros reciben los valores de los argumentos.
Se ejecuta el mtodo.
El mtodo finaliza y se destruyen las variables locales del mtodo; los posibles valores
proporcionados sustituyen a la expresin que haya enviado el mensaje.
El emisor del mensaje reanuda su ejecucin.

Para que esto funcione, cuando se invoca un mtodo, el sistema reserva un nuevo segmento de memoria
para que el mtodo almacene lo siguiente:

Las variables locales que crea el mtodo.


Los parmetros que utiliza.
La posicin del emisor del mensaje dentro del cdigo.

Estos segmentos de memoria se denominan registros de activacin. Un registro de activacin es un


bloque de memoria que contiene los parmetros y variables locales de un mtodo, junto con la direccin
de retorno de quien invoque al mtodo.
Para examinar la mecnica que sigue la recursin, se analizarn los dos ejemplos de recursin directa
(antes mencionados):
El factorial de un nmero
Recordando las siguientes frmulas:
n! = 1
n! = n * ( n - 1) * (n - 2 ) * ... * 1

o bien

n * ( n - 1 )!

Si n = 0
Si n > 0

Como ejemplo se obtiene el factorial del nmero 3:


3!=3*2!
2!=2*1!
1!=1*0!
0!=1
1!=1*0!=1*1=1
2!=2*1!=2*1=2
3!=3*2!=3*2=6
El algoritmo recursivo del clculo del factorial es el siguiente:
Factorial(N)
{
Si N=0 entonces Hacer Factorial = 1
Si no Hacer Factorial = N * Factorial ( N 1)
}

{Estado bsico}
{Llamada recursiva}

13
ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

DRA.ROSA MARIA MICHEL NAVA

El procedimiento (convertido en un mtodo de lenguaje Java) para obtener el factorial de un nmero es el


siguiente:
public static long factorial(int n)
{
long res;
if(n = = 0) return 1;
// Estado bsico
else
{
res = n * factorial(n-1);
return res;
}
}
Simulando el uso de la pila para este algoritmo, se tiene:
Paso

0
1
2
3
4
5
6
7

3
3
2
1
0
1
2
3

Pila
3*,
3*, 2*,
3*, 2*, 1*,
3*, 2*, 1*,
3*, 2*,
3*,

res

1
1*1=1
2*1=2
3*2=6

La secuencia de Fibonacci
Recordando:
n
Fibonacci ( n ) = Fibonacci ( n - 1) + Fibonacci ( n - 2 )
Entonces:
Fibonacci ( 0 ) = 0
Fibonacci ( 1 ) = 1
Fibonacci ( 2 ) = Fibonacci ( 1 ) + Fibonacci ( 0 ) = 1 + 0 = 1
Fibonacci ( 3 ) = Fibonacci ( 2 ) + Fibonacci ( 1 ) = 1 + 1 = 2
Fibonacci ( 4 ) = Fibonacci ( 3 ) + Fibonacci ( 2 ) = 2 + 1 = 3
As para calcular el Fibonacci del nmero 4, se tendra:

Si n = 0 n = 1
Si n > 1

14
ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

DRA.ROSA MARIA MICHEL NAVA

Fibonacci ( 4 ) = Fibonacci ( 3 ) + Fibonacci ( 2 )


Fibonacci ( 3 ) = Fibonacci ( 2 ) + Fibonacci ( 1 )
Fibonacci ( 2 ) = Fibonacci ( 1 ) + Fibonacci ( 0 )
Fibonacci ( 1 ) = 1
Fibonacci ( 0 ) = 0
Fibonacci ( 2 ) = 1 + 0 = 1
Fibonacci ( 3 ) = 1 + 1 = 2
Fibonacci ( 4 ) = 2 + 1 = 3
El algoritmo recursivo para calcular el fibonacci de un nmero es el siguiente:
Fibonacci(N)
{
Si (N=0 N=1) entonces Fibonacci = N
Si no Hacer Fibonacci = Fibonacci ( N 1) + Fibonacci ( N 2)
}

{Estado bsico}
{Llamada recursiva}

Y el procedimiento en Java, queda de la siguiente manera:


public static long fibonacci (int n)
{
long f;
if(n <= 1) return n;
// Estado bsico
else
{
f = fibonacci (n-1) + fibonacci (n-2);
return f;
}
}
Por ejemplo: Para calcular el fibonacci del nmero 4.
Paso

0
1
2
3
4
5
6
7
8
9

4
4
3
2
1
0
1
2
1
0

Pila
fibo (2)+,
fibo (2)+, fibo (1)+,
fibo (2)+, fibo( 1)+, fibo (0)+,
fibo (2)+, fibo( 1)+, fibo (0)+,
fibo (2)+, fibo (1)+,
fibo (2)+,
fibo (0)+,
fibo (0)+,

1
1+0=1
1+1=2
2+
2+1=3
3+0=3

Tambin se puede aplicar la recursin a la multiplicacin de nmeros naturales, en bsquedas binarias, en


el problema de las torres de Hanoi, en recorridos de rboles binarios, en ordenamientos, en clculos de
intereses bancarios, etc.

15
ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

DRA.ROSA MARIA MICHEL NAVA

3.3 COLAS
Una cola es una lista de elementos en la que stos se introducen por un extremo y se eliminan por otro.
Los elementos se eliminan en el mismo orden en el que se insertaron. Por lo tanto, el primer elemento que
entra a la cola ser el primero en salir. Por sto tambin se les conoce como Estructuras FIFO (First-In,
First-Out: Primero en Entrar, Primero en Salir). Como ejemplo de estas estructuras, se puede mencionar la
cola para el telfono, la cola en el banco, etc.
3.3.1 REPRESENTACION EN MEMORIA ESTATICA Y DINAMICA
Las colas pueden representarse por medio de arreglos o listas enlazadas. Debe definirse el tamao mximo
de la cola y dos variables auxiliares, una de ellas para que guarde la posicin del primer elemento de la
cola (FRENTE) y otra para que guarde la posicin del ltimo elemento de la cola (FINAL).
COLA
A
1

B
2

FRENTE

C
3

...

MAX

FINAL

COLA
FRENTE
FINAL

1
2
3
:
:

A
B
C

MAX

3.3.2 OPERACIONES BASICAS CON COLAS


Las operaciones que pueden realizarse en una cola son:
Insertar un elemento.
Eliminar un elemento.
3.3.3 TIPOS DE COLAS: COLA SIMPLE, COLA CIRCULAR Y COLAS DOBLES
COLA SIMPLE
Insertar un elemento en una cola de prioridades
Si (final < max) entonces
{
Hacer final = final + 1;
Hacer cola[final] = dato;
Si (final = 1) entonces frente = 1;
}
Si no, escribir No hay espacio libre

16
ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

Eliminar un elemento en una cola de prioridades


Si (frente != 0) entonces
{
Hacer cola [frente]=0;
Si (frente = final) entonces //Esto es cuando hay un solo elemento
{
Hacer frente=0; y final =0;
}
Si no entonces frente = frente + 1;
}
Si no escribir No hay datos
Representacin de colas a travs de listas enlazadas
Hacer frente=final=nuevo=p=null;
Insertar en una cola
Insertar
{
Crear nodo (nuevo);
Leer dato;
Hacer nuevo.informacin=dato;
Hacer nuevo.enlace=null;
Si (frente=null) entonces frente=final=nuevo;
Sino
{
Hacer final.enlace=nuevo; y final=nuevo;
}
}
Eliminar
Eliminar
{
Si (frente=null) entonces escribir Cola vaca";
Sino
{
Hacer p=frente; frente=p.enlace; y liberar (p);
Si (frente=null) entonces final=null;
}
}

DRA.ROSA MARIA MICHEL NAVA

17
ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

DRA.ROSA MARIA MICHEL NAVA

Consultar
Consulta
{
Si (frente!=null) entonces
{
Hacer p=frente;
Repetir
{
Imprimir p.informacin;
Hacer p=p.enlace;
}Mientras (p!=null);
}
Sino escribir "Cola vaca";
}
COLA CIRCULAR
Para hacer un uso ms eficiente de la memoria disponible, se trata a la cola como a una estructura circular.
Es decir, el elemento anterior al primero, es el ltimo.
COLA CIRCULAR

A
2

B
3

C
4

D
5

E
6

F
7

G
8

FRENTE

I
1

A
2

H
FINAL

B
3

COLA CIRCULAR
C
D
E
F
4
5
6
7

FINAL FRENTE

Agregar un elemento a una cola circular


Si ((final = max y frente=1) o (final+1=frente))
entonces escribir No hay espacio
Si no
{
Si (final = max) entonces final=1;
Si no entonces final = final + 1;
Hacer cola_c[ final] = dato;
Si (frente = 0) entonces frente=1;
}

G
8

H
9

18
ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

DRA.ROSA MARIA MICHEL NAVA

Eliminar un elemento de una cola circular


Si (frente = 0) //Verifica si la cola est vaca
entonces escribir No hay datos
Si no
{
Hacer cola_c [ frente]=0;
Si (frente = final) entonces //Si hay slo un elemento
{
Hacer frente=0 y final=0;
}
Si no
{
Si (frente = max) entonces frente =1;
Si no frente = frente + 1;
}
}
COLAS DOBLES
Una doble cola o bicola es una generalizacin de una estructura de cola simple. En una doble cola, los
elementos pueden ser insertados o eliminados por cualquiera de los extremos. Es decir, se pueden insertar
y eliminar valores tanto por el FRENTE como por el FINAL de la cola. Una doble cola se representa
como se muestra a continuacin:
DOBLE COLA
FRENTE
FINAL
A
B
C
D
E
F
G
H
1
2
3
4
5
6
7 8
MAX
Las dos flechas en cada extremo indican que pueden ejecutarse las operaciones de insercin y eliminacin.
Existen dos variantes de las dobles colas:

Doble cola con entrada restringida.


Doble cola con salida restringida.

La primera de ellas permite que las eliminaciones puedan hacerse por cualquiera de los dos extremos,
mientras que las inserciones slo por el final de la cola:
DOBLE COLA
FRENTE
1

A
2

B
3

C
4

D
5

E
6

F
7

FINAL
H

G
8

MAX

La segunda variante permite que las inserciones puedan hacerse por cualquiera de los dos extremos,
mientras que las eliminaciones slo por el FRENTE de la cola:

19
ESTRUCTURA DE DATOS (ING.)

UNIDAD 3. ESTRUCTURAS LINEALES

DRA.ROSA MARIA MICHEL NAVA

DOBLE COLA
FRENTE
1

A
2

B
3

C
4

D
5

E
6

F
7

FINAL
H

G
8

MAX

3.3.4 APLICACIONES: COLAS DE PRIORIDAD


El concepto de cola est ligado a computacin. Una aplicacin de las colas puede verse en las colas de
impresin. Cuando hay una sola impresora para atender a varios usuarios, puede suceder que algunos de
ellos soliciten los servicios de impresin al mismo tiempo o mientras el dispositivo est ocupado. En estos
casos se forma una cola con los trabajos que esperan para ser impresos. Los mismos se irn imprimiendo
en el orden en el cual fueron introducidos en la cola.
Otro caso de aplicaciones de colas en computacin, es el que se presenta en los sistemas de tiempo
compartido. Varios usuarios comparten ciertos recursos, como CPU y memoria de la computadora. Los
recursos se asignan a los procesos que estn en cola de espera, suponiendo que todos tienen una misma
prioridad, en el orden en el cual fueron introducidos en la cola.

Anda mungkin juga menyukai