Unidad II Estructuras Lineales

Vectores

Un vector es una colección finita, homogénea y ordenada de elementos.

Es finita porque todo arreglo tiene un límite, homogénea porque todos los elementos son del mismo tipo y  ordenada porque se puede determinar cuál es el enésimo elemento.

Un vector tiene dos partes: Componentes e índices

Los componentes hacen referencia a los elementos que forman el arreglo y los índices permiten referirse a los componentes del arreglo en forma individual.

Los arreglos se clasifican en:

-       Unidimensionales (vectores o listas)

-       Bidimensionales (matrices o tablas)

-       Multidimensionales

 

Los arreglos tienen localidades de memoria continuas y para determinar el espacio que deben ocupar, se requiere conocer la posición inicial del arreglo en la memoria y el tipo de datos primitivo del que fue declarado, como se aprecia en la siguiente tabla.

Tipo de dato primitivo

Tamaño en Bytes de memoria

byte

char

short

int

float

long

double

1

2

2

4

4

8

8

 

Para determinar la dirección física de un elemento de un arreglo unidimensional en la memoria se requiere la siguiente fórmula:

Dirección de memoria  = Dirección inicial en la memoria + Posición del arreglo o índice * Tamaño en bytes del tipo de dato primitivo

Ejemplo. Si tenemos un arreglo de 5 elementos enteros y queremos determinar la dirección de memoria que ocupa cada uno, tomando en cuenta que la dirección inicial del arreglo es 1300, el resultado sería es siguiente:

           

arreglo

10

20

30

40

50

índice

0

1

2

3

4

dirección

1300

1304

1308

1312

1316

 

            arreglo[0] = 1300 + 0 * 4 = 1300

            arreglo[1] = 1300 + 1 * 4 = 1304

            arreglo[2] = 1300 + 2 * 4 = 1308

            arreglo[3] = 1300 + 3 * 4 = 1312

            arreglo[4] = 1300 + 4 * 4 = 1316


Arreglos Bidimensionales.

Un arreglo bidimensional (matriz o tabla), es un conjunto de elementos homogéneos definidos bajo una estructura finita, controlado por dos índices y su representación es por un conjunto de renglones y columnas, en forma de una malla.


Para determinar la dirección física de un elemento de un arreglo bidimensional en la memoria se puede seguir una de las siguientes formulas:

Por renglones.

Dirección de memoria  = Dirección inicial en la memoria + (Numero de columnas del arreglo * Posición del arreglo en renglón o índice de renglón + Posición del arreglo en columna o índice de columna)  * Tamaño en bytes del tipo de dato primitivo

 

Ejemplo. Si tenemos un arreglo de 3 renglones y 3 columnas con elementos enteros y queremos determinar la dirección de memoria que ocupa cada uno, tomando en cuenta que la dirección inicial del arreglo es 2700, el resultado sería es siguiente:

           

arreglo

0

1

2

 

dirección

0

1

2

0

40

50

60

 

0

2700

2704

2708

1

70

80

90

 

1

2712

2716

2720

2

70

80

90

 

2

2724

2728

2732

 

            arreglo[0][0] = 2700 + (3 * 0 + 0) * 4 = 2700

            arreglo[0][1] = 2700 + (3 * 0 + 1) * 4 = 2704

            arreglo[0][2] = 2700 + (3 * 0 + 2) * 4 = 2708

            arreglo[1][0] = 2700 + (3 * 1 + 0) * 4 = 2712

            arreglo[1][1] = 2700 + (3 * 1 + 1) * 4 = 2716

            arreglo[1][2] = 2700 + (3 * 1 + 2) * 4 = 2720

            arreglo[2][0] = 2700 + (3 * 2 + 0) * 4 = 2724

            arreglo[2][1] = 2700 + (3 * 2 + 1) * 4 = 2728

            arreglo[2][2] = 2700 + (3 * 2 + 2) * 4 = 2732



