Rumah  >  Artikel  >  Java  >  Penerokaan mendalam tentang kaedah aplikasi dan pelaksanaan struktur data bukan linear pepohon dan graf dalam Java

Penerokaan mendalam tentang kaedah aplikasi dan pelaksanaan struktur data bukan linear pepohon dan graf dalam Java

王林
王林asal
2023-12-26 10:22:09880semak imbas

Penerokaan mendalam tentang kaedah aplikasi dan pelaksanaan struktur data bukan linear pepohon dan graf dalam Java

Memahami Pokok dan Graf di Jawa: Meneroka Aplikasi dan Pelaksanaan Struktur Data Tak Linear

  1. Pengenalan
    Dalam sains komputer, struktur data ialah cara data disimpan, disusun dan diuruskan dalam komputer. Struktur data boleh dibahagikan kepada struktur data linear dan struktur data bukan linear. Pokok dan graf ialah dua jenis struktur data tak linear yang paling biasa digunakan. Artikel ini akan menumpukan pada konsep, aplikasi dan pelaksanaan pepohon dan graf dalam Java, dan memberikan contoh kod khusus.
  2. Konsep dan aplikasi pokok
    Tree ialah jenis data abstrak, yang merupakan koleksi nod dan tepi. Setiap nod pokok mengandungi elemen data dan penunjuk ke nod lain. Nod khas pokok dipanggil nod akar, yang tidak mempunyai nod induk Semua nod lain mempunyai nod induk dan nod anak sifar atau lebih. Aplikasi penting pokok ialah mencari dan menyusun. Contohnya, pepohon carian binari ialah struktur pepohon yang biasa digunakan yang boleh mencari, memasukkan dan memadam elemen dalam kerumitan masa O(log n). Berikut ialah contoh pelaksanaan Java ringkas bagi pepohon carian binari:
class Node {
    int data;
    Node left;
    Node right;

    public Node(int item) {
        data = item;
        left = right = null;
    }
}

class BinarySearchTree {
    Node root;

    public BinarySearchTree() {
        root = null;
    }

    public void insert(int data) {
        root = insertRec(root, data);
    }

    private Node insertRec(Node root, int data) {
        if (root == null) {
            root = new Node(data);
            return root;
        }

        if (data < root.data)
            root.left = insertRec(root.left, data);
        else if (data > root.data)
            root.right = insertRec(root.right, data);

        return root;
    }

    public boolean search(int data) {
        return searchRec(root, data);
    }

    private boolean searchRec(Node root, int data) {
        if (root == null)
            return false;

        if (data == root.data)
            return true;

        if (data < root.data)
            return searchRec(root.left, data);

        return searchRec(root.right, data);
    }
}

public class Main {
    public static void main(String[] args) {
        BinarySearchTree bst = new BinarySearchTree();
        bst.insert(50);
        bst.insert(30);
        bst.insert(70);
        bst.insert(20);
        bst.insert(40);
        bst.insert(60);
        bst.insert(80);

        System.out.println("Is 20 present? " + bst.search(20));
        System.out.println("Is 100 present? " + bst.search(100));
    }
}

Dalam contoh di atas, kami mentakrifkan kelas Nod untuk mewakili nod pepohon binari dan kelas BinarySearchTree untuk mewakili pepohon carian perduaan. Kita boleh menggunakan kaedah sisip untuk memasukkan unsur ke dalam pokok dan kaedah carian untuk mencari unsur.

  1. Konsep dan aplikasi graf
    Graf ialah himpunan nod dan tepi Nod mewakili unsur dalam graf, dan tepi mewakili sambungan antara nod. Aplikasi graf yang penting adalah untuk mewakili rangkaian dan perhubungan. Sebagai contoh, dalam rangkaian sosial, pengguna boleh diwakili sebagai nod, dan hubungan berikut dan rakan antara mereka boleh diwakili sebagai tepi. Berikut ialah contoh pelaksanaan graf ringkas dalam Java:
import java.util.*;

class Graph {
    private int V;
    private LinkedList<Integer>[] adjList;

    public Graph(int v) {
        V = v;
        adjList = new LinkedList[v];
        for (int i = 0; i < v; ++i)
            adjList[i] = new LinkedList();
    }

    void addEdge(int v, int w) {
        adjList[v].add(w);
    }

    void BFS(int s) {
        boolean[] visited = new boolean[V];
        LinkedList<Integer> queue = new LinkedList<Integer>();

        visited[s] = true;
        queue.add(s);

        while (queue.size() != 0) {
            s = queue.poll();
            System.out.print(s + " ");

            Iterator<Integer> i = adjList[s].listIterator();
            while (i.hasNext()) {
                int n = i.next();
                if (!visited[n]) {
                    visited[n] = true;
                    queue.add(n);
                }
            }
        }
    }
}

public class Main {
    public static void main(String args[]) {
        Graph g = new Graph(4);

        g.addEdge(0, 1);
        g.addEdge(0, 2);
        g.addEdge(1, 2);
        g.addEdge(2, 0);
        g.addEdge(2, 3);
        g.addEdge(3, 3);

        System.out.println("BFS traversal starting from vertex 2:");
        g.BFS(2);
    }
}

Dalam contoh di atas, kami menggunakan senarai terpaut bersebelahan untuk mewakili struktur data graf. Kami mentakrifkan kelas Graf, di mana kaedah addEdge digunakan untuk menambah tepi dan kaedah BFS digunakan untuk melakukan traversal carian pertama luas. Dalam contoh, kami melakukan traversal BFS bermula dari bucu 2 dan mencetak susunan traversal.

  1. Kesimpulan
    Artikel ini memperkenalkan konsep, aplikasi dan kaedah pelaksanaan pepohon dan graf dalam Java, dan memberikan contoh kod khusus. Pokok dan graf ialah jenis struktur data tak linear yang biasa digunakan, dan ia mempunyai pelbagai aplikasi dalam sains komputer. Dengan menguasai konsep asas dan kaedah pelaksanaan pepohon dan graf, anda boleh memahami dan memproses struktur data tak linear dengan lebih baik dan menggunakannya untuk menyelesaikan masalah praktikal.

Atas ialah kandungan terperinci Penerokaan mendalam tentang kaedah aplikasi dan pelaksanaan struktur data bukan linear pepohon dan graf dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn