Skip to content

Lien vers les cours (le lien marche pas sur le réseau de l'école):

tinyurl.com/sdd2526

ou

https://cnam-my.sharepoint.com/personal/eric_soutil_lecnam_net/_layouts/15/Doc.aspx?sourcedoc={a94bdec3-fad0-430f-aa7e-a3af6fb86d19}&action=view&wd=target%28Nouvelle%20section%201.one%7C44889ca2-52de-47dc-8548-7808d0511bd0%2FLiens%20utiles%7C5afbeebd-bfe3-479e-8815-db37046f6952%2F%29&wdorigin=NavigationUrl

ou

https://cnam-my.sharepoint.com/personal/eric_soutil_lecnam_net/_layouts/15/Doc.aspx?sourcedoc={a94bdec3-fad0-430f-aa7e-a3af6fb86d19}&action=view&wd=target%28Liens%20utiles.one%7C44889ca2-52de-47dc-8548-7808d0511bd0%2FLiens%20utiles%7C5afbeebd-bfe3-479e-8815-db37046f6952%2F%29&wdorigin=NavigationUrl

Après tu clique sur sharepoint_2526 pour avoir accès au cours

Mail du prof :

eric.soutil@lecnam.net

Structure de données élémetaire

On va faire

  • Complexité
  • structures complexes
  • Algo
  • tables de hachage
  • Organisation de données volumineuses

Tout ça en JAVA 🤓

Introduction

Structure de données

Permet de stocker des données pour en facilier l'accès et la modif

Elle regroupe : - Un certain nombre de onnées - Un ensemble d'opération pouvant être appliquer à ces données

On distingue génralement l'interface de l'implémentation.

Type de données abstrait

Un TDA (Type de Donnée abstrait) représente l'interface d'une structure de données. - C'est en fait ce qu'on à vu avec les "templates"

Le tableaux

C'est quoi ?

C'est une structure de données qui réunit les des données/valeurs du même type. La taille du tableau doit etre donnue au moment de sa création et ne peut pas être modifier.

Avantages : - On as un accès directe en consultation et modification à chaque case du tableau grâce à son indice.

Désavantage : - Pour agrandir le tableau, il faut en créer un plus grand puis ensuite recopier toutes les valeurs (cout mémoire + complexité)

en JAVA

int[] t; // déclare un tableau d'entier t et l'initialse à null
int[] tBis = {1, 2, 3, 4}; // déclarer un tableau d'entier tBis et initlise la référence à un espace de 4 valeurs

Un tableau en java c'est un type objet et ses valeurs sont des références

Les listes

Une liste est une suite finie de données de même type.

Elle peut être : - Soit une liste vide - Soit un élément suivie d'une liste

Type abstrait de liste

Opérations possibles :

  • tester si elle est vide
  • La construire par l'ajout d'un élément à une liste existante (éventuellement vide)
  • acceder au premier élément
  • acceder à la queue de la liste

Mais aussi :

  • Avoir la taille de la liste
  • Tester si un élément est dans la liste

Implémentation

Il ya deux façon de faire :

  • Listes chainées, ou on lit les élément avec des noeuds
  • Liste contigüe, ou la liste est un tableau qu'on agrandi/réduit

Liste chainées

public interface Noeud {

    int valeur;
    private Noeud suivant;

    int getValeur() -> return valeur;
    int getSuivant() -> return suivant;
    int setSuivant(Noeud suivant) -> this.suivant = suivant;
}

public class List implements Noeud {

    Noeud tete;

    List(Noeud n) -> this.tete = noeud;

    boolean estVide() -> this.tete == null;
    int tete() -> return this.suivant.getValeur();
    Liste queue() -> return new List(tete.getSuivant());

Liste contigüe

class TabList {
    int[] tab;
    int indiceFin;

    TabList() {
        tab  new int[100];
        indiceFin = -1;
    }

    int tete() -> return this.tab[this.indiceFin];
    TabList queue() -> { /*  retourne une liste de tout les élément sauf la tete */};
}

Conclusion

Plusieurs problèmes :

  • Intilialisation d'un tableau de taille 100
  • ...

L'implémentation d'une liste chainée est :

  • La plus dynamique
  • Efficace
  • La plus facile à implémenter

Rappel sur les listes chainées

Exemple avec plusieurs pointeurs :

Noeud p, q;
p.valeur = 6;
q = p // désormais q et p pointe vers la même valeur
q.valeur = 8 // donc modifie pour p et q

p = null; // p existe plus mais q continue continue de pointé sur la liste !

Autres méthode qu'on ajoute pour les listes chainées :

// Insère en tee de la liste un nouveau noeud de valeur x
void insererEnTete(int x) {
    Noeud p = new Noeud(x);
    p.SetSuivant(tete)
    tete = p;
}

// tests si un élément est présent dans la liste
boolean contient(int x) {
    Noeud p = this.tete;

    while(p != null){
        if (p.valeur = x)
            return true;

        p = p.suivant;
    }

    return false;
}

// ajoute y après x uniquement si x est présent
void ajouteApres(int x, int y) {
    Noeud p = this.tete;

    while(p != null){

        if (p.valeur = x) {
            Noeud q = new Noeud(y);
            q.SetSuivant(p.getSuivant())
            p.setSuivant(q);
            break;
        }

        p = p.suivant;
    }
}

// inserer x en queue de liste
void insererEnQueue(int x) {

    if (!this.contient(x))
        return;

    if (tete.getValeur() == x) {
        this.tete = new Noeud(x);
        return;
    }

    Noeud p = this.tete;

    while(p != null)
        p = p.suivant;

    Noeud q = new Noeud(x);
    p.suivant = q;
}

void supprimer(int x) {

    if (!this.contient(x))
        return;

    if (tete.getValeur() == x) {
        this.tete = tete.getSuivant();
        return;
    }

    Noeud q = null
    Noeud p = this.tete;

    while(p != null) {
        q = p;
        p = p.suivant;
    }

    q.SetSuivant(null);
}

Les piles

Les files