Por columnas.

 

Dirección de memoria  = Dirección inicial en la memoria + (Numero de renglones del arreglo * Posición del arreglo en columna o índice de columna + Posición del arreglo en renglón o índice de renglón)  * Tamaño en bytes del tipo de dato primitivo

 

Ejemplo. Tomamos como base el ejemplo anterior, pero ahora con columnas quedaría de la siguiente manera:

           

arreglo

0

1

2

 

dirección

0

1

2

0

40

50

60

 

0

2700

2712

2724

1

70

80

90

 

1

2704

2716

2728

2

70

80

90

 

2

2708

2720

2732

 

            arreglo[0][0] = 2700 + (3 * 0 + 0) * 4 = 2700

            arreglo[1][0] = 2700 + (3 * 0 + 1) * 4 = 2704

  arreglo[2][0] = 2700 + (3 * 0 + 2) * 4 = 2708

  arreglo[0][1] = 2700 + (3 * 1 + 0) * 4 = 2712

  arreglo[1][1] = 2700 + (3 * 1 + 1) * 4 = 2716

  arreglo[2][1] = 2700 + (3 * 1 + 2) * 4 = 2720

            arreglo[0][2] = 2700 + (3 * 2 + 0) * 4 = 2724

            arreglo[1][2] = 2700 + (3 * 2 + 1) * 4 = 2728

            arreglo[2][2] = 2700 + (3 * 2 + 2) * 4 = 2732

 

Ejercicio. Determinar cuál es la dirección de memoria física que ocupan los elementos de la diagonal principal de una matriz (4,4), si su dirección inicial es 1971.

Ejercicio. Buscar cuales son las direcciones de memoria física que ocupan todos los elementos pares de una matriz (5,4), si inicia en la dirección 2001.

Ejercicio. Encontrar cuales son las direcciones de memoria física donde se encuentra el elemento mayor de una matriz (5,4), si su dirección inicial es la 2004.

Ejercicio. Encuentre las direcciones de memoria física de los elementos impares de una matriz, si su dirección inicial es la 1979.

Ejercicio. Determinar cuáles son las direcciones de memoria donde se encuentran las vocales de una matriz, si su dirección inicial es la 2312.


Calcular las direcciones por columnas y por renglones.


Vector

Implementa un arreglo dinámico de objetos, es decir proporciona las capacidades de las estructuras de datos de tipo arreglo, que puede cambiar su propio tamaño de forma dinámica.

En cualquier momento, un objeto Vector contiene un número de elementos que es menor o igual que su capacidad.  La capacidad es el espacio que se a reservado para los elementos de Vector. Si un objeto Vector requiere de una capacidad adicional, crece en base a un incremento de capacidad que usted le especifica, o en base a un incremento de capacidad predeterminado. Si usted no especifica un incremento de capacidad, el sistema duplicara el tamaño de un objeto Vector cada vez que se requiera de una capacidad adicional.

Los constructores de la clase Vector son los siguientes:

a) Vector( )

b) Vector(int tamaño)

c) Vector(int tamaño,int incr)

a)    Esta es la primera forma que crea un vector por defecto, que tiene un tamaño inicial de 10.

b)    Esta es la segunda opción que crea un vector que viene especificado por tamaño.

c)    La tercera forma crea un vector de capacidad especificada en tamaño e incremento incr. El incremento indica el número de elementos cuya memoria se asigna cada vez que el vector se aumenta de tamaño.

 

Los objetos Vector almacenan referencias a objetos Object. Por lo tanto, un prograna puede almacenar referencias a cualquier objeto en un objeto Vector. Para almacenar valores de tipos primitivos en objetos Vector, utilice las clases de tipo de envoltura (por ejemplo, Integer y Double) del paquete java.lang para crear objetos que contengan los valores de tipo primitivo.

 

Métodos definidos por Vector

 

Método

Descripción

