1/27/15Unidad III Estructuras Lineales - Estructura de Datos Es t r uct ur a d e D at os Estructura de Datos Bu sca r en est e si t i o Estructura de Datos > Unidad I Introducción a las estructuras de datos Unidad III Estructuras Lineales Unidad II Recursividad Pilas Unidad III Estructuras Lineales 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). Unidad IV Estructuras no lineales Unidad V Métodos de ordenamiento Unidad VI Métodos de búsqueda Unidad VII Análisis de los algoritmos Mapa del sitio 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 https://sites.google.com/site/estdatjiq/home/unidad-iii 1/42 1/27/15 Unidad III Estructuras Lineales - Estructura de Datos Translate 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 boolean empty( ) https://sites.google.com/site/estdatjiq/home/unidad-iii Descripción Devuelve true si la pila esta vacía y false si la pila contiene elementos. 2/42 1/27/15 Unidad III Estructuras Lineales - Estructura de Datos 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 Busca elemento en la pila. Si lo search(Object encuentra, devuelve su desplazamiento elemento) 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. Ejercicios de Pila Jueves 15 de Septiembre 2011 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. https://sites.google.com/site/estdatjiq/home/unidad-iii 3/42 1/27/15 Unidad III Estructuras Lineales - Estructura de Datos 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 Ejercicio extraclase (Solo practica) Implementar la solución de las torres de Hanoi mediante Pilas El juego de las torres de Hanoi, o torres de diamante, es un juego oriental muy antiguo que hoy se conoce en todo el mundo. Consta de tres columnas y una serie de discos de distintos tamaños. Los discos están acomodados de mayor a menor en una de las columnas. El juego consiste en pasar todos los discos a otra de las columnas y dejarlos acomodados como estaban: de mayor a menor. L a s .. r e g l a s .. d e l .. j u e g o .. s o n .. l a s .. s i g u i e n tes: https://sites.google.com/site/estdatjiq/home/unidad-iii 4/42 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). 2 Para cambiar los discos de lugar se pueden usar las tres columnas del juego.com/site/estdatjiq/home/unidad-iii 5/42 . (a+b) = ab+ (a+b)/(c*d) = 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).1/27/15 Unidad III Estructuras Lineales . es decir que los distintos discos se pueden ir acomodando en las columnas según convenga. Dar click sobre la siguiente imagen y te mostrara la solución Buscar notación infija y notación Polaca (postfija). en esta notación se sitúa el operador entre sus operandos. https://sites.google. 3 Nunca deberá quedar un disco grande sobre un disco chico.Estructura de Datos Sólo se puede mover un disco cada vez. 1/27/15 Unidad III Estructuras Lineales . La ventaja de la notación postfija es que no se requieren de paréntesis para su evaluación.google. y en esta notación el símbolo operador se coloca delante de sus operandos. Operadores Operador Símbolo Prioridad Paréntesis () Potencia ^ Mas alta Multiplicación / División * / Suma / Resta https://sites. Primero hay que saber que en una expresión se tienen operadores y que estos tienen cierta prioridad. 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. 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.com/site/estdatjiq/home/unidad-iii +- Mas Baja 6/42 .Estructura de Datos 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. 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). 3.Estructura de Datos 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.3.4. Inicializar la pila 2.google.3 Si el elemento es un operador distinto de ‘)’ entonces: 2.4 Si el elemento es el operador ‘)’ entonces: 2. 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) https://sites.1 Si la pila está vacía se mete en la pila.1 Leer un carácter de la expresión 2. Repetir hasta que no haya caracteres en la expresión de entrada 2.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.1/27/15 Unidad III Estructuras Lineales .com/site/estdatjiq/home/unidad-iii 7/42 .1 Se sacan operadores de la pila hasta encontrar el paréntesis ‘(‘ que se elimina (las expresiones postfijas no llevan paréntesis) 3. Volvemos a 2. 2.3 2.2 Si es un operando se pasa a la expresión postfija de salida 2. - 1 Expresión postfija a evaluar A*B / (A+C) Evaluación de una Notación Postfija Pseudocódigo 1.google.) 5 ( 0 ^ 4 ^ 3 /.com/site/estdatjiq/home/unidad-iii 8/42 . Repetir hasta que no haya caracteres en la expresión a evaluar https://sites.Estructura de Datos – Expresión aritmética postfija: AB*AC+/ Tablas de prioridad Notación infija Notación postfija Operador Prioridad Operador Prioridad (. Inicializar la pila 2.- 1 +.1/27/15 Unidad III Estructuras Lineales .* 2 /.* 2 +. 3 Se introduce Z en la cima de la pila 3.2 Se evalúa el resultado de Op1 & Op2 y se almacena en Z 2. Si el elemento es un operando se mete en la pila 2. B=5 y C=6: 45*46+/ https://sites. 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.Estructura de Datos 2.com/site/estdatjiq/home/unidad-iii 9/42 . denominados Op2 y Op1 respectivamente.2.3.3.3.1 Se extraen los dos elementos superiores de la pila.1 Obtener el siguiente item de la expresión 2.google.3 Si el elemento es un operador (denominado &) entonces: 2. 2.1/27/15 Unidad III Estructuras Lineales . es una estructura de datos lineal que permite almacenar elementos por un extremo y extraerlos por el otro. 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. estas dos acciones se deben desarrollar al hacer operaciones con una cola.com/site/estdatjiq/home/unidad-iii 13 10/42 . Insertar un elemento en la cola.google. tomando en cuenta de que si se quiere extraer un elemento de la cola se debe asegurar de que no esté vacía. Al igual que en las pilas. se debe tener el control de la cola.Estructura de Datos Colas Una cola. Por tal motivo. primero en salir). el número 13 push(13) (Los elementos se insertan al final de la cola) 10 https://sites. Las operaciones que aplican a una cola son: - Crear una cola. Revisar si la cola está llena. Revisar cuál es el siguiente elemento en la cola. first out: primero en entrar. Funcionamiento Cola vacía Se va a insertar un elemento en la cola. Revisar si la cola está vacía. o si se quiere insertar un elemento se debe asegurar de que la cola no esté llena. es una estructura FIFO (first in. Extraer un elemento de la cola.1/27/15 Unidad III Estructuras Lineales . 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.com/site/estdatjiq/home/unidad-iii 11/42 . 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. https://sites. 10 13 15 20 5 15 20 5 Sale el valor de 10. 13 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.1/27/15 Unidad III Estructuras Lineales . 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.google. 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). 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).Estructura de Datos Se va a insertar otro elemento en la cola. google.1/27/15 Unidad III Estructuras Lineales .Estructura de Datos 13 15 20 5 20 5 Sale el valor de 13. . utilizando el que este desocupado. Para crear una cola circular se debe tener el control de tres puntos dentro de la cola que son: . el elemento anterior al primero es el último.La posición del primer elemento en la cola (inicio).La posición del último elemento en la cola (final) y . es decir. La cola se controla en forma circular.com/site/estdatjiq/home/unidad-iii 2 3 4 5 6 7 8 4 5 12/42 . sin la necesidad de requerir más espacio. Una cola circular es una estructura de datos lineal que hace un uso más eficiente de la memoria disponible para su almacenamiento. 15 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. Colas Circulares.El tamaño de la cola (máximo) 1 https://sites. 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. google. en una cola circular también se deben controlar estos dos aspectos. como son: tamaño. insertar.com/site/estdatjiq/home/unidad-iii 13/42 . mostrar y salir. 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. . siguiente. https://sites.1/27/15 Unidad III Estructuras Lineales . borrar. Utilizar un arreglo unidimensional para crear una cola circular en donde se puedan realizar las operaciones que aplican a una cola. extraer. Ejercicio.Estructura de Datos 0 ini 1 2 3 4 5 fin max 0 1 2 3 fin ini 4 5 max Tomando en cuenta que en una cola simple se controlan las operaciones cola vacía y cola llena.La cola circular está vacía cuando el inicio de la cola se encuentra fuera del arreglo. Por ejemplo cuando llega una persona con discapacidad al banco este debe de atenderse primero. ambulancias. pero si llega alguien con mayor prioridad entonces este debe de atender primero.Estructura de Datos Doble Cola o Bicola. Los datos entran por un solo extremo siempre no importando la prioridad. utilizando un criterio de prioridad. aunque exista gente antes que ella. primero en salir. https://sites. Una doble cola o bicola es una estructura de datos lineal para almacenar elementos. o en el caso de las autopistas para el caso de pase de policías.com/site/estdatjiq/home/unidad-iii 14/42 .1/27/15 Unidad III Estructuras Lineales . los cuales se pueden ingresar y extraer por cualquiera de los dos lados de la cola. Este tipo de estructuras tiene dos variantes: - Doble cola con entrada restringida. Estas colas obedecen a que en ocasiones especiales es necesario invalidar la regla primero en entrar.google. Permite la extracción de los elementos por cualquiera de los dos lados y la inserción solo por el final de la cola. bomberos no necesitan formarse y entonces el proceso de la cola cambia en esas situaciones. google.Estructura de Datos Ejemplo del funcionamiento: Cola vacía Se va a insertar un elemento en la cola. ya que no hay espacio para almacenar ningún otro valor.1/27/15 Unidad III Estructuras Lineales . 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 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 10 push(10)(Los elementos se insertan al final de la cola) 10 Se va a insertar otro elemento en la cola. Se extrae un valor de la cola llamando al método pop() con prioridad 1 (el valor se sacan del inicio). 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. https://sites.com/site/estdatjiq/home/unidad-iii 15/42 . 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. 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 vacia. 13 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).Estructura de Datos 10 13 15 20 5 15 20 5 Sale el valor de 10. 13 15 20 5 20 5 Sale el valor de 13.com/site/estdatjiq/home/unidad-iii 16/42 . https://sites.google. 15 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.1/27/15 Unidad III Estructuras Lineales . 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.Estructura de Datos - Doble cola con salida restringida. y si es de menor prioridad se inserta al final de la cola. pero si llega alguien con mayor prioridad se debe de insertar al inicio de 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 https://sites.1/27/15 Unidad III Estructuras Lineales .com/site/estdatjiq/home/unidad-iii 13 15 17/42 . Ejemplo del funcionamiento: Cola vacía Se va a insertar un elemento en la cola. La extracción de los datos es igual para todos los elementos por el mismo lado.google. Permite la inserción de los elementos por cualquiera de los dos lados y la extracción solo por el inicio de la cola. Estructura de Datos Se va a insertar otro elemento en la cola. 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). 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. Se extrae un valor de la cola llamando al método pop() (el valor se sacan del inicio).google.com/site/estdatjiq/home/unidad-iii 18/42 . 20 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.1/27/15 Unidad III Estructuras Lineales . 10 Al sacar el valor de 20 queda con espacio vacío en la https://sites. ya que no hay espacio para almacenar ningún otro valor. 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. 5 20 10 13 15 10 13 15 Sale el valor de 5. 20 10 13 15 13 15 Sale el valor de 20. De esta manera los nodos pueden localizarse en cualquier parte de la memoria.Estructura de Datos primera posición por lo que se debe de recorrer para que quede espacio para almacenar un nuevo valor. A diferencia de los vectores. para ello debe comprender cuatro conceptos fundamentales que son: https://sites. 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. Lo más recomendable y flexible para la creación de un nodo es utilizar un objeto por cada nodo. Las listas enlazadas permiten almacenar información en posiciones de memoria que no sean contiguas. 3. Una lista enlazada o estructura ligada. en donde cada nodo puede almacenar datos y ligas a otros nodos.google. Estos nodos poseen dos campos uno para almacenar la información o valor del elemento y otro para el enlace que determina la posición del siguiente elemento o nodo de la lista. Nodo. para almacenar la información contienen elementos llamados nodos.3 Listas enlazadas. utilizando la referencia que lo relaciona con otro nodo dentro de la estructura.com/site/estdatjiq/home/unidad-iii Clase auto-referenciada.1/27/15 Unidad III Estructuras Lineales . es una estructura lineal que almacena una colección de elementos generalmente llamados nodos. Campo de enlace y 19/42 . Las listas enlazadas son estructuras dinámicas que se utilizan para almacenar datos que están cambiando constante mente. las estructuras dinámicas se expanden y se contraen haciéndolas más flexibles a la hora de añadir o eliminar información. que hace referencia (guarda la dirección) a otro nodo. Nodo siguiente. Cada nodo es un objeto compuesto que guarda una referencia a un elemento (dato) y una referencia a otro nodo (dirección). El campo de enlace es la variable de instancia que contiene el tipo que corresponde con el nombre de la clase (para el caso anterior variable siguiente). Borrado de un elemento. public clase Nodo { Object elemento. El enlace es el contenido del campo de enlace. La referencia que guarda un nodo a otro nodo se puede considerar un enlace o un puntero hacia el segundo nodo y https://sites. 3.google.1 Simples. Una lista enlazada simple es una colección de nodos que tienen una sola dirección y que en conjunto forman una estructura de datos lineal.1/27/15 Unidad III Estructuras Lineales . El nodo es un objeto creado a partir de una clase autoreferenciada.Estructura de Datos - Enlace Una clase auto-referenciada es una clase con al menos un campo cuyo tipo de referencia es el nombre de la misma clase.com/site/estdatjiq/home/unidad-iii 20/42 . Las listas enlazadas se dividen en: Listas enlazadas simples (con una sola dirección) y Listas enlazadas dobles (con dos direcciones). Las operaciones que se pueden hacer con una lista son: - Inserción de un elemento. //métodos } El código anterior es una clase auto-referenciada porque su campo siguiente tiene el tipo Nodo. Búsqueda de un elemento.3. Recorrido de la lista. Un nodo de una lista enlazada simple puede determinar quien se encuentra después de él pero no puede determinar quien se encuentra antes. El primer nodo de una lista recibe el nombre de cabeza.google.1/27/15 Unidad III Estructuras Lineales . Operaciones Inserción de elementos Al final de la lista · Verificar si la lista está vacía o Si está vacía la lista es decir inicio==null § Se crea un nuevo nodo o se asigna un nuevo nodo al inicio § Final se hace que apunte también al inicio ya que es el único nodo. cabecera o primero y el último es llamado final. cabeza final Los elementos cabeza y final de la figura son referencia creadas a partir de la clase que se crean los nodos. o Si ya existe por lo menos un nodo § Se crea o se asigna un nuevo nodo a https://sites.com/site/estdatjiq/home/unidad-iii 21/42 . cola o último (es el único nodo con la referencia a otro objeto como nula). ya que solo cuenta con la dirección del nodo siguiente pero no del anterior.Estructura de Datos el salto que los relaciona recibe el nombre de salto de enlace o salto de puntero. Estructura de Datos fin. o Si ya existe por lo menos un nodo § Se crea un nodo que se hace que apunte al inicio nuevo.com/site/estdatjiq/home/unidad-iii 22/42 . § Final se hace que apunte al nuevo nodo ya que ahora sera el final.sig=inicio § Se hace que inicio ahora apunte al primer elemento que es nuevo inicio=nuevo En alguna posición especifica · Verificar si la lista está vacía o posición es igual a cero o Si está vacía la lista es decir inicio==null § Se crea un nuevo nodo o se asigna un nuevo nodo al inicio § Final se hace que apunte también al https://sites. Al inicio de la lista · Verificar si la lista está vacía o Si está vacía la lista es decir inicio==null § Se crea un nuevo nodo o se asigna un nuevo nodo al inicio § Final se hace que apunte también al inicio ya que es el único nodo.1/27/15 Unidad III Estructuras Lineales .sig=nuevo.google. Eliminación de elementos Del inicio de la Lista · Verificar si la lista está vacía o Verificar si hay un solo nodo https://sites. o Si ya existe por lo menos un nodo § Se recorre la lista contando las posiciones de los elementos dentro de la lista (pos++).Estructura de Datos inicio ya que es el único nodo.1/27/15 Unidad III Estructuras Lineales . if(cont==posi && sig!=null) · Se crea un nuevo nodo y se hace que apunte al siguiente nodo y además que el nodo anterior apunte al nuevo nodo.sig=sig y ant. § Si se localiza la posición buscada y siguiente es diferente de null.google. § Si no se localiza la posición (indica que se dio una posición mayor a la cantidad de elementos. nuevo.sig=nuevo. además se debe de recorrer conociendo el nodo anterior y el siguiente con el fin de reorganizar la lista al insertar un nuevo elemento. entonces se agrega el elemento al final de la lista.com/site/estdatjiq/home/unidad-iii 23/42 . 1/27/15 Unidad III Estructuras Lineales .sig sea diferente del final o del siguiente.google. (debe de construir primero el nodo anterior para poder comparar con siguiente) § Al llegar al final entonces el anterior se debe de poner como final.sig como null De cierta posición · Verificar si la lista está vacía o Verificar si hay un solo nodo https://sites. y a final.com/site/estdatjiq/home/unidad-iii 24/42 .Estructura de Datos § Si hay un solo nodo se pone ini=fin=null o Si hay más de un nodo § El inicio es ahora el siguiente ini=ini.sig Del final de la Lista · Verificar si la lista está vacía o Verificar si hay un solo nodo § Si hay un solo nodo se pone ini=fin=null o Si hay más de un nodo § Se debe recorrer la lista llevando el anterior y el siguiente mientras que anterior. § Si no se localiza la posición se elimina del final de la lista. § Si cont==0 entonces se elimina del inicio § En otro caso si cont==pose y además sig!=null se pone a anterior.sig==null entonces se debe poner como final. fin=ant. Un nodo de una lista enlazada doble puede determinar https://sites. Una lista enlazada doble es una colección de nodos que cuentan con dos direcciones en cada uno de sus nodos y que en conjunto forman una estructura de datos lineal.1/27/15 Unidad III Estructuras Lineales . Dobles. Cada nodo es un objeto compuesto que guarda una referencia a un elemento (dato). siguiente y el contador de las posiciones mientras que siguiente sea diferente de null.Estructura de Datos § Si hay un solo nodo se pone ini=fin=null o Si hay más de un nodo § Se debe recorrer la lista llevando el anterior. una referencia al nodo anterior (dirección predecesora) y una referencia al nodo siguiente (dirección sucesora).sig para eliminar a siguiente.sig la dirección de siguiente. § También hay que verificar si es el último elemento para ponerlo como final si anterior.com/site/estdatjiq/home/unidad-iii 25/42 .google. sig=nuevo o El nodo nuevo en su campo anterior se hace que apunte a fin. Inserción Al final de la lista · Si la lista está vacía o Se crea el nuevo nodo o Se pone a inicio a que apunte al nuevo nodo ini=nuevo o Se pone a final a que apunte al inicio fin=ini · Si hay por lo menos un nodo o Se crea el nuevo nodo o El ultimo nodo en su campo siguiente se hace que apunte al nuevo nodo fin.1/27/15 Unidad III Estructuras Lineales .Estructura de Datos quien se encuentra después de él y quien se encuentra antes de él. Operaciones Inserción (Al final del la lista. del final de la lista y de cierta posición de la lista).com/site/estdatjiq/home/unidad-iii 26/42 .google.ant=fin o Por último se pone a nuevo como final. https://sites. ya que cuenta con las direcciones de los nodos siguiente y anterior. nuevo. al inicio de la lista y en cierta posición de la lista) Recorrido (Por el inicio y por el final) Eliminación (Del inicio de la lista. 1/27/15 Unidad III Estructuras Lineales . nuevo. En una posición específica · Si la lista está vacía o Se crea el nuevo nodo o Se pone a inicio a que apunte al nuevo nodo ini=nuevo o Se pone a final a que apunte al inicio fin=ini https://sites.google.ant=nuevo o El nodo nuevo en su campo siguiente se hace que apunte a inicio.sig=ini o Por último se pone a nuevo como inicio.com/site/estdatjiq/home/unidad-iii 27/42 . ini=nuevo.Estructura de Datos final=nuevo Al inicio de la lista · Si la lista está vacía o Se crea el nuevo nodo o Se pone a inicio a que apunte al nuevo nodo ini=nuevo o Se pone a final a que apunte al inicio fin=ini · Si hay por lo menos un nodo o Se crea el nuevo nodo o El inicio en su campo anterior se hace que apunte al nuevo nodo ini. google.com/site/estdatjiq/home/unidad-iii 28/42 . cont==posi && temp!=null https://sites. o Al finalizar el recorrido a la posición buscada § Puede ser que cont se quede con 0 · Entonces debe de insertar el elemento al inicio § Pero si encontró la posición y cont tiene el mismo valor. § Iniciar el recorrido mediante un ciclo mientras que temp!=null y además cont sea diferente de la posición donde se quiere insertar el nuevo elemento. además debe de checar que temp no se quede con null. Nodo temp=ini § Debe definir una variable entera que cuente las posiciones dentro de la lista.Estructura de Datos · Si hay por lo menos un nodo o Se crea el nuevo nodo o Se realiza un recorrido llevando solo un nodo hasta llegar a la posición especificada.1/27/15 Unidad III Estructuras Lineales . § Debe de definir un nodo que sea la referencia del primer nodo. com/site/estdatjiq/home/unidad-iii 29/42 . Recorridos Recorrido a partir del inicio https://sites.sig=nuevo · Se hace que nuevo en su campo siguiente se hace que apunte a temp. o nuevo.google.ant · Anterior en su campo siguiente se hace que apunte al nuevo nodo.sig=temp · Se crea la liga para que nuevo en su campo anterior apunte a anterior o nuevo.Estructura de Datos · Se crea un nuevo nodo · Se crea una referencia que apunte al nodo anterior Nodo o ant=temp.1/27/15 Unidad III Estructuras Lineales . o ant.ant=ant § Pero si la posición es mayor que la cantidad de elementos que tiene la lista entonces se debe de agregar al final de la lista. Nodo temp=fin · Se realiza el recorrido a través de un ciclo mientras que temp!=null o Se imprime el valor al que hace referencia temporal en ese momento temp.google.Estructura de Datos · Se crea una referencia de Nodo para empezar el recorrido a partir del inicio.num o Se retrocede al elemento anterior en la lista.ant Eliminar Del inicio de la lista https://sites. Temp=temp. Nodo temp=ini · Se realiza el recorrido a través de un ciclo mientras que temp!=null o Se imprime el valor al que hace referencia temporal en ese momento temp.1/27/15 Unidad III Estructuras Lineales . Temp=temp.com/site/estdatjiq/home/unidad-iii 30/42 .num o Se avanza al siguiente elemento de la lista.sig Recorrido a partir del final · Se crea una referencia de Nodo para empezar el recorrido a partir del inicio. com/site/estdatjiq/home/unidad-iii 31/42 . · Ini=sig Del final de la lista · Si la lista no está vacía o Si hay un solo elemento § Ini=fin=-1 o Si hay por lo menos un elemento § Crear una referencia del nodo anterior al final https://sites.ant=null § Poner el siguiente como el nodo del inicio.1/27/15 Unidad III Estructuras Lineales .sig.Estructura de Datos · Si la lista no está vacía o Si hay un solo elemento § ini=fin=-1 o Si hay por lo menos un elemento § Crear una referencia del nodo que sigue del inicio · Nodo sig=ini.sig=null Poner a siguiente en el campo anterior a null · Sig.google. § Eliminar la liga del inicio al siguiente elemento · § ini. google.sig=null § Eliminar la liga del final en su campo anterior · Fin.ant=null § Poner al nodo anterior como final · Fin=ant De una posición especifica · Verificar si la lista no está vacía o Si hay un solo elemento § Ini=fin=-1 o Si hay por lo menos un elemento o Se realiza un recorrido hasta la posición buscada a partir del inicio.ant Poner a null el campo siguiente de anterior · ant.1/27/15 Unidad III Estructuras Lineales .Estructura de Datos · § Nodo ant=fin.com/site/estdatjiq/home/unidad-iii 32/42 .sig!=null § Nodo Temp=ini int cont=0 o Si al hacer el recorrido cont==0 entonces se elimina del inicio o Si el cont==pos y temp.sig!=null entonces se elimina de esa posición § Se crean referencias del anterior y https://sites. llevando un contador mientras cont!=pos y temp. un arreglo que puede cambiar su tamaño de forma dinámica.sig=sig · sig. El primer constructor crea un objeto llamado lista de una capacidad inicial de 10 elementos. permite crear una estructura de datos con bloques de memoria continuos similar a un arreglo unidimensional.google. se lanza la excepción IllegalArgumentException si la capacidad es inferior a 1 y https://sites. y se encuentra definida en la librería util. sig=temp. ArrayList lista=new ArrayList(Collection colección). colas y listas.com/site/estdatjiq/home/unidad-iii 33/42 . el segundo constructor crea una lista de una capacidad inicial indicada por un valor de tipo entero.sig § Se establecen las ligas entre ant y sig · ant. Esta estructura puede ser ideal para el manejo de pilas.Estructura de Datos del siguiente · Nodo ant=temp. ArrayList lista=new ArrayList(int capacidad). El objeto creado a partir de la clase ArrayList es por lo tanto un arreglo flexible.ant.ant=null o Si no se encuentra la posición se inserta al final Listas con la clase ArrayList.1/27/15 Unidad III Estructuras Lineales .ant=ant § Se eliminan las ligas de temp · temp. es decir. Constructores de la clase ArrayList: ArrayList lista=new ArrayList().sig=null · temp. La clase ArrayList. com/site/estdatjiq/home/unidad-iii 34/42 .Estructura de Datos el tercer constructor crea una lista con la colección de elementos que se pasan como argumento apoyándose de la clase Collection. https://sites. lista. clean() posicion.clone(). var_boolean=lista. add() Inserta un elemento al final de la lista retornando un valor boleano si se pudo insertar o no. lanza la excepción IndexOutOfBoundsException si la posición está fuera del tamaño de la lista.add(Object elemento). Inserta un elemento en la posición indicada desplazando los demás elementos una posición hacia el final de la lista.clean. Métodos de la clase ArrayList: Método Función del método y sintaxis. clone() Regresa una copia de la lista.add(int elemento).google. lista.1/27/15 Unidad III Estructuras Lineales . Object Elimina todos los elementos de la lista. lista_destino=lista. https://sites. isEmpty() Retorna true si la lista está vacía o false si no lo está. var_boolean=lista.Estructura de Datos contains() Retorna un valor boleano si el elemento se encuentra en la lista (true si esta y false si no).indexOf(Object elemento).contains(Object elemento).com/site/estdatjiq/home/unidad-iii 35/42 . indexOf() Retorna la posición donde encontró la primera coincidencia con el elemento que está buscando o un -1 en caso de no encontrarlo.1/27/15 Unidad III Estructuras Lineales . var_int=lista.isEmpty().ensureCapacity(int capacidad). get() Retorna el elemento de la posición indicada o se ejecuta la excepción IndexOutOfBoundsException si la posición está fuera del número de elementos que contiene la lista. var_boolean=lista. ensureCapacity() Aumenta la capacidad de la lista el número de posiciones indicada. var_Object=lista.get(int posicion). lista.google. lastIndexOf(Object elemento). lista. por el elemento pasado como argumento. var_Object=lista.1/27/15 Unidad III Estructuras Lineales . var_int=lista. https://sites.Estructura de Datos lastIndexOf() Retorna la posición donde encontró la última coincidencia con el elemento que está buscando o un -1 en caso de no encontrarlo.set(int Object elemento). removeRange() Elimina un rango de elementos de la lista desde la posición inicial hasta la posición final -1. ejecuta la excepción IndexOutOfBoundsException si la posición está fuera de los elementos de la lista. remove() Retorna y elimina el elemento de la lista en la posición indicada o genera la excepción IndexOutOfBoundsException si la posición está fuera de la lista. var_Object=lista.google.com/site/estdatjiq/home/unidad-iii posicion. int posicion_final).removeRange(int posicion_incial. set() Retorna y remplaza el elemento que se encuentra en la posición indicada.remove(int posicion). 36/42 . y se encuentra definida en la librería util. trimToSize() Reduce la capacidad de la lista al número de elementos actuales en la lista.size(). Listas con la clase LinkedList. https://sites. permite crear una estructura de datos con nodos llamada lista ligada. size() var_int=lista. Constructores de la clase LinkedList: LinkedList lista=new LinkedList().trimToSize(). lista.Estructura de Datos Retorna el número de elementos en la lista. colas y listas. El objeto creado a partir de la clase LinkedList es por lo tanto una estructura flexible que crece de forma dinámica. El primer constructor crea un objeto llamado lista que es controlado por el inicio y el final de la misma y el segundo constructor crea una lista con la colección de elementos que se pasan como argumento apoyándose de la clase Collection.google.com/site/estdatjiq/home/unidad-iii 37/42 . La clase LinkedList. Está estructura puede ser ideal para el manejo de pilas.1/27/15 Unidad III Estructuras Lineales . LinkedList lista=new LinkedList(Collection colección). lista.google. var_boolean=lista. clean() https://sites. lista. add() Inserta un elemento al final de la lista retornando un valor boleano si se pudo insertar o no. addFirst() posicion. lanza la excepción IndexOutOfBoundsException si la posición está fuera del tamaño de la lista. Object Inserta un elemento al principio de la lista.addFirst(Object elemento).add(int elemento).1/27/15 Unidad III Estructuras Lineales .addLast(Object elemento). addLast() Inserta un elemento al final de la lista.add(Object elemento). lista.com/site/estdatjiq/home/unidad-iii Elimina todos los elementos de la lista.Estructura de Datos Métodos de la clase LinkedList: Método Función del método y sintaxis. Inserta un elemento en la posición indicada desplazando los demás elementos una posición hacia el final de la lista. 38/42 . var_boolean=lista.Estructura de Datos lista.google. var_Object=lista.clone(). var_Object=lista. contains() Retorna un valor boleano si el elemento se encuentra en la lista (true si esta y false si no). si la lista está vacía. lista_destino=lista.com/site/estdatjiq/home/unidad-iii Retorna el último elemento de la lista o genera la excepción NoSuchElementException. getLast() https://sites. clone() Regresa una copia de la lista.clean.1/27/15 Unidad III Estructuras Lineales . si la lista está vacía.contains(Object elemento).get(int posicion). 39/42 . getFirst() Retorna el primer elemento de la lista o genera la excepción NoSuchElementException.getFirst(). get() Retorna el elemento de la posición indicada o se ejecuta la excepción IndexOutOfBoundsException si la posición está fuera del número de elementos que contiene la lista. indexOf() Retorna la posición donde encontró la primera coincidencia con el elemento que está buscando o un -1 en caso de no encontrarlo.com/site/estdatjiq/home/unidad-iii Retorna y elimina el primer elemento de la lista o genera la excepción NoSuchElementException.isEmpty().Estructura de Datos var_Object=lista.getLast(). si la lista está vacía. lastIndexOf() Retorna la posición donde encontró la última coincidencia con el elemento que está buscando o un -1 en caso de no encontrarlo. var_Object=lista. isEmpty() Retorna true si la lista está vacía o false si no lo está.remove(int posicion). var_int=lista.google. removeFirst() https://sites. 40/42 . var_boolean=lista. var_int=lista.indexOf(Object elemento).lastIndexOf(Object elemento). remove() Retorna y elimina el elemento de la lista en la posición indicada o genera la excepción IndexOutOfBoundsException si la posición está fuera de la lista.1/27/15 Unidad III Estructuras Lineales . 1/27/15 Unidad III Estructuras Lineales . set() Retorna y remplaza el elemento que se encuentra en la posición indicada. var_Object=lista. Retorna el número de elementos en la lista. size() posicion. https://sites.set(int Object elemento).Estructura de Datos var_Object=lista. por el elemento pasado como argumento. removeLast() Retorna y elimina el último elemento de la lista o genera la excepción NoSuchElementException.size(). var_Object=lista.removeFirst().google.removeFirst().com/site/estdatjiq/home/unidad-iii 41/42 . si la lista está vacía. var_int=lista. Ejercicios Finales a) Implementar un pila a través de una lista simple b) Implementar un cola circular a través de una lista doble c) Implementar una cola con entrada restringida a través de una lista doble d) Implementar una cola con salida restringida a través de una lista doble. ejecuta la excepción IndexOutOfBoundsException si la posición está fuera de los elementos de la lista. Č . 1 7 de voct.com/site/estdatjiq/home/unidad-iii 42/42 .google.1/27/15 Unidad III Estructuras Lineales .Estructura de Datos e) Realizar una lista simple con nombres de personas.1 de 201 3 8:52 ď ĉ Ejercicios de List… Othoniel Riv era. Sig n in | Recen t Sit e A ct iv it y | Repor t A bu se | Pr in t Pa g e | Powered By Googl e Si t es https://sites.
Report "Unidad III Estructuras Lineales - Estructura de Datos"