Você está na página 1de 18

Programacin III

Programacin III
Clase Terica N 4
TAD Pila y TAD Cola.

Objetivos
Al final de la clase los estudiantes sern capaces de:
Especificar el TAD Pila.
Definir e implementar la clase Pila.
Realizar aplicaciones de las Pilas en Programacin.
Conocer las diferentes formas de escribir una expresin.
Especificar el TAD Cola.
Encontrar las diferencias fundamentales entre Pilas y Colas.
Definir una clase cola con listas enlazadas.
Aplicar el TAD Cola para la resolucin de problemas.
Introduccin
La Pila es una estructura de datos que almacena y recupera sus elementos atendiendo a un estricto orden. Las
pilas se utilizan en compiladores, sistemas operativos y programas de aplicaciones. Una aplicacin interesante
es la evaluacin de expresiones algebraicas mediante pilas.
Desarrollo

PILAS.
Una pila (stack) es una lista ordenada de elementos en la que todas las inserciones y supresiones se realizan por
un mismo extremo de la lista. A una pila se le pueden aadir y retirar nuevos nodos nicamente de su parte
superior, la cima de la pila. Por esta razn, se conoce una pila como una estructura de datos LIFO por last-in, firstout, es decir ltimo en entrar primero en salir.
Cuando se dice que la pila est ordenada, se quiere decir que hay un elemento al que se puede acceder primero
(el que est encima de la pila), otro elemento al que se puede acceder en segundo lugar (justo el elemento que
est debajo de la cima), un tercero, etc. No se requiere que las entradas se puedan comparar utilizando el
operador menor que y pueden ser de cualquier tipo.
Se referencia una pila mediante un apuntador al elemento superior de la misma. El miembro de enlace en el
ltimo nodo de la pila se define a NULL, para indicar que se trata de la parte inferior de la pila misma.

Vea una representacin grfica de la PILA:


______________________________________________________________________________________________________________
UDB Ciclo 02 2015
64

Programacin III

pila
NULL

Note que las pilas y las listas enlazadas se representan en forma idntica. La diferencia entre las pilas y las listas
enlazadas es que en una lista enlazada las inserciones y borrados pueden ocurrir en cualquier parte, pero en una
pila nicamente en su parte superior.
Las funciones primarias utilizadas para manipular una pila son Insertar (Push) y Quitar (Pop).
La funcin Push crea un nuevo nodo y lo coloca en la parte superior de la pila (tope).
La funcin Pop sirve ya sea para leer o eliminar un nodo de la parte superior de la pila, liberando la memoria que
fue asignada al nodo retirado, y regresando el valor retirado.
Las pilas se pueden implementar guardando los elementos en un array, pero este debe ser lo suficientemente
amplio para poder contener el mximo previsto de elementos de la pila. Un extremo del array se considera el
fondo de la pila, que permanecer fijo.
La implementacin dinmica de una pila se hace almacenando los elementos como nodos de una lista enlazada,
con la particularidad de que siempre que se quiera meter (empujar) un elemento se har por el mismo extremo
que se extraer. Esta realizacin tiene la ventaja de que el tamao se ajusta exactamente a los elementos de la
pila. Sin embargo, para cada elemento es necesaria ms memoria, ya que hay que guardar el campo de enlace.

Especificacin de una Pila.


Las operaciones que sirven para definir una pila y poder manipular su contenido son las siguientes:
Dato que se almacena en la pila
Tipo de dato
Operaciones
CrearPila
Insertar (Push)
Quitar (Pop)
Pilavacia
Limpiar pila
CimaPila
Tamao de la Pila

Inicia la pila
Pone un dato en la pila
Retira (saca) un dato de la pila
Comprobar si la pila no tiene elementos
Quita todos sus elementos y dejar la pila vaca
Obtiene el elemento cima de la pila
Nmero de elementos mximo que puede contener la pila