Final void addElement(Object elemento)

El objeto especificado por elemento se añade al vector.

Int capacity( )

Devuelve la capacidad del vector

Object clone( )

Devuelve un duplicado del vector invocante.

Bolean contains(Object elemento)

Devuelve true si elemento está contenido en el vector, y devuelve false si no.

Void copyInto(Object matriz[ ])

Los elementos contenidos en el vector invocante se copian en la matriz especificada por matriz.

Object elementAt(int indice)

Devuelve el elemento en la posición indicada por índice.

Enumeration elements( )

Devuelve una enumeración de los elementos del vector.

Void ensureCapacity(int tamano)

Establece la mínima capacidad del vector en tamaño.

Object firstElement( )

Devuelve el primer elemento del vector

Int indexOf(Object elemento)

Devuelve el índice de la primera aparición de elemento. Si el objeto no está en el vector, se devuelve –1.

Int indexOf(Object elemento, int inicio)

Devuelve el índice de la primera aparición de elemento en o después de inicio. Si el vector no está en esa parte del vector, se devuelve –1.

Void insertElementAt(Object elemento,int indice)

Añade elemento al vector en la posición indicada por índice.

Bolean isEmpty( )

Devuelve true si el vector esta vació y false si contiene uno o más elementos.

Object lastElement( )

Devuelve el último elemento del vector.

Int lastIndexOf(Object elemento)

Devuelve el índice de la última aparición de elemento, si el elemento no está en el vector, se devuelve –1.

Int lastIndexOf(Object elemento,int inicio)

Devuelve el índice de la última aparición antes de inicio. Si el objeto no está en esa parte del vector, se devuelve –1.

Void removeAllElements( )

Vacía el vector. Tras ejecutarse este método, el tamaño del vector es 0.

Bolean removeElement(Object elemento)

Quita elemento del vector. Si existe en el vector más de una instancia del objeto especificado, entonces se quita la primera. Devuelve true si se hizo con éxito y false si el objeto no se encontró.

void removeElementAt(int indice)

Quita el elemento en la posición indicada por índice.

Void setElementAt(Object elemento,int indice)

Se asigna elemento a la posición indicada por índice.

Void setSize(int tamano)

Establece el número de elementos en el vector en tamaño. Si el nuevo número es menor que el viejo, se pierden elementos. Si el nuevo tamaño es mayor que el viejo, se añaden elementos null.

Int size( )

Devuelve el número de elementos actualmente en el vector.

String toString( )

Devuelve la cadena equivalente del vector.

Void trimToSize( )

Establece la capacidad del vector para que sea igual al número de elementos que contiene actualmente.


Pilas

Una pila, es una estructura de datos en la que el último elemento en entrar es el primero en salir, por lo que también se denominan estructuras LIFO (Last In, First Out) o también estructuras lineales con una política UEPS (Ultimo en entrar, primero en salir).

En esta estructura sólo se tiene acceso a la cabeza o cima de la pila, también solo se pueden insertar elementos en la pila cuando esta tiene espacio y solo se pueden extraer elementos de la pila cuando tenga valores.

Operaciones asociadas con la pila

Crear la pila

Ver si la pila esta vacía

Insertar elementos en la pila

Eliminar un elemento de la pila

Vaciar la pila

 

Representación grafica de la operación de una pila

 

Las operaciones básicas en una pila son push y pop

·         Push me permite insertar un elemento a la pila

·         Pop extrae un elemento de la pila

 

La forma de implementar una pila es a través de:

·            Por medio de un arreglo unidimensional

·         A través de la clase Stack de la java.util.*

·         Con una lista de elementos.

 

Ejercicio 1.  Implementar una pila y cada una de sus operaciones a través de un arreglo unidimensional.


Pilas a través de la clase Stack.

Stack (Pila)  es una subclase de Vector que implementa una pila estándar; ultimo en entrar, primero en salir.

 

