Корректна ли реализация графа с использованием списка смежности ?
Я новичок в DSA , так как последние пару дней я пытался найти правильную реализацию для графика, используя список смежности.
Ниже я привел весь код для того, как, по моему мнению, должен быть реализован список смежности.
Я создал SiinglyLinkedlist все с нуля.
И я использую хэш-карту, чтобы улучшить временную сложность.
Целочисленный ключ в хэш-карте действует как VERTICE & состоит из Linkedlist по своему значению.
В вершинах я храню целочисленный идентификатор, а в Linkedlist-все имена друзей для этого конкретного идентификатора.
В графе 3 методы -
1] insertVertice(int ID ) - это создает пустой linkedlist по заданному идентификатору в hashmap .
2] insertDataAtID (int ID , String data) - это вставка данных в linkedlist по заданному идентификатору.
3] printAllDataAtID(int ID) - это печатает все имена друзей или данные, присутствующие в linkedlist по заданному идентификатору / ключу в хэш-карте.
Не могли бы вы, пожалуйста, пройти через реализацию и посоветовать какие-нибудь ошибки ?
Или лучше несколько предложений о том, как список смежности может быть реализован более эффективно ?
Спасибо Вам за эти усилия.
-----------------------------------------------------------
import java.util.HashMap; public class demo { static HashMap<Integer,SinglyLinkedlist> graph = new HashMap<>(); public static void main(String[] args){ Graph graph = new Graph(); graph.insertVertice(101); graph.insertDataAtID(101,"Deepesh"); graph.insertDataAtID(101,"Kiran"); graph.insertDataAtID(101,"Aryan"); graph.insertVertice(201); graph.insertDataAtID(201,"Carl"); graph.insertDataAtID(201,"Arun"); graph.insertDataAtID(201,"Kishan"); graph.insertDataAtID(201,"Betth"); graph.printAllDataAtID(101); graph.printAllDataAtID(201); } }
--------------------------------------------------------------
import java.util.HashMap; public class Graph{ HashMap<Integer,SinglyLinkedlist> maplist = new HashMap<>(); void insertVertice(Integer id ){ maplist.put(id,new SinglyLinkedlist()); } void insertDataAtID(Integer id, String data){ if (maplist.get(id)==null){ System.out.println("No such Vertice exist with id : " + id); System.out.println("Create the Vertice first by calling insertVertice() method."); } SinglyLinkedlist linkedlist = maplist.get(id); linkedlist.insertNode(data); } void printAllDataAtID(Integer id) throws NullPointerException { if (maplist.get(id) == null) { System.out.println("No such Vertice exist with id : " + id); System.out.println("Create the Vertice first by calling insertVertice() method."); } else { SinglyLinkedlist linkedlist = maplist.get(id); linkedlist.printAll(); } } }
------------------------------------------------------------
public class SinglyLinkedlist { Node head; Node tail; public static class Node { Node next; String data; } void insertNode(String data) { Node newNode = new Node(); newNode.data = data; if (head == null) { head = tail = newNode; newNode.next = null; } else { Node temp = head; while (temp.next != null) { temp = temp.next; } temp.next = newNode; newNode.next = null; tail = newNode; } } void removeLastNode() { Node temp = head; while (temp.next.next != null) { temp = temp.next; } Node removedNode = temp.next; tail = temp; tail.next = null; System.out.println("Removed value : " + removedNode.data); } void printAll() { if (head == null) { System.out.println("List is Empty !"); } else { Node temp = head; while (temp != null) { System.out.print(temp.data + " "); temp = temp.next; } } } boolean search(String data) { if (head == null) { System.out.println("List is Empty !"); } else { Node temp = head; while (temp != null) { if (temp.data.equals(data)) { System.out.println("Value found !"); return true; } temp = temp.next; } System.out.println("Value not found !"); } return false; } }
Что я уже пробовал:
Я попробовал google и другие интернет-ресурсы
Garth J Lancaster
Почему бы вам не написать модульные тесты на Java (я уверен, что это возможно) ... если вы войдете в эту привычку, то хорошо подготовитесь к профессиональному будущему ... в идеале вы бы сделали это, когда добавили каждую "функцию" / " функцию
deepeshdm3434
Да , это прекрасно, но сейчас я просто спрашиваю о реализации.
Я просто уверен, что это то, как граф реализуется в общем виде ?