martes, 17 de noviembre de 2015

Ejercicio 3 - Portafolio

Escribir un programa para obtener una lista doblemente enlazada con los caracteres de 
una cadena leída desde el teclado. Cada nodo de la lista tendrá un carácter. Una vez que 
se haya creado la lista, ordenarla alfabéticamente y escribirla en pantalla

Explicación:
El uso de listas doblemente enlazadas facilitan la búsqueda de valores y la referencia a 
elementos con respecto a sus nodos.

Para la comparación de caracteres se hará uso de la Clase Character por su facilidad al 
permitir el uso de 
funciones como: compareTo, la cual se utilizara en el ordenamiento de la lista.

Se hará uso de una función organizadora de los ingresos para evitar problemas con 
la alteración del orden de los nodos.


Clase NODO:

public clss Nodo {
private Nodo anterior;
private Nodo siguiente;//Al ser doblemente enlazadas contiene una referencia a un nodo anterior y siguiente.
private Character info;//La clase Character funciona similar a un char pero permite el uso de funciones
public Nodo(Nodo anterior, Nodo siguiente, char info) {
this.anterior = anterior;
this.siguiente = siguiente;
this.info = info;
}
public Nodo(char info) {
anterior=siguiente=null;
this.info = info;
}
public Nodo getAnterior() {
return anterior;
}
public void setAnterior(Nodo anterior) {
this.anterior = anterior;
}
public Nodo getSiguiente() {
return siguiente;
}
public void setSiguiente(Nodo siguiente) {
this.siguiente = siguiente;
}
public char getInfo() {
return info;
}
public void setInfo(char info) {
this.info = info;
}
}

Clase LISTA:

public class Lista {
public Nodo inicio;
public Nodo fin;
public Lista(){
inicio=fin=null;
}
public void iniciar(String texto){
inicio=fin=null;//En caso de usarse nuevamente, se borra el contenido de la Lista anterior
Nodo nuevo;
int i;
for(i=0;i<texto.length();i++){
agregarOrdenado(texto.charAt(i));//Agrega los valores del String en orden al momento de inicializar
}
}
public void agregarNodo(char a){//Funcion que agrega un Nodo al final de la lista
Nodo nuevo=new Nodo(fin,null,a);
if(fin!=null){
fin.setSiguiente(nuevo);
fin=nuevo;
}else{
inicio=fin=nuevo;
}
}
public void imprimir(){//Funcion que imprime la Lista de inicio a fin
Nodo aux=inicio;
int cont=1;
while(aux!=null){
System.out.println(cont+""+aux.getInfo());
cont++;
aux=aux.getSiguiente();
}
}
public void agregarOrdenado(Character valor){//Funcion que agrega un nodo a lista alfabéticamente a-z
Nodo nuevo=new Nodo(valor);
if(inicio==null){//Compara si la lista esta vacia
agregarNodo(valor);
}else{
if(valor.compareTo(inicio.getInfo())<=0){//Compara si el caracter es menor que el inicio a<z
nuevo.setSiguiente(inicio);
inicio.setAnterior(nuevo);
inicio=nuevo;
}else{
if(valor.compareTo(fin.getInfo())>=0){//compara si el caracter es mayor que el fin z>a
agregarNodo(valor);
}else{
Nodo aux=inicio;
while(aux.getSiguiente()!=null){
if(valor.compareTo(aux.getSiguiente().getInfo())<0){//Busca en la lista hasta su final un valor mayor que el del caracter para su ingreso
break;
}
aux=aux.getSiguiente();
}if(aux.getSiguiente()!=null){//Si existe el valor esperado
if(valor.compareTo(aux.getSiguiente().getInfo())<0){//Se ingresa el valor a la lista y se realizan las conecciones necesarias
nuevo.setAnterior(aux);
nuevo.setSiguiente(aux.getSiguiente());
aux.getSiguiente().setAnterior(nuevo);
aux.setSiguiente(nuevo);
}
}
}
}
}
}
}


Clase Principal:

import java.util.Scanner;

public class Principal {

public static void main(String[] args) {
// TODO Auto-generated method stub
Lista l=new Lista();
int menu=0;
do{
menu=leerInt("----Menu----"
+ "\n0.Salir"
+ "\n1.Generar Lista en base a una cadena de caracteres"
+ "\n2.Imprimir Lista");
switch(menu){
case 0:{
System.out.println("Programa Terminado");
break;
}
case 1:{
l.iniciar(leerString("Ingrese la palabra para generar la lista"));
break;
}
case 2:{
l.imprimir();
break;
}
}
}while(menu!=0);
}
public static int leerInt(String texto){
Scanner leer=new Scanner(System.in);
System.out.println(texto);
return leer.nextInt();
}

public static String leerString(String texto){
Scanner leer=new Scanner(System.in);
System.out.println(texto);
return leer.nextLine();
}
}

No hay comentarios.:

Publicar un comentario