Stack solo define el constructor por defecto, que crea una pila vacía. Stack incluye todos los métodos definidos por vector y añade varios métodos propios:

Método

Descripción

boolean empty( )

Devuelve true si la pila esta vacía y false si la pila contiene elementos.

Object peek( )

Devuelve el elemento en lo alto de la pila, pero no lo quita.

Object pop( )

Devuelve el elemento en lo alto de la pila y lo quita.

Object push(Object elemento)

Introduce elemento en la pila, también devuelve elemento.

int search(Object elemento)

Busca elemento en la pila. Si lo encuentra, devuelve su desplazamiento desde lo alto de la pila. De lo contrario, se  devuelve -1.

Es decir devuelve las veces que hay que hacer pop para que el dato este en la cima.

 

El error que marca en caso de que se quiera sacar un elemento y que la pila ya esta vacía es EmptyStackException.

Ejercicio 2. Realizar una aplicación que muestre el uso de la clase Stack y de cada una de las operaciones de la pila estándar.


Realizar un programa que imprima una cadena de entrada a través de una pila estandar.

Realizar un programa que imprima una cadena de entrada a través de una pila (Utilizando la clase Stack).

Proceso:

a) Leer cadena de entrada o definir una cadena a imprimir alreves.

b) Convertir la cadena a caracteres

c) Insertarla en la Pila los caracteres de la cadena(Push)

d) Imprimir la cadena sacando los valores de la Pila mediante Pop.

Verificar si una cadena de caracteres está balanceada en paréntesis o no
abc(defg(ijk))(l(mn)op)qr    SI
abc(def))ghij(kl)m              NO

Notación infija y postfija

 La notación infija es la forma natural de escribir expresiones aritméticas por ejemplo (A+B)*C y  A+ (B*C), en esta notación se sitúa el operador entre sus operandos.

 

El inconveniente de esta notación es que muchas veces se necesita de paréntesis para indicar el orden de evaluación: A*B/(A+C) <> A*B/A+C (diferente resultado).

 

Suponga que queremos evaluar la siguiente expresión aritmética sin paréntesis:

2 ˆ 3   + 5 * 2 ˆ 2 – 12 / 6

Primero evaluamos las potencias para obtener

8 + 5 * 4 – 12 / 6

Entonces evaluamos la multiplicación y división y se obtiene 8 + 20 -2.

Evaluamos la suma y la resta y se obtiene 26 realizándola en 3 niveles de precedencia

 

 

La notación postfija (Polaca inversa) debe su nombre al matemático polaco Jan Lukasiewicz, y en esta notación el símbolo operador se coloca delante de sus operandos. 

 

La ventaja de la notación postfija es que no se requieren de paréntesis para su evaluación, además es más utilizada por las computadoras ya que permite una forma muy sencilla y eficiente de evaluar expresiones aritméticas (con pilas).

 

Infija

Postfija

a/b+c*d-e*f

ab/cd*+ef*-

a*b / (a+c)

ab*ac+/

 

Conversión de Infija a Postfija a través de pilas.

 

Primero hay que saber que en una expresión se tienen operadores y que estos tienen cierta prioridad.

 

Operadores

 

Operador

Símbolo

Prioridad

Paréntesis

( )

Mas alta

Potencia

^


Multiplicación / División

*  /

 

Suma / Resta

+ -

Mas Baja

 

En caso de una igualdad en una expresión:

·         Son evaluados de izquierda a derecha (se evalúa primero el que primero aparece) 5*4/2 = (5*4)/2 = 10

·         Cuando aparecen varios operadores de potenciación juntos la expresión se evalúa de derecha a izquierda 2^3^2 = 2^(3^2) = 2^9 = 512

 

Pseudocódigo

1. Inicializar la pila

2. Repetir hasta que no haya caracteres en la expresión de entrada

2.1 Leer un carácter de la expresión

