Dani Solis Ответов: 1

Linkedlist (поиск и вставка)


Hello guys,

I have my methods to search, delete Start, delete End, Add Start, Add to End, but I have not been able to develop the methods to:

Search and Delete: the item searched
Insert element: Insert element in the position indicated by the user.

I hope you can help me with this methods, please.

Thanks in advance.

DS


Что я уже пробовал:

I share my methods and class

<pre lang="java">
//Node class
package asesorialistas;
/*@author Daniel Solis*/
public class Nodo{
    
public int Dato;
public Nodo Sig;//Puntero Enlcae recursivo
//Enlaza los diferentes nodos


//Constructor inicializar nodos
public Nodo(int d){
//Para crear un nodo final
this.Dato=d;  
}
//Constructor para insertar al inicio
public Nodo(int d, Nodo n){
this.Dato=d;
this.Sig=n;
    }
}

//List Methods
package asesorialistas;
/*@author Daniel Solis*/
public class Lista {
//Creando punteros
protected Nodo Inicio, Fin; //Punteros para saber donde inica y donde termina
//Donde esta el Inicio y Fin
public Lista(){
Inicio=null;
Fin=null;
    }
/*----------------------------------------------------------------------------*/
//Metodo para agregar al incio de la lista
public void AgregarInicio(int Elemento){
//Creando el nodo
Inicio = new Nodo(Elemento,Inicio);//Creando el Nodo
if(Fin==null){
    Fin=Inicio;
    }
}
/*----------------------------------------------------------------------------*/
//Metodo para agregar al final
public void AgrearFin(int Elemento){
    if (!EstaVacia()) {
      Fin.Sig=new Nodo(Elemento);
      Fin=Fin.Sig;   
    }else{
        Inicio=Fin=new Nodo(Elemento);
    }
}
/*----------------------------------------------------------------------------*/
//Metodo para mostrar la lista
public void Mostrar(){
Nodo recorrer=Inicio;
while (recorrer!=null){
    System.out.print("["+recorrer.Dato+"]");
    recorrer=recorrer.Sig;
    }
}
/*----------------------------------------------------------------------------*/
//Metodo esta la lista Vacia
public boolean EstaVacia() {
    return Inicio==null;  
}
/*----------------------------------------------------------------------------*/
public int BorrarInicio(){
        //creando el nodo
        int Elemento = Inicio.Dato;
        if(Inicio==Fin){
            Inicio = Fin = null;
        }
        else{
            Inicio=Inicio.Sig;
        }
        return Elemento;
}
/*----------------------------------------------------------------------------*/
public int BorrarFinal(){
        int Elemento = Fin.Dato;
        if(Inicio==Fin){
            Inicio = Fin = null;
        }else{
            Nodo temporal = Inicio;
            while(temporal.Sig != Fin){
                temporal = temporal.Sig;
            }
            Fin = temporal;
            Fin.Sig = null;
        }
        return Elemento;
}
/*----------------------------------------------------------------------------*/
public boolean BuscarElemento (int elemento){
    Nodo temporal=Inicio;
    while (temporal!=null&& temporal.Dato!=elemento)
    {
    temporal=temporal.Sig;
    }
    return temporal!=null;
    }

public boolean BuscarElementoEsp (int elemento){
    Nodo temporal=Inicio;
    while (temporal!=null&& temporal.Dato!=elemento)
    {
    temporal=temporal.Sig;
    }
    return temporal!=null;
    }
}

//MAIN
package asesorialistas;
import java.awt.HeadlessException;
import javax.swing.JOptionPane;
/*@author Dany*/
public class Principal {
    public static void main(String[] args) {
        //crear instancias de las clases
        Lista Listita = new Lista();
        //menu do while
        int opcion = 0;
        int Elemento; //valor a la lista (para insertar)
        
        do {
            try {
                opcion = Integer.parseInt(JOptionPane.showInputDialog(null, "***  MENU DE OPCIONES  ***\n"
                        + "1.- Agregar un Elemento al Inicio \n"
                        + "2.- Agregar un Elemento al Final \n"
                        + "3.- Mostrar los Elementos de las listas \n"
                        + "4.- Checar si la lista esta vacia \n"
                        + "5.- Borrar Elemento al inicio \n"
                        + "6.- Borrar Elemento al final \n"
                        + "7.- Buscar Elemento \n"
                        + "8.- Buscar Elemento y eliminar elemento \n"
                        + "9.- Salir \n"));

                switch(opcion){
                    
                    case 1:
                        try {
                            Elemento = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa el Elemento "
                                    + "al inicio"));
                            Listita.AgregarInicio(Elemento);
                        } catch (NumberFormatException e) {
                            JOptionPane.showMessageDialog(null,"Error"+e.getMessage());
                        }
                        break;
                        
                    case 2:
                                                try {
                           Elemento = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa el Elemento "
                                    + "al final"));
                            Listita.AgrearFin(Elemento); 
                        } catch (NumberFormatException e) {
                            JOptionPane.showMessageDialog(null,"Error"+e.getMessage()); 
                        }
                        break;
  
                    case 3:
                        Listita.Mostrar();
                        System.out.println("");
                        break;
                       
                    case 4:
                        Listita.EstaVacia();
                        break;
                        
                    case 5:
                        try {
                            Elemento = Listita.BorrarInicio();
                            JOptionPane.showMessageDialog(null, "El Elemento eliminado es: "
                                    +Elemento,"Eliminando nodo de inicio",
                                    JOptionPane.INFORMATION_MESSAGE);
                            
                        } catch (NumberFormatException e) {
                            JOptionPane.showMessageDialog(null,"Error"+e.getMessage());
                        }
                        break;
                        
                     case 6:
                        try {
                            Elemento = Listita.BorrarFinal();
                            JOptionPane.showMessageDialog(null, "El Elemento eliminado es: "
                                    +Elemento,"Eliminando nodo de fin",
                                    JOptionPane.INFORMATION_MESSAGE);
                            
                        } catch (NumberFormatException e) {
                            JOptionPane.showMessageDialog(null,"Error"+e.getMessage());
                        }
                        break;
                        
                        case 7:
                            Elemento=Integer.parseInt(JOptionPane.showInputDialog(null,"Ingresa el "+" elemento a buscar...","Buscando nodos en la lista",
                                    JOptionPane.INFORMATION_MESSAGE));
                            if (Listita.BuscarElemento(Elemento)==true) {
                            JOptionPane.showMessageDialog(null, "El elemento " + Elemento + " si esta en la lista",
                                        "nodo encontrado",JOptionPane.INFORMATION_MESSAGE);  
                            }else{JOptionPane.showMessageDialog(null, "El elemento " + Elemento + " no esta en la lista",
                                        "nodo no encintrado",JOptionPane.INFORMATION_MESSAGE);       
                            }   
                        break;
                        
                        case 8:
                            Elemento=Integer.parseInt(JOptionPane.showInputDialog(null,"Ingresa el "+" elemento a buscar...","Buscando nodos en la lista",
                                    JOptionPane.INFORMATION_MESSAGE));
                            if (Listita.BuscarElemento(Elemento)==true) {
                            int resp = JOptionPane.showConfirmDialog(null, "El elemento " + Elemento + " si esta en la lista quieres eliminarlo");
                                    if (JOptionPane.OK_OPTION == resp){
                                            System.out.println("Eliminar registro");
                                            }else{System.out.println("No Eliminar");
                                        }
                            }else{JOptionPane.showMessageDialog(null, "El elemento " + Elemento + " no esta en la lista",
                                        "nodo no encintrado",JOptionPane.INFORMATION_MESSAGE);       
                            }   
                        break;      
                }
            } catch (HeadlessException | NumberFormatException e) {
                JOptionPane.showMessageDialog(null,"Error"+ e.getMessage());
            }
        } while (opcion != 9);
        
    }
}


Дело восьмое - это поиск и удаление. Я еще не закончил ее.

1 Ответов

Рейтинг:
0

OriginalGriff

Мы не делаем домашнее задание: оно задано не просто так. Она существует для того, чтобы вы думали о том, что вам сказали, и пытались понять это. Он также существует для того, чтобы ваш наставник мог определить области, в которых вы слабы, и сосредоточить больше внимания на корректирующих действиях.

Попробуйте сами, возможно, вы обнаружите, что это не так сложно, как вы думаете! У вас есть код для поиска, у вас есть код для удаления: соедините их вместе!

Если вы столкнетесь с конкретной проблемой, то, пожалуйста, спросите об этом, и мы сделаем все возможное, чтобы помочь. Но мы не собираемся делать все это для вас!


Dani Solis

Здравствуйте, я извиняюсь
Я не был моим намерением, я стараюсь развивать свой проект.

Я работал вчера вечером в методе вставки по ссылке, но пока еще не могу закончить.

общественного недействительными InsPorReferencia(инт Элементо){
// Определите новый узел.
Nodo Nuevo = новый Nodo(Elemento,Referencia);
//Добавьте значение к узлу.
Нуэво - = - Нуэво.Сиг;
// Проверьте, есть ли в списке элементы
если (!EstaVacia()) {
// Сделайте копию списка.
Нодо височной= начало;
// Прокрутите список до тех пор, пока он не достигнет ссылочного узла.
while (temporal.Dato!= Referencia) {
временная = височной.Сиг;
}
// Создайте резервную копию списка.
Нодо сиг = височной.Сиг;
// Ссылка на новый узел после ссылочного узла.
temporal.Sig=Нуэво;
// Присоедините непрерывность списка к новому узлу..
Нуэво.Сиг=Сиг;

// Aumentar el contador de tamaño de lista..
таманио++;
}
}
}