______________________________________________________________________________________________________________
UDB Ciclo 02 2015
65

Programacin III

Implementacin de Pilas en C#.


Definicin de la estructura del nodo

class nodo { public char info;


public nodo
sgte; //sgte es un objeto que simula el puntero
}

class pila
{ public nodo tope;
public pila()
Definicin de la estructura de la pila.
{ tope = null;
}
public void Push(char valor)
{ nodo aux = new nodo();
aux.info = valor;

if (tope == null)
{ tope = aux;
aux.sgte = null;

//si no hay nada en la pila


//se asigna el aux como el unico nodo
//como solo hay un dato en la pila el puntero se
// dirige a null

}
else
{ /* si la pila no esta vacia el dato se inserta arriba de la pila, es decir en
el tope */
aux.sgte = tope;
tope = aux;
}
}
public char Pop()
{
char valor ='';
if (tope == null)
Console.WriteLine("Lista vacia");
else
{ //se elimina el ultimo en entrar y se retorna el valor que se elimina
valor = tope.info;
tope = tope.sgte;
}
return valor;
}
public void mostrar()
{
nodo puntero;
puntero = tope;
Console.WriteLine("{0}", puntero.info);
______________________________________________________________________________________________________________
UDB Ciclo 02 2015
66

Programacin III

//se recorre el puntero del tope hasta el fondo


while (puntero.sgte != null)
{
puntero = puntero.sgte;
Console.WriteLine("{0}", puntero.info);
}
}

}
Las operaciones Push y Pop acceden a la lista directamente con el puntero tope (apunta al ltimo nodo apilado).
Entonces, como no necesitan recorrer los nodos de la pila, no dependen del nmero de nodos, la eficiencia de
cada operacin es constante, O (1).

Representacin grfica.
El primer recuadro encierra el cdigo de nodo, este cdigo permitir crear cada nodo para implementar la pila.
Cada nodo tendr un valor y un puntero apuntando al siguiente nodo o elemento de la pila.

El segundo recuadro encierra el cdigo de la Pila, este cdigo permitir crear la pila dentro de la cual se colocar
cada nodo.
pila

tope

Anlisis de Funcin Constructor.


public pila()
{ tope = null;
}

Representacin grfica.

pila

tope
NULL

1
______________________________________________________________________________________________________________
UDB Ciclo 02 2015
67

Programacin III

1. El constructor inicializa el fondo de la pila, poniendo a tope (puntero de la pila) apuntado a NULL.
Ahora ya est creada la pila.
Anlisis de Funcin Push (Insertar nuevo nodo a la Pila en el tope)
public void Push(char valor)
{ nodo aux = new nodo();
aux.info = valor;
(1)
if (tope == null)
{ tope = aux; (2)
aux.sgte = null;

//si no hay nada en la pila


//se asigna el aux como el unico nodo
//como solo hay un dato en la pila el puntero se
//dirige a null

}
else
{ /* si la pila no esta vacia el dato se inserta arriba de la pila, es decir en
el tope */
aux.sgte = tope;
tope = aux;
}
}

(1) Para las pilas slo se pueden insertar elementos al tope, por lo tanto lo nico que hacemos es crear el
nuevo nodo pasando como parmetro el valor a guardar y pasndole el valor al que apunta en ese
momento tope, como tope antes de agregar el nodo apunta a NULL entonces "sgte" apuntar a NULL.

(2) Le indicamos a tope (puntero de la pila) que apunte al nodo que se acaba de agregar.
Representacin grfica.

Pila

to pe

(1)

(2)

sgte

valor

NULL

Nuevo nodo

Anlisis de Funcin Pop (Eliminar elementos de la Pila).


public char Pop()
{
char valor = ' '; (1)
if (tope == null)
(2)
______________________________________________________________________________________________________________
UDB Ciclo 02 2015
68

Programacin III
Console.WriteLine("Lista vacia");
else
{ //se elimina el ultimo en entrar y se retorna el valor que se elimina
valor = tope.info; (3)
tope = tope.sgte;
} (4)
return valor; (5)
}

