Beruflich Dokumente
Kultur Dokumente
Semana 2
PRIMERA UNIDAD 1
Competencias
Contenido
Mapa Conceptual
Abstraccin
Encapsulamiento
Principios
POO Modularidad
Herencia
Polimorfismo
Fundamentos de las
estructuras de datos
Definicin
Algoritmos divide y
vencieras Naturaleza
Algoritmos
recursivos
Tipos
1
Universidad Nacional de San Cristbal de Huamanga IS241-Estructura de datos
Los principios de la programacin orientada a objetos segn Booch, son los siguientes:
Abstraccin.
Encapsulamiento.
Modularidad.
Herencia.
Polimorfismo.
Abstraccin
La abstraccin es uno de los medios ms importantes, mediante el cual nos enfrentamos con la
complejidad inherente al software. La abstraccin es la propiedad que permite representar las
caractersticas esenciales de un objeto, sin preocuparse de las restantes caractersticas (no esenciales).
Abstraccin es la tcnica de quitarle a una idea o a un objeto todos los acompaamientos innecesarios
hasta que los deja en una forma esencial y mnima. Una buena abstraccin elimina todos los detalles
poco importantes y le permite enfocarse y concentrarse en los detalles importantes.
Una abstraccin se centra en la vista externa de un objeto, de modo que sirva para separar el
comportamiento esencial de un objeto de su implementacin. Definir una abstraccin significa describir
una entidad del mundo real, no importa lo compleja que pueda ser y, a continuacin, utilizar esta
descripcin en un programa.
El elemento clave de la programacin orientada a objetos es la clase. Una clase se puede definir como
una descripcin abstracta de un grupo de objetos, cada uno de los cuales se diferencia por su estado
especfico y por la posibilidad de realizar una serie de operaciones. Por ejemplo, una pluma estilogrfica
es un objeto que tiene un estado (llena de tinta o vaca) y sobre la cual se pueden realizar algunas
operaciones (escribir, poner o quitar la tapa, llenar de tinta si est vaca, etc.).
La idea de escribir programas definiendo una serie de abstracciones no es nueva, pero el uso de clases
para gestionar dichas abstracciones en lenguajes de programacin ha facilitado considerablemente su
aplicacin.
La abstraccin es un principio de software importante. Una clase bien diseada expone un conjunto
mnimo de mtodos cuidadosamente considerados que proporcionan el comportamiento esencial de
una clase en una forma fcil de usar. Crear buenas abstracciones de software no es fcil. Encontrar
buenas abstracciones generalmente requiere de un entendimiento muy claro del problema y de su
contexto, gran claridad de pensamiento y amplia experiencia.
Existe un principio muy importante relacionado con la abstraccin, y esta es, la Dependencia mnima. Las
mejores abstracciones de software hacen que las cosas complejas sean simples. Logran esto al ocultar
por completo los aspectos no esenciales de una clase. Estos aspectos no esenciales, una vez que han sido
debidamente ocultados, no se pueden ver, ni usar, ni depender de ellos. Este principio de dependencia
mnima es lo que hace que la abstraccin sea tan importante. El cambio es normal en el desarrollo de
software. Lo mejor que puede hacer es minimizar el impacto de un cambio cuando ste sucede. Y cuanto
menos dependa de algo, menos se ver afectado cuando cambie.
Los lenguajes orientados a objetos proporcionan la Encapsulacin. La encapsulacin se puede utilizar
para aplicar el concepto de Abstraccin.
2
Universidad Nacional de San Cristbal de Huamanga IS241-Estructura de datos
Ejemplo
Por ejemplo tienes un carro y quieres "abstraerlo" para hacer un programa en el que puedas realizar
operaciones en base al carro.
Puedes crear una clase con las caractersticas del carro por ejemplo.
class carro {
int cantidadDePuertas;
int modelo;
Color colorcito;
String linea;
public carro (int cantidadDePuertas, int modelo, Color colorcito, String linea){
this.cantidadDePuertas = cantidadDePuertas;
this.modelo = modelo;
this.colorcito = colorcito;
this. linea = linea;
}
3
Universidad Nacional de San Cristbal de Huamanga IS241-Estructura de datos
Encapsulamiento
La encapsulacin tambin le permite controlar la forma en que se utilizan los datos y los procedimientos.
Puede utilizar modificadores de acceso, como Private o Protected, para evitar que los procedimientos
externos ejecuten mtodos de clase o lean y modifiquen datos en propiedades y campos. Usted debe
declarar los detalles internos de una clase como Private para evitar que sean utilizados fuera de su clase;
a esta tcnica se le llama ocultamiento de datos. En la clase BankAccount, la informacin del cliente,
como el saldo de la cuenta, se protege de esta forma. Una de las reglas bsicas de la encapsulacin es
que los datos de la clase slo se pueden modificar o recuperar a travs de los procedimientos o mtodos
Property. Ocultar los detalles de implementacin de sus clases evita que se usen de maneras no
deseadas, y le permite modificar esos elementos posteriormente sin riesgo de tener problemas de
compatibilidad. Por ejemplo, versiones posteriores de la clase BankAccount enlistadas ms adelante,
podran cambiar el tipo de datos del campo AccountBalance sin peligro de daar la aplicacin que
depende de que este campo tenga un tipo de dato especfico.
Ejemplo
Cuando se crea una nueva clase en Java, se puede especificar el nivel de acceso que se quiere para las
variables de instancia y los mtodos definidos en la clase:
public
4
Universidad Nacional de San Cristbal de Huamanga IS241-Estructura de datos
Slo las subclases de la clase y nadie ms puede acceder a las variables y mtodos de instancia
protegidos.
private
void MetodoDeMiPaquete(){}
Por defecto, si no se especifica el control de acceso, las variables y mtodos de instancia se declaran
friendly (amigas), lo que significa que son accesibles por todos los objetos dentro del mismo
paquete, pero no por los externos al paquete. Es lo mismo que protected.
Modularidad :
La Modularidad es la propiedad que permite subdividir una aplicacin en partes ms pequeas (llamadas
mdulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicacin en s y de
las restantes partes.
La modularizacin consiste en dividir un programa en mdulos que se puedan compilar por separado,
pero que tienen conexiones con otros mdulos. Al igual que la encapsulacin, los lenguajes soportan la
Modularidad de diversas formas.
La Modularidad es la propiedad de un sistema que permite su descomposicin en un conjunto de
mdulos cohesivos y dbilmente acoplados. Por supuesto no todos los mdulos son iguales: tomar un
programa monoltico y separarlo de forma aleatoria en archivos no es ptimo. Se debe tener en cuenta
los conceptos asociados de dependencia, acoplamiento, cohesin, interfaz, encapsulacin y abstraccin.
Una vez identificado lo que es un buen mdulo, se puede contemplar la reutilizacin de un buen mdulo
como componente.
El Mdulo A depende del Mdulo B si cualquier cambio en el Mdulo B implica que el Mdulo A tambin
tenga que ser modificado. A veces se dice que el Mdulo A es un cliente del Mdulo B, o que el Mdulo B
acta como servidor del Mdulo A. En general, es normal que un mismo mdulo sea tanto cliente como
servidor. Esto significa, que depende de algunos mdulos, mientras que otros mdulos dependen de l.
Incluso es posible que un par de mdulos se tengan uno al otro de cliente; sin embargo, ste es un
ejemplo de dependencia circular, que debe evitarse cuando sea posible debido a que impide la
reutilizacin.
La dependencia a veces se conoce como acoplamiento. Un sistema con muchas dependencias tiene
fuerte acoplamiento. Los buenos sistemas tienen dbil acoplamiento, porque en ese caso los cambios en
una parte del sistema son menos probables de propagarse a travs del sistema.
Los mdulos correctos a menudo tienen la propiedad de que sus interfaces proporcionan una
abstraccin de algn elemento conocido de manera intuitiva que puede, no obstante, ser difcil de
implementar. Este tipo de mdulos se dice que tienen una fuerte cohesin. El mdulo realiza un
conjunto coherente de cosas, pero dentro de lo posible el desarrollador del cliente est protegido de la
informacin irrelevante relativa a cmo el mdulo hace lo que hace.
Resumiendo: Abstraccin es cuando un cliente de un mdulo no necesita saber ms de lo que hay en la
interfaz. Encapsulacin es cuando un cliente de un mdulo no es capaz de saber ms de lo que hay en la
interfaz.
Si un mdulo, de cualquier tamao y complejidad, es una buena abstraccin (tiene fuerte cohesin y
dbil acoplamiento) puede ser factible reutilizarlo en sistemas posteriores, o sustituirlo en el sistema
existente.
5
Universidad Nacional de San Cristbal de Huamanga IS241-Estructura de datos
Ejemplo
PROGRAMA
Programa Principal
datos
Mdulo1 Mdulo2
Datos + Datos1 Datos + Datos2
Jerarqua o Herencia
La Jerarqua es una propiedad que permite la ordenacin de las abstracciones. Las dos jerarquas ms
importantes de un sistema complejo son: estructura de clases (jerarqua es-un (is-a):
generalizacin/especializacin) y estructura de objetos (jerarqua parte-de (part-of): agregacin-
composicin).
Las jerarquas de generalizacin/especializacin se conocen como herencia. Bsicamente, la herencia
define una relacin entre clases, en donde una clase comparte la estructura o comportamiento definido
en una o ms clases (herencia simple y herencia mltiple, respectivamente).
Ejemplo
Deposito Persona
DepositoFijo DepositoAhorr
o
La composicin, es un tipo de relacin esttica por valor, el tiempo de vida del objeto est condicionado
por el tiempo de vida del lo incluye, por ejemplo almacn est compuesto por cuentas, el objeto base se
construir a partir del objeto incluido. Es una relacin por tipo de valor, se representa por un rombo
relleno. Si se borra el objeto almacn tambin se borra el objeto cuenta.
Ejemplo
6
Universidad Nacional de San Cristbal de Huamanga IS241-Estructura de datos
La agregacin es una relacin por referencia, de tipo dinmica, el tipo de vida del objeto incluido es
independiente del que lo incluye. El objeto base utiliza al incluido para su funcionamiento. Si se borra el
objeto almacn sigue existiendo el objeto cliente.
Ejemplo:
Polimorfismo
Por ejemplo, cuando se describe la clase mamferos se puede observar que la operacin comer es una
operacin fundamental en la vida de los mamferos, de modo que cada tipo de mamfero debe poder
realizar la operacin o funcin comer. Por otra parte, una cabra o una vaca que pastan en un campo, un
nio que se come un caramelo y un len que devora a otro animal, son diferentes formas que utilizan
diferentes mamferos para realizar la misma funcin (comer).
El polimorfismo requiere ligadura tarda o postergada (tambin llamada dinmica), y esto slo se puede
producir en lenguajes de programacin orientados a objetos. Los lenguajes no orientados a objetos
soportan ligadura temprana o anterior (tambin llamada esttica), esto significa que el compilador
genera una llamada a un nombre especfico de funcin y el enlazador (linker) resuelve la llamada a la
direccin absoluta del cdigo que se ha de ejecutar. En POO, el programa no puede determinar la
direccin del cdigo hasta el momento de la ejecucin. Cuando se enva un mensaje a un objeto, el
cdigo que se llama no se determina hasta el momento de la ejecucin. El compilador asegura que la
funcin existe y realiza verificacin de tipos de los argumentos y del valor de retorno, pero no conoce el
cdigo exacto a ejecutar.
Ejemplo
package com.practica.polimorfismo;
import java.util.ArrayList;
import java.util.List;
7
Universidad Nacional de San Cristbal de Huamanga IS241-Estructura de datos
calcularArea(lista);
}
7. Algoritmos recursivos
Algo es recursivo si se define en trminos de s mismo (cuando para definirse hace mencin a s
mismo). Para que una definicin recursiva sea vlida, la referencia a s misma debe ser
relativamente ms sencilla que el caso considerado.
- el N 0 es natural
- El N n es natural si n-1 lo es.
Naturaleza de la recursividad
1 para N = 0
1) N! =
8
Universidad Nacional de San Cristbal de Huamanga IS241-Estructura de datos
1 si N = 0 N = 1
2) fibonacci(N) =
fibonacci(N-1)+ fibonacci(N-2) si N > 1
Caracterstica de la recursividad
Siempre existe una forma de salir de la definicin.
Una condicin de salida que es la condicin que no produce otra autollamada. Es un caso donde el
problema puede resolverse sin tener que hacer uso de una nueva llamada a s mismo. Evita la
continuacin indefinida de las partes recursivas.
Una llamada a s mismo (recursiva); normalmente con el valor de los parmetros que cambian en
cada llamada. Relaciona el resultado del algoritmo con resultados de casos ms simples. Se hacen
nuevas llamadas a la funcin, pero estn ms prximas al caso base.
EJEMPLO
ITERATIVO:
RECURSIVO:
9
Universidad Nacional de San Cristbal de Huamanga IS241-Estructura de datos
TIPOS DE RECURSIN
Recursividad directa
O recursividad simple es aquella en cuya definicin slo aparece una llamada recursiva. Se
puede transformar con facilidad en algoritmos iterativos. Recursividad mltiple: Se da cuando
hay ms de una llamada a s misma dentro del cuerpo de la funcin, resultando ms difcil
de hacer de forma iterativa.
Recursividad anidada:
En algunos de los argumentos de la llamada recursiva hay una nueva llamada a s misma.
LA PILA DE RECURSIN
La memoria del ordenador se divide (de manera lgica, no fsica) en varios segmentos (4):
10
Universidad Nacional de San Cristbal de Huamanga IS241-Estructura de datos
Segmento de cdigo: Parte de la memoria donde se guardan las instrucciones del programa en
cdigo de mquina.
Segmento de datos: Parte de la memoria destinada a almacenar las variables estticas.
Montculo: Parte de la memoria destinada a las variables dinmicas.
Pila del programa: Parte destinada a las variables locales y parmetros de la funcin que est siendo
ejecutada.
Se reserva espacio en la pila para los parmetros de la funcin y sus variables locales.
Se guarda en la pila la direccin de la lnea de cdigo desde donde se ha llamado a la funcin.
Se almacenan los parmetros de la funcin y sus valores en la pila.
Al terminar la funcin, se libera la memoria asignada en la pila y se vuelve a la instruccin actual.
En el caso recursivo, cada llamada genera un nuevo ejemplar de la funcin con sus correspondientes
objetos locales:
EJERCICIOS
a). Torres de Hanoi: Problema de solucin recursiva, consiste en mover todos los discos (de
diferentes tamaos) de una aguja a otra, usando una aguja auxiliar, y sabiendo que un disco no
puede estar sobre otro menor que ste.
11
Universidad Nacional de San Cristbal de Huamanga IS241-Estructura de datos
/* Solucion:
1- Mover n-1 discos de A a B
2- Mover 1 disco de A a C
3- Mover n-1 discos de B a C
*/
void Hanoi( n, inicial, aux, final )
{
if( n>0 )
{
Hanoi(n-1, inicial, final, aux );
printf("Mover %d de %c a %c", n, inicial, final );
Hanoi(n-1, aux, inicial, final );
}
}
METODOS RECURSISVOS
Primero debemos decir que la recursividad no es una estructura de datos, sino que es una tcnica
de programacin que nos permite que un bloque de instrucciones se ejecute n veces. Remplaza en
ocasiones a estructuras repetitivas.
Este concepto ser de gran utilidad para el captulo de la estructura de datos tipo rbol.
12
Universidad Nacional de San Cristbal de Huamanga IS241-Estructura de datos
En Java los mtodos pueden llamarse a s mismos. Si dentro de un mtodo existe la llamada a s
mismo decimos que el mtodo es recursivo.
Cuando un mtodo se llama a s mismo, se asigna espacio en la pila para las nuevas variables locales
y parmetros.
Al volver de una llamada recursiva, se recuperan de la pila las variables locales y los parmetros
antiguos y la ejecucin se reanuda en el punto de la llamada al mtodo.
Programa:
void repetir() {
repetir();
}
Problema 2:
Implementacin de un mtodo recursivo que reciba un parmetro de tipo entero y luego llame en forma
recursiva con el valor del parmetro menos 1.
Programa
13
Universidad Nacional de San Cristbal de Huamanga IS241-Estructura de datos
void imprimir(int x) {
System.out.println(x);
imprimir(x-1);
}
Desde la main se llama a la funcin imprimir y se le enva el valor 5. El parmetro x recibe el valor 5.
Se ejecuta el algoritmo de la funcin, imprime el contenido del parmetro (5) y seguidamente se
llama a una funcin, en este caso a s misma (por eso decimos que es una funcin recursiva),
envindole el valor 4.
El parmetro x recibe el valor 4 y se imprime en pantalla el cuatro, llamando nuevamente a la
funcin imprimir envindole el valor 3.
Si continuamos este algoritmo podremos observar que en pantalla se imprime:
5 4 3 2 1 0 ?1 ?2 ?3 . . . . . . . . .
hasta que se bloquee el programa.
Tener en cuenta que cada llamada a una funcin consume 4 bytes por la llamada y en este caso 4
bytes por el parmetro x. Como nunca finaliza la ejecucin completa de las funciones se desborda la
pila esttica por las sucesivas llamadas.
14
Universidad Nacional de San Cristbal de Huamanga IS241-Estructura de datos
ser tomado como un algoritmo de divide y vencers. El nombre decrementa y vencers ha sido
propuesta para la subclase simple de problemas.
La correccin de un algoritmo de divide y vencers, est habitualmente probada una induccin
matemtica, y su coste computacional se determina resolviendo relaciones de recurrencia.
15
Universidad Nacional de San Cristbal de Huamanga IS241-Estructura de datos
Semana 4
PRIMERA UNIDAD
Competencias
Contenido
Estructuras estticas compuestas: Arreglos. Arrays multidimensionales. Utilizacin de arrays como parmetros
cadenas(declaracin inicializacin, asignacin. Mtodos y operador + con cadenas. Clase vector
Lgico
Mapa Conceptual
Fundamentale
s
Carcte
r
Entero
ESTRUCTURAS ESTATICAS
Punto
Flotante
Conjuntos
Compuestas
Arreglos
Esta sentencia indica al compilador que reserve memoria para dos variables del tipo simple
TipoSimple con nombres Identificador1 e Identificador2
En java se representa Se usan para representar nmeros enteros con signo. Hay cuatro tipos:
byte, short, int y long.
Ejemplo1
b. LOGICO
Se usa para almacenar variables que presenten dos estados, que son representados por los
valores true y false. Representan valores en bi-estado, provenientes del lgebra de Boole
Java utiliza dos palabras clave para los estados: true (para verdadero) y false (para falso). Este
tipo de literales es nuevo respecto a C/C++, lenguajes en los que el valor de falso se
representaba por un 0 numrico, y verdadero cualquier nmero que no fuese el 0.
Para declarar un dato del tipo booleano se utiliza la palabra reservada boolean:
Ejemplo2
c. CARCTER
Desde un nivel lgico
Se usa para almacenar caracteres Unicode simples. Debido a que el conjunto de caracteres
Unicode se compone de valores de 16 bits, el tipo de datos char se almacena en un entero sin
signo de 16 bits.
Representan un nico carcter (de la tabla de caracteres Unicode 1.1) y aparecen dentro de un par
de comillas simples. De forma similar que en C/C++. Los caracteres especiales (de control y no
imprimibles) se representan con una barra invertida ('\') seguida del cdigo carcter.
Desde este punto de vista los caracteres se utilizan para poder almacenar letras y su aplicacin
se encuentra en los diferentes programas.
Ejemplo3
d. PUNTO FLOTANTE
Se usan para representar nmeros con partes fraccionarias Hay dos tipos de coma flotante: float y
double. El primero reserva almacenamiento para un nmero de precisin simple de 4 bytes y el
segundo lo hace para un nmero de precisin doble de 8 bytes
Tipo Tamao
Float 4 Byte (32 bits)
double 8 Bytes (64 bits)
Ejemplo4
public class Ejemplo4 {
public static void main(String[] args) {
float numero1,numero2;
System.out.println("Ingrese un nmero decimal ");
Scanner Leer=new Scanner(System.in);
numero1=(float)Leer.nextFloat();
System.out.println("Ingrese otro nmero decimal");
numero2=(float)Leer.nextFloat();
System.out.println("La divisin de los dos nmero es "+numero1/numero2);
}
}
El array es una estructura de acceso directo o aleatorio .Se accede directamente al elemento
de una array a travs del ndice de seleccin.
Constructor
Selector
Extraer el valor
Modificar el valor
Operaciones Complejas
En java un array es un grupo de variables que tienen en mismo nombre, los elementos estn
almacenados en posiciones continuas en memoria, que estos a su vez se diferencia por el
ndice.
TipoDeDato [ ] nombreArray;
Almacenamiento en Memoria
tamaoFisicoArray=numeroElementos * p
conjuntoEntero
0
1
2
3
5
Es una estructura natural para modelar listas de elementos de datos iguales, es fcil de
recorrer, buscar y ordenar, algunos ejemplos pueden ser una lista de palabras o comandos, etc.
Ejemplo5
public class Ejemplo5 {
public static void main(String[] args) {
byte cantNotas, totalNotas=0;
byte[] notas;
System.out.println("Ingrese la cantidad de notas");
Scanner Leer=new Scanner(System.in);
cantNotas= (byte)Leer.nextByte();
notas=new byte[cantNotas];
System.out.println("Ingrese notas\n");
for(int i=0; i<cantNotas; i++)
{System.out.print("nota["+i+"]"+"=");
notas[i]=(byte)Leer.nextByte();
}
for(int i=0;i<cantNotas;i++){
totalNotas=(byte) (totalNotas+notas[i]);
}
System.out.println("El promedio de notas es "+totalNotas/cantNotas);
}
}
Llamados tambin matrices, es un array cuyos elementos son tambin arrays y se maneja a
travs de dos ndices.
Sus operaciones bsicas son el constructor y selector.
El arrays multidimensional ms comn es el que tiene 2 dimensiones es decir las matrices.
En Java presenta una matriz, es un arrays de arrays, para lograr almacenar los datos en este tipos
de estructura estn dispuestos en filas y columnas. La identificacin un elemento es necesario
identificar sus dos ndices.
tipoDato [ ] [ ] nombreMatriz;
nombreMatriz=new tipoDato[ 3] [ 3];
Ejemplo6
b. CONJUNTOS
Java no tiene ninguna clase o interfaz que se pueda implementar estructuras con el
comportamiento de un conjunto, en consecuencia se puede utilizar la interfaz java.util.set como
base para implementacin de un conjunto.
Set: Dentro de las colecciones de datos que java proporciona en su biblioteca bsica,
est la interfaz set que recoge los conjuntos de datos que se caracterizan porque:
no se respeta el orden en el que se insertan elementos
no pueden haber elementos duplicados
el tamao del conjunto se adapta dinmicamente a lo que haga falta
Mtodos de la interface
conjunto.add(1);
conjunto.add(9);
conjunto.add(5);
conjunto.add(9);
System.out.println(conjunto.size());
for (int n: conjunto) {
System.out.print(n + " ");
}
System.out.println();
Semana 6-7
PRIMERA UNIDAD 2
Competencias
Contenido
Estructuras dinmicas lineales: listas. Fundamentacin. Clasificacin de listas enlazadas. Listas simples y operaciones.
Insercin de un elemento en una lista. Bsqueda en listas enlazadas. Eliminacin de un nodo en una lista. Lista ordenada.
Listas enlazadas
Mapa Conceptual
Lineales
Operaciones
Pilas
ESTRUCTURAS
DINAMICAS LINE
Colas
No lineales
1. LISTAS ENLAZADAS
Es una coleccin de elementos enlazados dispuestos uno detrs de otros en la que cada elemento
se conecta al siguiente, la idea es tener un conjunto de elementos llamados nodos, en las cuales
contienen la direccin de un nodo y el elemento almacenado. As como se muestra en la siguiente
figura
primero
primero
listaVacia (L)
esvacia(L)
insertar(L,x,p)
localizar(L,x)
suprimer(L,x)
anterior(L,p)
primero(L)
anula(L)
insertarPrimero(L,x)
insertarFinal(L,x)
La operacin de una estructura de datos es recorrer, consiste en visitar cada nodo de la lista.
La implementacin del TAD de una lista requiere, primer lugar declarar la clase nodo, en las que se
combinaran sus dos partes: el dato y un enlace (referencia). A dems la clase lista con sus
operaciones y el atributo con la cabeza de la lista. Las operaciones tendrn las siguientes
operaciones:
Inicializacin o creacin
Insertar un elemento en la lista
Remover elemento de una lista
Buscar elemento de una lista
Recorrer la lista
Comprobar lista vaca
Una lista enlazada se compone de nodos enlazadas por consiguiente de la declaracin de la misma
seria de la siguiente manera:
primero
Una lista doble se compone de nodos enlazados por los nodos anteriores y posteriores, por
consiguiente la declaracin sera de la siguiente manera:
primero
primero
primero
La clase Lista define el atributo primero, referencia a un Nodo, para acceder a los elementos de la
lista. Para construir la lista se inicializara definiendo una lista vaca, con la referencia primero debe
de apuntar a nulo.
Inicializando Lista
primero
primero=null;
nuevo
Luego, como la lista esta vaca se hace que la referencia primero apunte al nuevo nodo creado
primero
nuevo
primero=nuevo
primero
Se desea seguir ingresando un elemento ms, segn el algoritmo se crea el nuevo nodo
nuevo
primero
nuevo
nuevo.siguiente=primero
primero=nuevo
primero
Tambin se puede insertar un elemento en cualquier posicin de la lista, para este caso igual se
crea un nodo, se inicializa un nodo aux
aux
primero
nuevo
nuevo.siguente=aux
primero.siguiente=nuevo
aux
primero
nuevo
aux.siguente=nuevo
Otra de las operaciones dentro de una lista es buscar un elemento, para esto se utiliza una
referencia que se inicializa en primero y se busca el elemento dentro de la lista, lo que devuelve la
operacin es la referencia o un valor lgico, dependiendo del requerimiento.
aux
primero
aux=primero
while(aux.dato!=datoB) && (aux.siguiente!=null)
axu=aux.siguiente
Remover un nodo dentro de una lista sera equivalente a decir eliminar un elemento e de la lista, en
consecuencia se puede implementar de varias formas, remover el primer elemento de la lista,
remover el ltimo de la lista, remover elemento buscado, remover un elemento antes de una posicin
o despus de una posicin, estas operaciones se implementan de acuerdo a los requerimientos. A
continuacin tenemos remover por el primero.
aux
primero
primero = aux.siguiente
primero
aux.siguiente=null
Remover un elemento buscado, imaginemos que el elemento buscado esta apuntado por la
referencia aux2, se debe de trabajar con aux1 para no perder las referencias, recomienda que la
referencia primero siempre debe de apuntar al primer elemento de la lista.
aux1 Aux2
primero
aux1=aux2.siguiente
aux2=null
Package Lista;
public class Lista <Tipo> {
Nodo primero;
public Lista() {
primero=null;
}
public Lista insertar(Tipo x){
Nodo nuevo=new Nodo(x);
if (primero!=null )
nuevo.setSiguiente(primero);
primero=nuevo;
return this;
}
public String toStream(){
String salida="";
Nodo actual;
for(actual=primero; actual!=null; actual=actual.getSiguiente() )
salida=salida+actual.getDato();
return salida;
}
public Lista Eliminar(){
Nodo actual=primero;
if (primero!=null )
primero=actual.getSiguiente();
return this;
}
}
package Lista;
public class DemoLista {
public static void main(String[] args) {
Lista lc=new Lista();
lc.insertar( new Integer(4));
lc.insertar( new Integer(5));
lc.insertar( new Integer(6));
lc.insertar( new Integer(10));
System.out.println(lc.toStream());
lc.Eliminar();
System.out.println(lc.toStream());
}
}
}