Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Semestre: 7mo.
INTRODUCCIÓN .................................................................................................................. 3 2
MARCO TEÓRICO ............................................................................................................... 4
PRACTICA ............................................................................................................................ 9
RESULTADOS .................................................................................................................... 21
CONCLUSIÓN .................................................................................................................... 24
INTRODUCCIÓN
En esta unidad vimos estructuras lineales de datos que se caracterizan porque sus elementos 3
en secuencia, relacionados en forma lineal, uno luego del otro. Cada elemento de la estructura
puede estar conformado por uno o varios subelementos o campos que pueden pertenecer a
cualquier tipo de dato, pero que normalmente son tipos básicos.
Una estructura lineal de datos o lista está conformada por ninguno, uno o varios elementos
que tienen una relación de adyacencia ordenada donde existe un primer elemento,
seguido de un segundo elemento y así sucesivamente hasta llegar al último. El tipo de dato
de los elementos puede ser cualquiera, pero debe ser el mismo tipo para todos. El valor
contenido en los elementos puede ser el mismo o diferente. En estas estructuras se realizan
operaciones de agregar y/o eliminar elementos a la lista según un criterio particular. Sobre la
base de la forma y el lugar de la realización de estas operaciones en la misma,
las listas se clasifican en listas de acceso restringido y listas de acceso no restringido. Las
listas de acceso restringido son las pilas y colas. En las pilas, las operaciones de acceso se
realizan por un único extremo de la lista, al cual normalmente se denomina tope de la pila.
En las colas, estas operaciones se realizan por ambos extremos de la lista llamados
generalmente, inicio y fin de la cola. Las listas de acceso no restringido, denominadas listas,
son el tipo más general, al cual se considera como la superclase de las otras clases de listas,
en específico de las pilas, colas y dipolos. Haciendo la jerarquía de clases adecuada para estas
estructuras, se tiene que la lista es la clase raíz de la jerarquía que tiene como subclases la
pila y cola.
MARCO TEÓRICO
Una pila (stack en inglés) es una lista ordinal o estructura de datos en la que el modo de 4
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. Se aplica en multitud de ocasiones en
informática debido a su simplicidad y ordenación implícita en la propia estructura.
Para el manejo de los datos se cuenta con dos operaciones básicas: apilar (push), que coloca
un objeto en la pila, y su operación inversa, retirar (o des apilar, pop), que retira el último
elemento apilado.
En cada momento sólo se tiene acceso a la parte superior de la pila, es decir, al último objeto
apilado (denominado TOS, Top of Stack en inglés). La operación retirar permite la obtención
de este elemento, que es retirado de la pila permitiendo el acceso al siguiente (apilado con
anterioridad), que pasa a ser el nuevo TOS.
5
Por analogía con objetos cotidianos, una operación apilar equivaldría a colocar un plato sobre
una pila de platos, y una operación retirar a retirarlo.
Vamos a estudiar las principales operaciones a realizar sobre una pila, insertar y borrar.
1.- Insertar.
En primer lugar, hay que decir que esta operación es muy comúnmente denominada push.
La inserción en una pila se realiza en su cima, considerando la cima como el último elemento
insertado. Esta es una de las particularidades de las pilas, mientras el resto de estructuras de
datos lineales se representan gráficamente en horizontal, las pilas se representan
verticalmente. Por esta razón es por lo que se habla de cima de la pila y no de cola de la cima.
Aunque en el fondo sea lo mismo, el último elemento de la estructura de datos.
Las operaciones a realizar para realizar la inserción en la pila son muy simples, hacer que el
nuevo nodo apunte a la cima anterior, y definir el nuevo nodo como cima de la pila.
Vamos a ver un ejemplo de una inserción:
2.- Borrar
Las operaciones a realizar son muy simples, avanzar el puntero que apunta a la cima y extraer
la cima anterior. Si aplicamos la operación pop a la pila de 4 elementos representada arriba
el resultado sería:
¿Qué son las colas?
Las colas están formadas por nodos de la misma forma que las listas. Los nodos de las colas
también están enlazados entre sí como las listas. Las colas no guardan ningún orden, como
tampoco lo guardan las listas no ordenadas. ¿Qué es entonces lo que diferencia a una lista de 7
una cola? Pues lo que diferencia estas dos estructuras de datos es la forma de añadir y de
eliminar elementos de una cola.
Una cola es una estructura de datos FIFO, acrónimo de First In First Out, o lo que es lo
mismo, el primero en entrar es el primero en salir. Esto implica que en las colas siempre se
inserta elementos por el final (cola) y siempre se extraen elementos por el principio(cabeza).
Los ejemplos típicos de colas son las colas de personas para, por ejemplo, compra de
entradas. En esta cola humana el primero en llegar es el primero en marcharse. Pues así se
comportan las colas informáticas.
Pues en las colas como en toda estructura de datos las operaciones principales son insertar y
eliminar, aunque en varias implementaciones de colas puedan recibir nombres diferentes.
1.- Insertar.
La inserción en las colas se realiza por la cola de las mismas, es decir, se inserta al final de
la estructura.
Para llevar a cabo esta operación únicamente hay que reestructurar un par de punteros, el
último nodo debe pasar a apuntar al nuevo nodo (que pasará a ser el último) y el nuevo nodo
pasa a ser la nueva cola de la cola.
Vamos a verlo gráficamente sobre la siguiente cola:
8
Si a esta cola le añadimos el elemento 0, la cola resultante sería:
2.- Borrar
El borrado es una operación muy simple en las colas. Esta operación supone extraer la cabeza
de la cola, ya que es el elemento que más tiempo lleva en la estructura. Para llevar a cabo
esta operación únicamente hay que extraer el elemento situado en la cabeza de la cola y
avanzar el puntero cabeza una posición, para que de esta forma la nueva cabeza sea el
segundo elemento que más tiempo lleva en la cola.
Una diferencia importante entre las colas y las listas, es que en las colas no se puede borrar
un elemento cualquiera, se borra siempre el que está en la cabeza de la cola.
PRACTICA
Primero lo que hicimos fue crear nuestra clase pilaCola que es donde ira nuestro menú de
selección de una pila o cola:
9
import java.util.*; 10
En esta parte hacemos uso de nuestro método que tenemos en la clase pilas1 la cual veremos
a continuación.
case 2:
if (pila.pila_llena(TOPE, MAX, band) == true) {
Si una de las dos acciones que tenemos declaradas en los métodos son verdaderas entonces
ejecutamos los siguientes mensajes.
System.out.println("\nLa pila está llena\n");
} else {
System.out.println("\nLa pila aún tiene espacio\n");
}
break;
case 3:
En esta parte realizamos la acción de agregar un elemento a la pila, pero primero en esta parte
lo que se hace también es verificar si la pila está llena, mediante el dato alojado en TOPE que
se guardó en el objeto de tipo sccanner cadena la cual guardo la información en un arreglo.
entonces si se verifico que si no está llena podremos llenar la pila dependiendo del TOPE
que le hayamos dado a esta.
13
if (pila.pila_llena(TOPE, MAX, band)) {
System.out.println("\nNo se pueden ingresar más elementos\n");
} else {
TOPE++;
System.out.println("Introdusca un elemento para APILAR");
datos[TOPE] = cadena.nextLine();
}
break;
En esta parte solo verificamos si la pila está vacía mediate el método que tenemos en la clase
pilas1 y también dependiendo de cuantos datos el TOPE.
case 4:
if (pila.pila_vacia(TOPE, band)) {
System.out.println("\nLa pila esta vacia\n");
} else {
TOPE--;
}
break;
En esta parte lo que hacemos es decir que si la pila está vacía, que verifique el TOPE y el
band para mostrar el mensaje "No hay elementos para mostrar". y si no ejecutamos el ciclo
for para mostrar los elementos guardados en el arreglo.
case 5:
if (pila.pila_vacia(TOPE, band)) {
System.out.println("\nNo hay elementos para mostrar\n");
} else {
for (int i = TOPE; i > -1; i--) {
System.out.println("\nLos elementos son: " + datos[i] + "\n"); 14
}
}
break;
En estas últimas opciones tenemos las opciones para regresar al menú principal y también
por si el usuario mete un numero incorrecto para una opción.
case 6:
System.out.println("\nregresando..\n");
break;
default:
System.out.println("Opcion incorrecta");
break;
}
} while (op != 6);
En este caso termina la primera opción que sería la de pila.
break;
En esta parte iniciamos con la opción dos que sería el de las colas, donde lo primero que
hacemos es crear un objeto colas de tipo colas1 para que después funcionen con los métodos
que hay guardados en la clase colas1.
case 2:
colas1 cola = new colas1();
do {
En esta primera parte hemos creado nuestro menú de opciones que nos dirá que es lo que
podemos hacer dentro de la cola.
15
System.out.println("\n======= MENU ======\n");
System.out.print("1. Verificar si la cola esta vacia\n");
System.out.print("2. Verificar si la cola esta llena\n");
System.out.print("3. Agregar un elemento a la cola\n");
System.out.print("4. Eliminar un elemento de la cola\n");
System.out.print("5. Mostrar elementos guardados\n");
System.out.print("6. Regresar al menu principal\n");
op = enteros.nextInt();
En esta parte se guarda la opción que queremos realizar dentro de la cola, y como siguiente
paso creamos un switch para cada una de las opciones que tendrá el menú, como primer paso
tenemos la opción para verificar si la cola está vacía haciendo uso de nuestro objeto cola y
del método cola vacía.
switch (op) {
Como parte de la primera opción tenemos la opción de verificar si la pila está vacía en este
caso hacemos uso de nuestro método alojado en la clase colas1 y también de lo que hayamos
guardado dentro de la cola si se confirma que no hay elementos entonces se arroja el mensaje
"La cola no tiene elementos".
case 1:
if (cola.cola_vacia(FRENTE, FINAL, band)) {
System.out.println("\nLa cola esta vacia\n");
FRENTE = -1;
FINAL = 0;
} else {
System.out.println("\nLa cola tiene elementos\n");
}
break;
En la opción dos hacemos uso de nuestro objeto cola con la ayuda de nuestro método
cola_llena alojado en la clase colas1 es ahí donde se preguntará si la cola está llena. si no está
llena entonces arrojara el mensaje "Aún queda espacio en la cola".
16
case 2:
if (cola.cola_llena(FINAL, MAX, band)) {
System.out.println("\nLa cola está llena\n");
} else {
System.out.println("\nAun queda espacio en la cola\n");
}
break;
Para este caso lo primero que hacemos es verificar si la cola está llena mediante el objeto
cola y el método cola_llena la cola está en la clase colas1. sí aún hay espacio dentro de la
cola, entonces aun nos dejara llenar datos dentro de nuestro arreglo cadena.
case 3:
if (cola.cola_llena(FINAL, MAX, band)) {
System.out.println("\nLa cola está llena, no puede ingresar más
elementos");
} else {
System.out.println("\nIngrese el dato a agregar en la cola");
datos[FINAL] = cadena.nextLine();
FINAL++;
}
break;
Aquí lo único que hacemos es verificar si la cola está vacía mediante el uso del método
cola_vacia.
case 4:
if (cola.cola_vacia(FRENTE, FINAL, band)) {
System.out.println("\nLa cola esta vacia\n");
} else {
FRENTE++;
} 17
break;
Lo que pasa en esta parte es que, si la cola está vacía nos dirá que no hay elementos, pero si
los hay mostrara elementos guardados en su posición.
case 5:
if (cola.cola_vacia(FRENTE, FINAL, band)) {
System.out.println("\nNo existen elementos para mostrar en la
cola\n");
} else {
for (int i = FRENTE + 1; i < FINAL; i++) {
System.out.println("\nLos elementos en la cola son: " + datos[i]);
}
}
break;
En esta parte tenemos dos opciones una es para regresar al menú principal y otra es por si el
usuario introduce una opción incorrecta.
case 6:
System.out.println("\nRegresando...\n");
break;
default:
System.out.println("\nOpcion Incorrecta\n");
}
} while (op != 6);
Aquí ya se han terminado las opciones para las colas y también por último tenemos la
finalización con dos opciones restantes que esta van dentro del menú colas o pilas que como
vemos una es para regresar y la otra es por i el usuario introduce una opción incorrecta.
break;
18
case 0:
System.out.println("\nSALIENDO...");
break;
default:
System.out.println("\nOpcion incorrecta\n");
break;
}
} while (op != 0);
}
}
En esta segunda parte creamos las los métodos de las clases colas1 y pilas1:
package Unidad3;
class pilas1 {
En este caso creamos nuestro método para saber si la pila está vacía entonces creamos un
método pila_vacia de tipo booleano que tendrá un parámetro Tope de tipo entero y otro
parámetro band que será de tipo booleano, pues bien, entonces como veremos a continuación
decimos que si el TOPE es igual a un valor de -1 entonces el band será verdadero eso
significara que la pila está vacía, y si no, si el valor que esta guardado dentro no es menor a
-1 entonces el band será falso. entonces como último paso retornamos el valor que se tenga
guardado.
public boolean pila_vacia(int TOPE, boolean band) {
if (TOPE == -1) {
band = true;
} else {
band = false;
}
return band;
} 19
Para este caso creamos un método de tipo booleano que tendrá un parámetro TOPE de tipo
entero, otro parámetro Max que será de tipo entero y por último tendremos un parámetro
band de tipo booleano, entonces decimos que si el TOPE es igual a MAX -1 entonces la
bandera será verdadera, si el TOPE no es igual a MAX - 1 entonces la bandera será false, por
último, retornaremos el valor que arroja del dato o datos que tengamos guardado.
boolean pila_llena(int TOPE, int MAX, boolean band) {
if (TOPE == MAX - 1) {
band = true;
} else {
band = false;
}
return band;
}
}
package Unidad3;
public class colas1 {
En esta clase declaramos un método que se llama cola_vacia, el cual tendrá un parámetro
llamado FRENTE de tipo entero, Uno llamado FINAL de tipo entero y otro llamado band
que será de tipo booleano, pues bien, aquí lo que hacemos es que si el frente es igual a un
FINAL con -1, entonces decimos que la bandera es verdadera y si no se cumple esa condición
entonces decimos que el band es falso, ya sea que se cumpla una de las condiciones
retornamos el resultado obtenido.
public boolean cola_vacia(int FRENTE, int FINAL, boolean band) {
if (FRENTE == FINAL - 1) {
band = true;
} else {
band = false;
} 20
return band;
}
Para este caso creamos un método llamado cola_llena con los siguientes parámetros: Uno de
llama FINAL que es de tipo entero, uno llamado MAX que también es tipo entero y por
último tenemos uno llamado band que es tipo booleano, pues bien, lo que hacemos aquí es
que si FINAL es igual a MAX -1 entonces el resultado que tendrá será band verdadero si no
el resultado obtenido es mayor a MAX -1 entonces band será falso. ya sea que se dé uno de
los dos casos retornamos el valor obtenido.
boolean cola_llena(int FINAL, int MAX, boolean band) {
if (FINAL == MAX - 1) {
band = true;
} else {
band = false;
}
return band;
}
}
RESULTADOS
21
22
23
CONCLUSIÓN
Las estructuras lineales ofrecen una amplia gama de variaciones y formas de agrupación que
permiten que el diseñador de diferentes disciplinas experimente con diferentes alternativas y 24
seleccionar a la que mejor se adecua a sus necesidades. Las estructuras lineales son una
técnica constructiva que puede ser empleada en una gran variedad de diciplinas como son la
arquitectura, el diseño estructural, el diseño de exteriores, el diseño de interiores, mobiliarios
y entre muchos otros.