Maison  >  Article  >  Java  >  Structure des données et algorithme Java : explication détaillée de cas pratiques

Structure des données et algorithme Java : explication détaillée de cas pratiques

WBOY
WBOYoriginal
2024-05-08 21:15:01649parcourir

Les structures de données et les algorithmes sont des éléments clés pour l'efficacité des programmes. Les structures de données couramment utilisées en Java incluent les tableaux, les listes chaînées, les piles et les arbres binaires. Les algorithmes courants incluent le tri rapide et la recherche binaire. Cet article explique ces concepts de manière simple et facile à comprendre à travers des cas pratiques : Tableau : stocke en continu des éléments du même type, comme les scores des élèves. Liste chaînée : les éléments sont liés via des pointeurs, comme une file d'attente simulée. Stack : suivez le principe LIFO, comme le traçage des appels de fonction. Arbre binaire : structure de données arborescente, telle qu'un répertoire de système de fichiers. Tri rapide : stratégie de division pour mieux régner, divisez le tableau en deux parties et triez-les séparément. Recherche binaire : effectuez une recherche binaire sur un tableau ordonné pour affiner la portée de la recherche.

Structure des données et algorithme Java : explication détaillée de cas pratiques

Structures de données et algorithmes Java : explication détaillée de cas pratiques

Introduction

Les structures de données et les algorithmes sont le fondement de l'informatique, et ils déterminent l'efficacité et la robustesse du programme. Cet article expliquera les structures de données et les algorithmes couramment utilisés en Java d'une manière simple et facile à comprendre à travers une série de cas pratiques.

Array

Définition : Une collection d'éléments du même type stockés dans un espace mémoire continu.

Cas pratique : Stockage des notes des élèves

int[] scores = {90, 85, 78, 95, 82};

Liste chaînée

Définition : Une structure de données linéaire dont les éléments sont liés par des pointeurs.

Cas pratique : File d'attente simulée

class Node {
    int value;
    Node next;
}

class Queue {
    Node head;
    Node tail;

    public void enqueue(int value) {
        Node newNode = new Node();
        newNode.value = value;
        if (head == null) {
            head = newNode;
            tail = newNode;
        } else {
            tail.next = newNode;
            tail = newNode;
        }
    }

    public int dequeue() {
        if (head == null) {
            throw new RuntimeException("Queue is empty");
        }

        int value = head.value;
        head = head.next;
        if (head == null) {
            tail = null;
        }
        return value;
    }
}

Stack

Définition : Une structure de données linéaire qui suit le principe du dernier entré, premier sorti (LIFO).

Cas pratique : Traçage des appels de fonction

class Stack<T> {
    private List<T> elements = new ArrayList<>();

    public void push(T element) {
        elements.add(element);
    }

    public T pop() {
        if (elements.isEmpty()) {
            throw new RuntimeException("Stack is empty");
        }
        return elements.remove(elements.size() -1);
    }

    public T peek() {
        if (elements.isEmpty()) {
            throw new RuntimeException("Stack is empty");
        }
        return elements.get(elements.size() -1);
    }
}

Arbre binaire

Définition : Une structure de données arborescente contenant un nœud racine et zéro ou plusieurs nœuds enfants.

Cas pratique : Répertoire du système de fichiers

class TreeNode {
    private String name;
    private List<TreeNode> children;

    // ... 其他代码
}

class FileSystem {
    private TreeNode root;

    // ... 其他代码
}

Algorithme de tri

Tri rapide

Description : Stratégie de division et de conquête, divisez le tableau en deux parties, triez-les séparément, puis fusionnez.

Cas pratique : Tri d'un ensemble de nombres

public static void quickSort(int[] arr) {
    if (arr == null || arr.length <= 1) {
        return;
    }

    int pivot = arr[0];
    int leftIndex = 0;
    int rightIndex = arr.length - 1;

    while (leftIndex < rightIndex) {
        while (arr[rightIndex] >= pivot && rightIndex > leftIndex) {
            rightIndex--;
        }
        arr[leftIndex] = arr[rightIndex];

        while (arr[leftIndex] <= pivot && rightIndex > leftIndex) {
            leftIndex++;
        }
        arr[rightIndex] = arr[leftIndex];
    }
    arr[leftIndex] = pivot;

    quickSort(arr, 0, leftIndex - 1);
    quickSort(arr, leftIndex + 1, arr.length - 1);
}

Algorithme de recherche

Recherche binaire

Description : Effectuez une recherche binaire sur le tableau ordonné, en réduisant la plage de recherche étape par étape.

Cas pratique : Trouver un élément dans un tableau

public static int binarySearch(int[] arr, int target) {
    int left = 0;
    int right = arr.length - 1;

    while (left <= right) {
        int mid = (left + right) / 2;

        if (arr[mid] == target) {
            return mid;
        } else if (arr[mid] < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return -1;
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn