Rumah  >  Artikel  >  Java  >  Pengenalan kepada Asas Java kepada Aplikasi Praktikal: Aplikasi Praktikal Algoritma dan Struktur Data

Pengenalan kepada Asas Java kepada Aplikasi Praktikal: Aplikasi Praktikal Algoritma dan Struktur Data

王林
王林asal
2024-05-07 15:42:02396semak imbas

Algoritma ialah satu set langkah untuk menyelesaikan masalah, dan struktur data ialah cara yang teratur untuk menyimpan data dalam cara yang teratur Ia adalah penting untuk menulis program yang cekap. Jenis algoritma biasa termasuk algoritma carian, pengisihan dan teori graf. Jenis struktur data termasuk tatasusunan, senarai terpaut, tindanan, baris gilir dan set. Dalam aplikasi praktikal, tindanan boleh digunakan untuk menyelesaikan masalah padanan kurungan, dan baris gilir boleh digunakan untuk menyelesaikan masalah pengeluar-pengguna.

Pengenalan kepada Asas Java kepada Aplikasi Praktikal: Aplikasi Praktikal Algoritma dan Struktur Data

Asas Java kepada Aplikasi Praktikal: Aplikasi Praktikal Algoritma dan Struktur Data

Apakah algoritma dan struktur data?

Algoritma ialah himpunan langkah untuk menyelesaikan masalah tertentu, manakala struktur data ialah cara menyimpan dan menyusun data yang teratur. Mereka adalah penting untuk menulis program yang cekap dan berkuasa.

Jenis algoritma biasa

  • Algoritma carian: Digunakan untuk mencari elemen dalam struktur data, seperti carian linear dan carian binari.
  • Isih Algoritma: Digunakan untuk menyusun struktur data dalam susunan tertentu, seperti isihan gelembung dan isihan gabungan.
  • Algoritma teori graf: digunakan untuk menyelesaikan masalah yang melibatkan graf dan rangkaian, seperti carian mendalam-dahulu dan carian luas-dahulu.

Jenis struktur data biasa

  • Tatasusunan: Satu set elemen yang disusun mengikut indeks.
  • Senarai terpaut: Koleksi yang unsur-unsurnya disambungkan bersama dalam fesyen linear.
  • Timbunan: Struktur data yang mengikut prinsip keluar-masuk-dahulu (LIFO).
  • Baris gilir: Struktur data yang mengikut prinsip masuk dahulu, keluar dahulu (FIFO).
  • Set: Struktur data yang menyimpan elemen unik, seperti HashSet dan TreeSet.

Kes praktikal:

Menggunakan tindanan untuk menyelesaikan masalah padanan kurungan

Pertimbangkan rentetan dengan pelbagai jenis kurungan, seperti kurungan bulat, kurungan segi empat sama dan kurungan kerinting. Untuk menyemak sama ada rentetan itu sah (semua kurungan adalah berpasangan dan dipadankan dengan betul) kita boleh menggunakan tindanan.

Kod Java:

import java.util.Stack;

public class BracketMatcher {

    public static boolean isBalanced(String str) {
        Stack<Character> stack = new Stack<>();
        for (char c : str.toCharArray()) {
            if (isOpen(c)) {
                stack.push(c);
            } else if (isClose(c)) {
                if (stack.isEmpty() || !isMatch(stack.pop(), c)) {
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }

    private static boolean isOpen(char c) {
        return c == '(' || c == '[' || c == '{';
    }

    private static boolean isClose(char c) {
        return c == ')' || c == ']' || c == '}';
    }

    private static boolean isMatch(char open, char close) {
        return (open == '(' && close == ')') || (open == '[' && close == ']') || (open == '{' && close == '}');
    }

    public static void main(String[] args) {
        String str1 = "()[]{}";
        String str2 = "([)]";
        System.out.println(isBalanced(str1)); // true
        System.out.println(isBalanced(str2)); // false
    }
}

Menggunakan baris gilir untuk menyelesaikan masalah pengeluar-pengguna

Pertimbangkan benang pengeluar dan pengguna berkongsi baris gilir. Urutan pengeluar menambah item pada baris gilir dan urutan pengguna mengalih keluar item daripada baris gilir. Untuk memastikan keselamatan benang dan mengelakkan keadaan perlumbaan, kami boleh menggunakan baris gilir.

Kod Java:

import java.util.concurrent.ArrayBlockingQueue;

public class ProducerConsumer {

    private ArrayBlockingQueue<Integer> queue;

    public ProducerConsumer(int capacity) {
        queue = new ArrayBlockingQueue<>(capacity);
    }

    // 生产者线程
    public void produce(int item) {
        try {
            queue.put(item);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    // 消费者线程
    public int consume() {
        try {
            return queue.take();
        } catch (InterruptedException e) {
            e.printStackTrace();
            return -1; // 作为错误标志
        }
    }

    public static void main(String[] args) {
        ProducerConsumer pc = new ProducerConsumer(5);

        new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                pc.produce(i);
            }
        }).start();

        new Thread(() -> {
            while (true) {
                int item = pc.consume();
                if (item == -1) {
                    break; // 队列为空
                }
                System.out.println("Consumed: " + item);
            }
        }).start();
    }
}

Atas ialah kandungan terperinci Pengenalan kepada Asas Java kepada Aplikasi Praktikal: Aplikasi Praktikal Algoritma dan Struktur Data. 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