0% encontró este documento útil (0 votos)
22 vistas12 páginas

Estructura de Listas Circulares en Java

El documento describe las listas circulares, una estructura de datos donde el último nodo apunta al primero, permitiendo una lista sin fin. Se detallan sus características, operaciones básicas como agregar, remover y listar nodos, así como un ejemplo de implementación en Java. Además, se menciona la importancia de manejar adecuadamente los punteros para evitar bucles infinitos.

Cargado por

Ulises Contreras
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
22 vistas12 páginas

Estructura de Listas Circulares en Java

El documento describe las listas circulares, una estructura de datos donde el último nodo apunta al primero, permitiendo una lista sin fin. Se detallan sus características, operaciones básicas como agregar, remover y listar nodos, así como un ejemplo de implementación en Java. Además, se menciona la importancia de manejar adecuadamente los punteros para evitar bucles infinitos.

Cargado por

Ulises Contreras
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Carrera:

Ingeniero en Software (IS)

Materia:
Estructura de Datos

Trabajo/Act:
Actividad 8 Listas circulares

Docente:
Rodríguez Torres Gildardo

Alumno:
Avalos Barba Jesús Alfredo
Martínez Álvarez Adriana
Contreras Ibañez Ulises
Listas circulares:

Las listas circulares son estructuras de datos en la que el último nodo apunta al primero lo
cual la convierte en una lista sin fin, cada nodo siempre tiene uno anterior y uno siguiente,
su estructura es muy similar a las listas simples por lo cual comparten características tanto
en su implementación como en su manejo aunque requiere un mayor entendimiento del
manejo de los punteros.

● No existe ningún nodo que apunte a null.


● La lista no tiene fin ya que al llegar al último nodo empieza de nuevo la lista.
● Se accede a la lista mediante el primer nodo o también llamado inicio de la lista.
● Si no se tiene cuidado al manejar la lista circular se pueden crear bucles infinitos.
● No tiene acceso aleatorio es decir para acceder a un valor se debe recorrer toda la
lista.

Características:

Operaciones básicas:

● Agregar (valor): agrega el valor al final de la lista.insertar (referencia, valor):


● Inserta el valor después del valor de referencia en la lista.
● Remover (referencia): elimina el nodo con el valor que coincida con la referencia.
● Editar (referencia): actualiza el valor de nodo con el valor que coincida con la
referencia.
● EsVacia (): retorna true si la lista está vacía, false en caso contrario.
● Buscar (valor): retorna la true si el elemento existe en la lista, false caso contrario.
● Eliminar(): elimina la lista
● listar (): imprime en pantalla los elementos de la lista.

Referencias
https://es.ccm.net/faq/2972-las-listas-circulares
import java.util.Scanner;

public class Main {

public static void main(String[] args) throws Exception{

ListasCircular listasCircular = new ListasCircular();

Scanner Pantalla = new Scanner (System.in);


int op = 0;

do{
System.out.println("\n[MENÚ]");
System.out.println(
" 1.Agregar nodo al principio"
+ "\n 2.Agregar nodo al final"
+ "\n 3.Insertar despues de referencia"
+ "\n 4.Insertar antes de principio"
+ "\n 5.Mostrar"
+ "\n 6.Buscar el valor del nodo por su posición"
+ "\n 7.Buscar la posición por el valor del nodo"
+ "\n 8.Eliminar el nodo por referencia"
+ "\n 9.Eliminar el nodo por posición"
+ "\n 10.Eliminar lista circular"
+ "\n 11.Salir");
System.out.print("Porfavor de Selecciona una opción>= ");
op = Pantalla.nextInt();
System.out.println(" ");
switch(op){
case 1:
listaCircular.agregarAlInicio(0);
break;

case 2:
listaCircular.agregarAlFinal(0);
break;

case 3:
listaCircular.insertarPorReferencia(0,0);
listaCircular.listar();
System.out.print(" | Tamaño: ");
System.out.println(listaCircular.getTamanio());
break;

case 4:
listaCircular.insrtarPorPosicion(0, 0);
listaCircular.listar();
System.out.print(" | Tamaño: ");
System.out.println(listaCircular.getTamanio());
break;

case 5:
System.out.println("[Lista Circular]");
listaCircular.listar();
System.out.println("\n[Tamaño]");
System.out.println(listaCircular.getTamanio());
break;

case 6:
System.out.println(listaCircular.getValor(0));
break;

case 7:
System.out.println(listaCircular.getPosicion(0));
break;

case 8:
listaCircular.removerPorReferencia(0);
listaCircular.listar();
System.out.print(" | Tamaño: ");
System.out.println(listaCircular.getTamanio());
break;

case 9:
listaCircular.removerPorPosicion(0);
listaCircular.listar();
System.out.print(" | Tamaño: ");
System.out.println(listaCircular.getTamanio());
break;

case 10:
listaCircular.eliminar();
break;

case 11:
System.out.print("Saliendo del programa...");
break;

default:
System.out.print("Por favor Inserte una opción valida");
break;
}
}while(op!=11);

}
}
import java.util.Scanner;