(1) Se le asigna a la variable valor espacios en blanco.


(2) Se verifica si la pila est vaca.
(3) Se le asigna a la variable valor el dato del nodo a eliminar para que se pueda retornar el dato y poder
leerlo.
(4) Se le asigna a tope el valor al que apunta tope.sgte para conservar el enlace.
(5) Se retorna el dato almacenado en valor.
Representacin grfica.

Y obviamente se eliminar el nodo del tope y se


retornar el valor que tena el nodo.

Suponga que tiene la pila


de siguiente manera:

Pila

tope

(3)

Pila

valor = a (tope.info)

t o pe
(4)

Dato a

to pe
sgte

Dato a

Dato b

sgte

sgte

Dato b

NULL
sgte
NULL
Anlisis de Funcin mostrar (Para mostrar el contenido de la pila, es decir, los datos de los nodos).
public void mostrar()
{
nodo puntero; (1)
puntero = tope;
Console.WriteLine("{0}", puntero.info);(2)
//se recorre el puntero del tope hasta el fondo
while (puntero.sgte != null) (3)
{
puntero = puntero.sgte;
Console.WriteLine("{0}", puntero.info);

(4) y (5)

}
______________________________________________________________________________________________________________
UDB Ciclo 02 2015
69

Programacin III
}

}
Interpretacin.
(1) Se crea una referencia del tipo nodo llamado puntero, el cual se iguala al valor de tope (puntero de pila)
para colocarse al inicio de la pila.
(2) Muestra el contenido de la pila.
(3) Para imprimir los elementos de la pila entra en el lazo while mientras puntero.sgte (puntero al inicio de
la pila) sea distinto de NULL, es decir mientras no se llegue al fondo (ltimo elemento de la pila) de la
pila.
(4) Hace que puntero apunte al valor del nodo y lo imprime.
(5) Hace que puntero se mueva al siguiente elemento de la pila y continua en el lazo while hasta que
puntero.sgte llegue al final de la pila.
Esto ms o menos se vera as: Suponga que tiene una pila de la siguiente forma:
Pila
Pila

La ejecucin de la funcin anterior dara como resultado:

puntero

[tope] a b NULL [fondo]

NULL

A continuacin se muestra un programa para manejo de Pilas:


static void Main(string[] args)
{
string cadena, rpta;
char caracter;
pila mipila = new pila();
pila pilafrase = new pila();
//PARTE 1
//SE INGRESAN CARACTERES DE MANERA INDIVIDUAL A LA PILA Y LUEGO SE MUESTRAN
Console.WriteLine("\t\t---PARTE I---");
//ingresamos elementos a la pila
mipila.Push('p');
______________________________________________________________________________________________________________
UDB Ciclo 02 2015
70

Programacin III
mipila.Push('b');
mipila.Push('z');
mipila.Push('s');
//mostramos el contenido de la pila
mipila.mostrar();
Console.ReadLine();
//sacamos un elemento de la pila
mipila.Pop();
mipila.mostrar();
Console.ReadLine();
//PARTE 2
//SE INGRESA UNA CADENA Y SE INGRESAN TODOS LOS CARACTERES DE DICHA CADENA
Console.WriteLine("\t\t---PARTE II---");
Console.Write("Ingrese la palabra: ");
cadena = Console.ReadLine();
for (int i = 0; i < cadena.Length; i++)
{
//extrae una caracter de la cadena y lo convierte en char
caracter = char.Parse(cadena.Substring(i, 1));
pilafrase.Push(caracter);
}
//imprimir el contenido de la pila
pilafrase.mostrar();
Console.ReadLine();
}

Uso prctico de Pilas.