2.2 Si es un operando se pasa a la expresión postfija de salida

2.3 Si el elemento es un operador distinto de ‘)’ entonces:

2.3.1 Si la pila está vacía se mete en la pila.

2.3.2 Si la pila NO está vacía

Si la prioridad del operador es mayor que la prioridad del operador de la cima de la pila se mete en la pila

Si la prioridad del operador es menor o igual que la prioridad del operador de la cima de la pila se saca el operador de la cima y se coloca en la expresión postfija. Volvemos a 2.3

2.4 Si el elemento es el operador ‘)’ entonces:

2.4.1 Se sacan operadores de la pila hasta encontrar el paréntesis ‘(‘  que se elimina (las expresiones postfijas no llevan paréntesis)

3. Al finalizar el recorrido por la expresión aritmética se pasa todo el contenido de la pila a la expresión postfija

 

Ejemplo:

Expresión aritmética infija: A*B / (A+C)

Expresión aritmética postfija: AB*AC+/

 

Tablas de prioridad

Notación infija                                                                      Notación postfija

 

Operador

Prioridad

 

 

Operador

Prioridad

( , )

5

 

 

(

0

^

4

 

 

^

3

/,*

2

 

 

/,*

2

+,-

1

 

 

+,-

1

 

 

Evaluación de una Notación Postfija

Pseudocódigo

1.            Inicializar la pila

2.   Repetir hasta que no haya caracteres en la expresión a evaluar

2.1 Obtener el siguiente item de la expresión

2.2. Si el elemento es un operando se mete en la pila

2.3  Si el elemento es un operador (denominado &) entonces:

 2.3.1 Se extraen los dos elementos superiores de la pila, denominados Op2 y Op1 respectivamente.

2.3.2 Se evalúa el resultado de Op1 & Op2 y se almacena en Z

            2.3.3 Se introduce Z en la cima de la pila

3.  Obtener el valor de la expresión de la cima de la pila

 

Ejemplo:

Expresión aritmética infija: A*B / (A+C)

Expresión aritmética postfija: AB*AC+/

Valores A=4, B=5 y C=6: 45*46+/

 



Colas

Una cola, es una estructura de datos lineal que permite almacenar elementos por un extremo y extraerlos por el otro. Por tal motivo, es una estructura FIFO (first in, first out: primero en entrar, primero en salir).



Al igual que en las pilas, se debe tener el control de la cola, tomando en cuenta de que si se quiere extraer un elemento de la cola se debe asegurar de que no esté vacía, o si se quiere insertar un elemento se debe asegurar de que la cola no esté llena, estas dos acciones se deben desarrollar al hacer operaciones con una cola. Las operaciones que aplican a una cola son:

-       Crear una cola.

-       Revisar si la cola está vacía.

-       Revisar si la cola está llena.

-       Insertar un elemento en la cola.

-       Extraer un elemento de la cola.

-       Revisar cuál es el siguiente elemento en la cola.

 

Funcionamiento

 

Cola vacía

 

 

 

 

 

 

Se va a insertar un elemento en la cola, el número 10 push(10)(Los elementos se insertan al final de la cola)

10

 

 

 

 

 

Se va a insertar otro elemento en la cola, el número 13 push(13) (Los elementos se insertan al final de la cola)

10

13

 

 

 

 

Se va a insertar otro elemento en la cola, el número 15 push(15) (Los elementos se insertan al final de la cola)

10

13

15

 

 

 

Se va a insertar otro elemento en la cola, el número 20 push(20)(Los elementos se insertan al final de la cola)

10

13

15

20

 

 

 

Se va a insertar otro elemento en la cola, el número 5 push(5)(Los elementos se insertan al final de la cola)

10

13

15

20

5

 

Si se quiere insertar otro elemento en la cola entonces debe de marcar cola llena, ya que no hay espacio para almacenar ningún otro valor.

 

Se extrae un valor de la cola llamando al método pop() (todos los valores de la cola se sacan del inicio).

10

13

15

20

5

Sale el valor de 10.

 

13

15

20

5

Al sacar el valor de 10 queda con espacio vacío en  la primera posición por lo que se debe de recorrer para que quede espacio para almacenar un nuevo valor.

 

Cola con recorrido aplicado

13

15

20

5

 

 

Si se extrae un valor de la cola llamando al método pop() (todos los valores de la cola se sacan del inicio).

13

15

20

5

 

Sale el valor de 13.

 

15

20

5

 

Al sacar el valor de 13 queda con espacio vacío en  la primera posición por lo que se debe de recorrer para que quede espacio para almacenar un nuevo valor.

 

Cola con recorrido aplicado

15

20

5

 

 

 

Y así sucesivamente hasta que no queden más elementos en la cola y si se quiere sacar un valor entonces va a marcar cola vacia.

 

 

Realizar el programa que implemente una cola para números enteros.

 

Colas Circulares.

Una cola circular es una estructura de datos lineal que hace un uso más eficiente de la memoria disponible para su almacenamiento, sin la necesidad de requerir más espacio, utilizando el que este desocupado. La cola se controla en forma circular, es decir, el elemento anterior al primero es el último.




Para crear una cola circular se debe tener el control de tres puntos dentro de la cola que son:

-       La posición del primer elemento en la cola (inicio),

-       La posición del último elemento en la cola (final) y

-       El tamaño de la cola (máximo)

 

 


1

2

3

4

5

 

 

6

7

8

4

5

 

0

1

2

3

4

5

 

0

1

2

3

4

5

ini

 

 

 

fin

max

 

 

 

fin

ini

 

max

Tomando en cuenta que en una cola simple se controlan las operaciones cola vacía y cola llena, en una cola circular también se deben controlar estos dos aspectos.

-       La cola circular está vacía cuando el inicio de la cola se encuentra fuera del arreglo.

-       La cola circular está llena cuando el inicio se localiza en la primera posición y el fin se encuentra una posición entes del tamaño del arreglo o cuando la posición del inicio es igual al fin más uno.

 

Funcionamiento:


Ejercicio. Utilizar un arreglo unidimensional para crear una cola circular en donde se puedan realizar las operaciones que aplican a una cola, como son: tamaño, borrar, insertar, extraer, siguiente, mostrar y salir.


Doble Cola o Bicola.

Una doble cola o bicola es una estructura de datos lineal para almacenar elementos, los cuales se pueden ingresar y extraer por cualquiera de los dos lados de la cola. Estas colas obedecen a que en ocasiones especiales es necesario invalidar la regla primero en entrar, primero en salir, utilizando un criterio de prioridad.   Por ejemplo cuando llega una persona con discapacidad al banco este debe de atenderse primero, aunque exista gente antes que ella, o en el caso de las autopistas para el caso de pase de policías, ambulancias, bomberos no necesitan formarse y entonces el proceso de la cola cambia en esas situaciones.



Este tipo de estructuras tiene dos variantes:

-       Doble cola con entrada restringida.

Permite la extracción de los elementos por cualquiera de los dos lados y la inserción solo por el final de la cola.


Los datos entran por un solo extremo siempre no importando la prioridad, pero si llega alguien con mayor prioridad entonces este debe de atender primero.

Ejemplo del funcionamiento:

Cola vacía

 

 

 

 

 

 

Se va a insertar un elemento en la cola, el número 10 push(10)(Los elementos se insertan al final de la cola)

10

 

 

 

 

 

Se va a insertar otro elemento en la cola, el número 13 push(13) (Los elementos se insertan al final de la cola)

10

13

 

 

 

 

Se va a insertar otro elemento en la cola, el número 15 push(15) (Los elementos se insertan al final de la cola)

10

13

15

 

 

 

Se va a insertar otro elemento en la cola, el número 20 push(20)(Los elementos se insertan al final de la cola)

10

13

15

20

 

 

 

Se va a insertar otro elemento en la cola, el número 5 push(5)(Los elementos se insertan al final de la cola)

10

13

15

20

5

 

Si se quiere insertar otro elemento en la cola entonces debe de marcar cola llena, ya que no hay espacio para almacenar ningún otro valor.

 

Se extrae un valor de la cola llamando al método pop() con prioridad 1 (el valor se sacan del inicio).

10

13

15

20

5

Sale el valor de 10.

 

13

15

20

5

Al sacar el valor de 10 queda con espacio vacío en  la primera posición por lo que se debe de recorrer para que quede espacio para almacenar un nuevo valor.

 

Cola con recorrido aplicado

13

15

20

5

 

 

Si se extrae un valor de la cola llamando al método pop() con prioridad 1(el valor se sacan del inicio).

13

15

20

5

 

Sale el valor de 13.

 

15

20

5

 

Al sacar el valor de 13 queda con espacio vacío en  la primera posición por lo que se debe de recorrer para que quede espacio para almacenar un nuevo valor.

 

Cola con recorrido aplicado

15

20

5

 

 

 

Si se extrae un valor de la cola llamando al método pop() con prioridad 2(el valor se saca por el final).

15

20

5

 

 

Sale el valor de 5.

15

20

 

 

 

 

Y así sucesivamente hasta que no queden más elementos en la cola y si se quiere sacar un valor entonces va a marcar cola vacía.

 

-       Doble cola con salida restringida.

Permite la inserción de los elementos por cualquiera de los dos lados y la extracción solo por el inicio de la cola.






La extracción de los datos es igual para todos los elementos por el mismo lado, pero si llega alguien con mayor prioridad se debe de insertar al inicio de la cola, y si es de menor prioridad se inserta al final de la cola.

 

Ejemplo del funcionamiento:

Cola vacía

 

 

 

 

 

 

Se va a insertar un elemento en la cola, el número 10 push(10)con prioridad 1(Se inserta al final de la cola)

10

 

 

 

 

 

Se va a insertar otro elemento en la cola, el número 13 push(13) con prioridad 1 (Se inserta al final de la cola)

10

13

 

 

 

 

Se va a insertar otro elemento en la cola, el número 15 push(15) con prioridad 1 (Se  inserta al final de la cola)

10

13

15

 

 

 

Se va a insertar otro elemento en la cola, el número 20 push(20) con prioridad 2 (Se inserta al inicio de la cola )

20

10

13

15

 

 

 

Se va a insertar otro elemento en la cola, el número 5 push(5)con prioridad 2(Se inserta al inicio de la cola)

5

20

10

13

15

 

Si se quiere insertar otro elemento en la cola entonces debe de marcar cola llena, ya que no hay espacio para almacenar ningún otro valor.

 

Se extrae un valor de la cola llamando al método pop()  (el valor se sacan del inicio).

5

20

10

13

15

Sale el valor de 5.

 

20

10

13

15

Al sacar el valor de 5 queda con espacio vacío en  la primera posición por lo que se debe de recorrer para que quede espacio para almacenar un nuevo valor.

 

Cola con recorrido aplicado

20

10

13

15

 

 

Si se extrae un valor de la cola llamando al método pop() (el valor se sacan del inicio).

20

10

13

15

 

Sale el valor de 20.

 

10

13

15

 

Al sacar el valor de 20 queda con espacio vacío en  la primera posición por lo que se debe de recorrer para que quede espacio para almacenar un nuevo valor.

 

Cola con recorrido aplicado

10

13

15

 

 

 

Y así sucesivamente hasta que no queden más elementos en la cola y si se quiere sacar un valor entonces va a marcar cola vacía.

 


ċ
Vectores.java
(4k)
Othoniel Rivera,
22 feb. 2012 5:44
Comments