public class ListaCircular {

Scanner val = new Scanner(System.in);


Scanner ref = new Scanner(System.in);
Scanner r = new Scanner(System.in);

private Nodo inicio;


private Nodo ultimo;
private int tamañio;

public void Lista() {


inicio = null;
ultimo = null;
tamañio = 0;
}

public boolean esVacia() {


return inicio == null;
}

public int getTamanio() {


return tamañio;
}

//1
public void agregarAlInicio(int valor){

System.out.print("Inserta este valor al inicio>= ");


valor = val.nextInt();
Nodo nuevo = new Nodo();
nuevo.setValor(valor);

if (esVacia()) {
inicio = nuevo;
ultimo = nuevo;
ultimo.setSiguiente(inicio);

} else {
nuevo.setSiguiente(inicio);
inicio = nuevo;
ultimo.setSiguiente(inicio);
}
tamañio++;
}
//2
public void agregarAlFinal(int valor) {

System.out.print("Inserta el valor al final>= ");


valor = val.nextInt();
Nodo nuevo = new Nodo();
nuevo.setValor(valor);

if (esVacia()) {
inicio = nuevo;
ultimo = nuevo;
ultimo.setSiguiente(inicio);

} else {
ultimo.setSiguiente(nuevo);
nuevo.setSiguiente(inicio);
ultimo = nuevo;
}
tamañio++;
}

//3
public void insertarPorReferencia(int referencia, int valor){

System.out.print("por favor Inserta la Referencia>= ");


referencia = r.nextInt();
System.out.print("Inserta el Valor>= ");
valor = val.nextInt();
Nodo nuevo = new Nodo();
nuevo.setValor(valor);

if (!esVacia()) {
if (buscar(referencia)) {

Nodo aux = inicio;

while (aux.getValor() != referencia) {


aux = aux.getSiguiente();
}

if (aux == ultimo) {

aux.setSiguiente(nuevo);

nuevo.setSiguiente(inicio);

ultimo = nuevo;
} else {
Nodo siguiente = aux.getSiguiente();

aux.setSiguiente(nuevo);

nuevo.setSiguiente(siguiente);
}

tamañio++;
}
}
}

//4
public void insrtarPorPosicion(int posicion, int valor){

System.out.print("Inserta la posición>= ");


posicion = ref.nextInt();
System.out.print("Inserta el valor>= ");
valor = val.nextInt();
if(posicion>=0 && posicion<=tamañio){
Nodo nuevo = new Nodo();
nuevo.setValor(valor);

if(posicion == 0){

nuevo.setSiguiente(inicio);

inicio = nuevo;

ultimo.setSiguiente(inicio);
}
else{

if(posicion == tamañio){

ultimo.setSiguiente(nuevo);

nuevo.setSiguiente(inicio);

ultimo = nuevo;
}
else{

Nodo aux = inicio;

for (int i = 0; i < (posicion-1); i++) {


aux = aux.getSiguiente();
}

Nodo siguiente = aux.getSiguiente();

aux.setSiguiente(nuevo);

nuevo.setSiguiente(siguiente);
}
}

tamañio++;
}
}

//5
public void listar(){

if (!esVacia()) {

Nodo aux = inicio;

int i = 0;
System.out.print("-> ");

do {

System.out.print(i + ".[ " + aux.getValor() + " ]" + " -> ");

aux = aux.getSiguiente();

i++;
} while (aux != inicio);
}
}

//6
public int getValor(int posicion) throws Exception{

System.out.print("Inserta la posición>= ");


posicion = ref.nextInt();
if(posicion>=0 && posicion<tamañio){

if (posicion == 0) {

return inicio.getValor();
}else{

Nodo aux = inicio;


for (int i = 0; i < posicion; i++) {
aux = aux.getSiguiente();
}

return aux.getValor();
}

} else {
throw new Exception("Posicion inexistente en la lista.");
}
}

//7
public int getPosicion(int referencia) throws Exception{

System.out.print("Inserta la Referencia>= ");


referencia = ref.nextInt();
if (buscar(referencia)) {

Nodo aux = inicio;

int cont = 0;

while(referencia != aux.getValor()){

cont ++;

aux = aux.getSiguiente();
}

return cont;

} else {
throw new Exception("Valor inexistente en la lista.");
}
}

//8
public void removerPorReferencia(int referencia){

System.out.print("Inserta la Referencia>= ");


referencia = ref.nextInt();
if (buscar(referencia)) {

if (inicio.getValor() == referencia) {

inicio = inicio.getSiguiente();
ultimo.setSiguiente(inicio);
} else{

Nodo aux = inicio;

while(aux.getSiguiente().getValor() != referencia){
aux = aux.getSiguiente();
}
if (aux.getSiguiente() == ultimo) {
aux.setSiguiente(inicio);
ultimo = aux;
} else {

Nodo siguiente = aux.getSiguiente();

aux.setSiguiente(siguiente.getSiguiente());

}
}

tamañio--;
}
}

//9
public void removerPorPosicion(int posicion){
System.out.print("Inserta la posición>= ");
posicion = ref.nextInt();
if(posicion>=0 && posicion<tamañio){

if(posicion == 0){

inicio = inicio.getSiguiente();

ultimo.setSiguiente(inicio);
}

else{

Nodo aux = inicio;

for (int i = 0; i < posicion-1; i++) {


aux = aux.getSiguiente();
}
if (aux.getSiguiente() == ultimo) {
aux.setSiguiente(inicio);
ultimo = aux;
} else {

Nodo siguiente = aux.getSiguiente();

aux.setSiguiente(siguiente.getSiguiente());

}
}

tamañio--;
}
}

//10
public void eliminar(){

inicio = null;

ultimo = null;

tamañio = 0;
}

public boolean buscar(int referencia){

Nodo aux = inicio;

boolean encontrado = false;

do{

if (referencia == aux.getValor()){

encontrado = true;
}
else{

aux = aux.getSiguiente();
}
}while(aux != inicio && encontrado != true);

return encontrado;
}

}
public class Nodo {

private int valor;

private Nodo siguiente;

public void Nodo() {


this.valor = 0;
this.siguiente = null;
}

public int getValor() {


return valor;
}

public void setValor(int valor) {


this.valor = valor;
}

public Nodo getSiguiente() {


return siguiente;
}

public void setSiguiente(siguiente nodo) {


this.siguiente = siguiente;
}
}

También podría gustarte