Evaluacin de Expresiones Aritmticas.
Una de las aplicaciones ms tpicas del TAD pila es almacenar los caracteres de que consta una expresin
aritmtica con el fin de evaluar el valor numrico de dicha expresin. Una expresin aritmtica est formada por
operandos y operadores.
As, la expresin: R=X*Y (A+B) est escrita de la forma habitual: el operador en medio de los operandos. Esta
forma se conoce como notacin infija. Esta forma de escribir las expresiones exige, en algunas ocasiones, el uso
de parntesis para encerrar subexpresiones con mayor prioridad. Los operadores tienen distintos niveles de
precedencia o prioridad a la hora de su evaluacin, estos son:
DESCRIPCION

OPERADOR

PRIORIDAD

Parntesis

()

1er Nivel de prioridad

Potencia

2 Nivel de prioridad

______________________________________________________________________________________________________________
UDB Ciclo 02 2015
71

Programacin III

Multiplicacin/Divisin

*,/

3er Nivel de prioridad

Suma/Resta
+, 4 Nivel de prioridad
Tambin suponemos que a igualdad de precedencia, los operadores son evaluados de izquierda a derecha
(asociatividad), excepto la potencia que es de derecha a izquierda.

Notacin Prefija (polaca) y Postfija (Polaca inversa) de una expresin aritmtica.


La forma habitual de escribir operaciones aritmticas es situar el operador entre sus dos operandos con la citada
notacin infija. Esta forma de notacin obliga en muchas ocasiones a utilizar parntesis para indicar el orden de
evaluacin: A*B/(A+B)
A*B/A+C: Representa distintas expresiones al no poner parntesis.
La notacin en la que el operador se coloca delante de los operandos, notacin prefija, se conoce como notacin
polaca:
A*B/(A+C)
A*B/+AC;
*AB/+AC;
/*AB+AC;
Podemos ver que no es necesaria la utilizacin de parntesis al escribir la expresin en notacin polaca. La
propiedad fundamental de la notacin polaca es que el orden en que se van a realizar las operaciones est
determinado por las posiciones de los operadores y los operandos en la expresin.
Otra forma de escribir las operaciones es mediante la notacin postfija o polaca inversa que coloca el operador
a continuacin de sus dos operandos.
A*B/(A+C)
A*B/AC+;
AB*/AC+,
AB*AC+/
A la hora de evaluar una expresin aritmtica escrita, normalmente, en notacin infija la computadora sigue dos
pasos:
1. Transformar la expresin de notacin infija a postfija.
2. Evaluar la expresin en notacin postfija.
En el algoritmo para resolver cada paso es fundamental la utilizacin de pilas. Se parte de una expresin en
notacin infija que tiene operandos, operadores y puede tener parntesis. Los operandos vienen representados
por letras, los operadores van a ser:
^ (potencia), *, /, +, -.
La transformacin se realiza utilizando una pila en la que se almacenan los operadores y los parntesis izquierdos.
La expresin se va leyendo carcter a carcter, los operandos pasan directamente a formar parte de la expresin
en postfija.
Un operador se mete en la pila si se cumple que:
Siempre que la pila est vaca, o,
Siempre que tenga mayor prioridad que el operador cima de la pila, o bien,
______________________________________________________________________________________________________________
UDB Ciclo 02 2015
72

Programacin III

Tiene igual prioridad que el operador cima de la pila y se trata de la mxima prioridad.

Si la prioridad es menor o igual se saca el elemento cima de la pila, se pone en la expresin postfija y se vuelve a
hacer la comparacin con el nuevo elemento cima.
Los parntesis izquierdos siempre se meten en la pila con la mnima prioridad para que todo operador que se
encuentra dentro del parntesis entre en la pila. Cuando se lee un parntesis derecho, hay que sacar todos los
operadores de la pila pasando a formar parte de la expresin postfija, hasta llegar a un parntesis izquierdo, el
cual se elimina, ya que los parntesis no forman parte de la expresin postfija.
El algoritmo termina cuado no hay ms tems de la expresin origen y la pila est vaca.
Sea por ejemplo la expresin infija A*(B+C - (D / E^F)-G) - H, la expresin en postfija se va ir formando con la
siguiente secuencia:
Expresin