Видите ли вы ошибку в этом методе?

Спасибо

DS

OriginalGriff

Что показывает вам отладчик?

Dani Solis

Я получаю ошибку в методе, а не в отладчике

Этот это ошибка в линии " 102 " цикл пока:

плохие типы операндов для двоичного оператора "! ="
первый тип int
второй тип: узел

OriginalGriff

Ну что ж, прочтите сообщение об ошибке!
Что он тебе говорит?
Просто: вы пытаетесь сравнить два разных типа, в частности целое число (temporal.Dato) с узлом (Referencia).

Это все равно что сравнивать Яблоко и овчарку!

На первый взгляд, вы хотели сравнить это:

while (temporal != Referencia) {

Или вот это:

время (временной.Дато!= Referencia.Дато) {

Но это твой код, а не мой! (У меня также была бы некоторая нулевая проверка там)

Dani Solis

Да, у вас есть причина, я исправил ошибку, и я запустил программу и получил следующую ошибку.

Исключение в потоке "main" java.lang.Исключение NullPointerException
в asesorialistas.Листа.InsPorReferencia(Lista.java:106)
в asesorialistas.Principal.main(Principal.java:98)
C:\Users\Dani\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java возвращается: 1
Ошибка сборки (общее время: 20 секунд)

который является, почему я думаю, что мой способ не так структурировано

мой метод таков:
общественного недействительными InsPorReferencia(инт Элементо){
// Определите новый узел.
Nodo Nuevo = новый Nodo(Elemento,Referencia);
//Добавьте значение к узлу.
Нуэво - = - Нуэво.Сиг;
// Проверьте, есть ли в списке элементы
если (!EstaVacia()) {
// Сделайте копию списка.
Нодо височной= начало;
// Прокрутите список до тех пор, пока он не достигнет ссылочного узла.
while (temporal != Referencia) {
временная = височной.Сиг;
}
// Создайте резервную копию списка.
Нодо сиг = височной.Сиг;
// Ссылка на новый узел после ссылочного узла.
temporal.Sig=Нуэво;
// Присоедините непрерывность списка к новому узлу..
Нуэво.Сиг=Сиг;

// Aumentar el contador de tamaño de lista..
таманио++;
}
}
}

Класс Основной

случай 8:
Элементо=Целое Число.parseInt(JOptionPane.showInputDialog(null, то"Ingresa Эль "+" Элементо despues де ","Эль Элементо",
JOptionPane.ИНФОРМАЦИОННОЕ СООБЩЕНИЕ));
если (Листита.BuscarElemento(Elemento)==true) {
/*JOptionPane.showMessageDialog(null, "El elemento" + Elemento + " si esta en la lista",
"nodo encontrado",JOptionPane.ИНФОРМАЦИОННОЕ СООБЩЕНИЕ); */
Листита.InsPorReferencia(Элементо);
}else{JOptionPane.showMessageDialog(null, "El elemento" + Elemento + " no esta en la lista",
"nodo no encontrado",JOptionPane.ИНФОРМАЦИОННОЕ СООБЩЕНИЕ);
}
перерыв;

OriginalGriff

Итак, что я сказал в конце последнего сообщения? О да: "у меня там тоже будет какая-то нулевая проверка"

Теперь вы понимаете почему ... :смеяться:

Dani Solis

Я не понимаю: "у меня тоже была бы какая-то нулевая проверка "

пожалуйста, не могли бы вы объяснить мне?

OriginalGriff

Какое значение находится в конце вашего связанного списка?
Какое значение находится во главе пустого связанного списка?

Это одна из самых распространенных проблем, которые нам задают, и это также та, на которую мы меньше всего готовы ответить, но вы больше всего готовы ответить сами.

Позвольте мне просто объяснить, что означает ошибка: вы пытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, который вы используете, чтобы держать ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень смешные взгляды, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего, что обычно делали бы, когда вы извлекли свою ручку. Почему он пуст? Вот в чем вопрос - может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
Но вы можете - и Visual Studio поможет вам здесь. Запустите свою программу в отладчике, и когда она выйдет из строя, VS покажет вам строку, в которой она обнаружила проблему. Затем вы можете начать просматривать различные его части, чтобы увидеть, какое значение равно null, и начать просматривать свой код, чтобы узнать, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибки, и снова запустите программу с самого начала. На этот раз VS остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения.

Но мы не можем этого сделать - у нас нет вашего кода, мы не знаем, как его использовать, если бы он у нас был, у нас нет ваших данных. Так что попробуйте - и посмотрите, сколько информации вы можете узнать!