Estado de la Pila

operando A pasa a la expresin; operador * a la pila

AB

operador ( a la pila; operando B a la expresin

ABC

operador + a la pila; operando C a la expresin

En este momento el estado de la pila es

+
(
*
El nuevo carcter ledo es -, que tiene igual prioridad que el elemento cima de la pila +; en consecuencia, el
estado de la pila es:

(
*
Y la expresin es:
Expresin

Estado de la Pila

ABC+
ABC+D

operador ( a la pila; operando D a la expresin

ABC+DE

operador / a la pila; operando E a la expresin

ABC+DEF

operador ^ a la pila; operando F a la expresin


operador ) (parntesis derecho) provoca vaciar la pila
hasta un ( .

La pila en este momento contiene:

______________________________________________________________________________________________________________
UDB Ciclo 02 2015
73

Programacin III

^
/
(
(
*

El nuevo estado de la pila es:

(
*
Y la expresin:
Expresin

Estado de la Pila

ABC+DEF^/

El algoritmo saca operadores de la pila hasta un (

ABC+DEF^/-

Operador - a la pila y se extrae a la vez -

ABC+DEF^/-G

Operando G a la expresin; como el siguiente operador


es ), son extrados de la pila los operadores hasta un
(

El nuevo estado de la pila es:

Expresin

Estado de la Pila

ABC+DEF^/-G-*

Operador -, hace que se saque de la pila el operador


*, y se meta el operador -

ABC+DEF^/-G-*H

Operando H se lleva a la expresin. Fin de la entrada,


se vaca la pila, pasando los operadores a la
expresin.

ABC+DEF^/-G-*H-

En la descripcin realizada se observa que el parntesis izquierdo tiene la mxima prioridad fuera de la pila, es
decir, en la notacin infija; sin embargo, cuando est dentro de la pila la prioridad es mnima. De igual forma,
para tratar el hecho de que varios operadores de potenciacin son evaluados de derecha a izquierda, este
operador tendr mayor prioridad cuando todava no est metido en la pila que el mismo pero metido en la pila.

______________________________________________________________________________________________________________
UDB Ciclo 02 2015
74

Programacin III

El TAD COLA.
El TAD cola es una estructura muy utilizada en la vida cotidiana, y tambin para resolver problemas en
programacin. Al igual que las Pilas, almacena y recupera sus elementos atendiendo un estricto orden. Las colas
se conocen como estructuras FIFO (First In, First Out, primero en entrar primero en salir), debido a la forma y
orden de insercin y de extraccin de elementos de la Cola.
Las colas tienen numerosas aplicaciones en el mundo de la computacin: colas de mensajes, colas de tareas a
realizar por una impresora, colas de prioridades.
Colas.
Una cola es una estructura de datos que almacena elementos en una lista lineal y el acceso a los datos se hace
por uno de los dos extremos de la lista. Un elemento se inserta en la cola (parte final) de la lista y se suprime o
elimina por el frente (parte inicial, frente) de la lista. Las aplicaciones utilizan una cola para almacenar elementos
en su orden de aparicin o concurrencia.
Las colas se llaman tambin FIFO (firt-in, first-out), ya que el primer elemento que llega a la cola ser el primero
que salga de ella. En informtica, una cola tpica es una cola de prioridad: programas con diferente prioridad
forman una cola mientras esperan a ser ejecutados.
La representacin grfica de una cola es:
Eliminacin

Insercin

Frente

Final

Las operaciones bsicas a realizar en una cola son:


Inicializar. Inicializa los punteros Frente y Final.
Insertar. Inserta un elemento x al final de la cola.
Eliminar. Elimina el elemento primero de la cola.
ColaVacia. Devuelve verdadero si la cola no contiene elementos; en caso contrario, devuelve falso.
Las colas se pueden implementar mediante listas o con arrays lineales y se necesitan dos variables puntero: frente
y final, que representan respectivamente la posicin del elemento primero y ltimo de la cola.
Un gran nmero de sistemas fsicos pueden ser modelados de esta manera; considrense, por ejemplo, las colas
que se forman delante de los cajeros de un banco, o en el mostrador de una tienda de alimentacin. Los clientes
que forman estas colas son atendidos considerando que el primero que llega es atendido primero. Esto recuerda
a la propiedad FIFO de una cola. Lo mismo se puede decir de los vehculos esperando en una gasolinera, los
aviones esperando permiso para despegar de la torre de control y las transmisiones de mensajes en una red
informtica de comunicaciones.

______________________________________________________________________________________________________________
UDB Ciclo 02 2015
75

Programacin III

Especificacin del TAD Cola.


Las operaciones que definen la estructura de una Cola son las siguientes:
Elemento que se almacena en la Cola
Tipo de dato
Operaciones
CrearCola
Insertar
Quitar
Cola vaca
Frente

Inicia la Cola como vaca


Aade un elemento por el final de la cola
Retira (extrae) el elemento frente de la cola
Comprobar si la cola no tiene elementos
Obtiene el elemento frente o primero de la cola

Desde el punto de vista de estructura de datos, una cola es similar a una pila, en cuanto que los datos se
almacenan de modo lineal y el acceso a los datos slo est permitido en los extremos de la cola.
De manera general las colas funcionan as:
Anlisis de las Funciones para definir el Nodo y la Cola.
class nodo

(1)

{ public int info; (2)


public nodo sgte; (3)
}

(1) Se define la clase nodo para crear los nodos (elementos de la cola).
(2) Los miembros pblicos de la clase.
(3) En la ltima lnea creamos un enlace llamado sgte que nos permitir crear enlaces del mismo tipo de las
variables a las cuales apuntar, es decir a los nodos.
Representacin Grfica de la Clase Nodo:
nodo
sgte
info
NULL

Anlisis de las Funciones para definir la Cola.


class Cola (1)
{
public nodo inicio;
public nodo final;

______________________________________________________________________________________________________________
UDB Ciclo 02 2015
76

Programacin III
public Cola()
(2)
{ inicio = null;
final = null;
}
}

(1) Se define la clase cola.


(2) Definicin del constructor, note que el constructor inicializa a NULL los nodos inicio y final de la cola.
Representacin Grfica de la Clase Cola.

cola

inicio final
NULL
Anlisis de la Funcin Aadir.
public void Aadir(int valor)
{ nodo aux = new nodo();
(2)
aux.info = valor;

(1)

if (inicio == null)
{ inicio = aux; (5)
final = aux; (4)
aux.sgte = null;
}
else
{ final.sgte = aux;
aux.sgte = null;
final = aux; (4)
}
}

(3)

Representacin Grfica de la Funcin Aadir.


(1) Primero consideraremos el caso que la cola no est vaca, que ya tiene dos nodos. Se declara un nodo
del tipo nodo.

______________________________________________________________________________________________________________
UDB Ciclo 02 2015
77

Programacin III

(2) Se crea un nuevo nodo

(3) El else de la lnea 3 considera el hecho que la cola no est vaca. Y como el nodo que contiene el valor b
es el ltimo, entonces hace que final apuntando a siguiente sea igual al nuevo nodo.
(4) Y hace que final (puntero de la cola) sea igual al nuevo nodo (que apunte a l).

El segundo caso consiste en considerar que la cola est vaca.


Representacin Grfica.

(1) Se declara el nuevo nodo del tipo nodo.


(2) Se crea el nuevo nodo.

(3) El programa no entrar a esta lnea 3 porque estamos considerando que nuestra cola est vaca.
(4) Hace que final (puntero de la cola) sea igual al nuevo nodo (que apunte a l).
(5) Como la cola est vaca entra en este if y hace que tambin inicio (puntero de la cola) sea igual al nuevo
nodo.
______________________________________________________________________________________________________________
UDB Ciclo 02 2015
78

Programacin III

Anlisis de la Funcin Sacar.


Esta funcin es un tanto parecida a la funcin Pop( ) de pilas, elimina el nodo de la cola.
public void Sacar()
{ if (inicio == null) (1)
Console.WriteLine("Cola vaca");
else
{ inicio = inicio.sgte; (2)
}
}

(1) Si la cola est vaca retorna el mensaje Cola vaca y termina la funcin.
(2) Si la cola no est vaca avanza hasta esta lnea y hace que inicio (puntero de la cola) sea igual a inicio
apuntando a siguiente (recuerde que necesito guardar el enlace).

Anlisis de la Funcin PopValor.


Esta funcin es un tanto parecida a la funcin Pop( ) de pilas, lee un elemento pero para ello elimina el nodo y
retorna el dato que este almacenaba.
public int PopValor()
int valor = 0;

(1)
if (inicio == null)
Console.WriteLine("Cola vaca");
else (2)
{ valor = inicio.info; (3)
inicio = inicio.sgte;
}

return valor;

(5)

Representacin Grfica.
(1) Si la cola est vaca retorna el mensaje Cola vaca y termina la funcin.
(2) Si la cola no est vaca avanza hasta esta lnea y hace que inicio (puntero de la cola) sea igual a inicio
apuntando a siguiente (recuerde que necesito guardar el enlace).
(3) Luego asigno a la variable valor el dato que guarda el nodo a eliminar.
(4) Elimino el nodo.
(5) Retornamos el valor que guardamos en la variable v.
______________________________________________________________________________________________________________
UDB Ciclo 02 2015
79

Programacin III

** Suponiendo que la Cola est como se muestra a continuacin:

Anlisis de la Funcin MostrarCola.


public void Mostrar()
{
if (inicio == null) (1)
Console.WriteLine("Cola vaca");
else
(2)
{ nodo puntero;
puntero = inicio; (3)
do(4)
{ Console.WriteLine("{0}\t", puntero.info);
puntero = puntero.sgte;
}
while (puntero != null);
}
}
______________________________________________________________________________________________________________
UDB Ciclo 02 2015
80

Programacin III

Representacin Grfica.
(1) Se verifica si la cola est vaca. Si inicio es igual a NULL, significa que la cola est vaca y devolver el
mensaje Cola vaca.
(2) Si la cola no est vaca, se declara puntero.
(3) Se hace que puntero apunte a primero de la cola.
(4) Mientras puntero no sea igual a NULL (final de la cola) se imprime el valor que tiene el nodo. Luego
hacemos que puntero avance por cada nodo. Cuando se recorre toda la cola y se llega al final de la misma
(puntero = NULL) se termina el bucle.

** Suponiendo que mi cola esta como se muestra a continuacin.

La ejecucin del programa genera una salida como la siguiente: La


Cola es: a b c
La funcin principal para el programa para colas es el siguiente:
static void Main(string[] args)
{
Cola micola = new Cola();
Console.WriteLine("Colocando 5 elementos en la cola...");
micola.Aadir(11);
micola.Aadir(12);
micola.Aadir(13);
micola.Aadir(14);
micola.Aadir(15);
micola.Mostrar();
Console.WriteLine("Retirando 2 elementos de la cola...");
micola.Sacar();
micola.Sacar();
micola.Mostrar();
Console.WriteLine("Se retir el elemento:{0}", micola.PopValor());
micola.Mostrar();
Console.ReadLine();
}

______________________________________________________________________________________________________________
UDB Ciclo 02 2015
81

Você também pode gostar