Untitled
unknown
plain_text
a year ago
3.5 kB
7
Indexable
#include <iostream> using namespace std; struct casegrille{ int x; char symbole; casegrille* suivant; }; typedef casegrille* ligne; struct t_colonne{ ligne* tab; int occupation; int taille; }; t_colonne vide(){ t_colonne vide; vide.occupation = 0; vide.taille=0; return vide; } // Procédure pour afficher le contenu de la grille void afficherGrille(const t_colonne& grille) { for (int i = 0; i < grille.taille; ++i) { cout << "Ligne " << i + 1 << ":" << endl; ligne courante = grille.tab[i]; while (courante != nullptr) { cout << " Colonne " << courante->x << ": " << courante->symbole << " "; courante = courante->suivant; } cout << endl; } } // Procédure pour libérer la mémoire allouée pour la grille void libererGrille(t_colonne& grille) { for (int i = 0; i < grille.taille; ++i) { ligne courante = grille.tab[i]; while (courante != nullptr) { ligne suivante = courante->suivant; delete courante; courante = suivante; } } delete[] grille.tab; grille.tab = nullptr; // Définir le pointeur du tableau à nullptr après la libération grille.taille = 0; // Réinitialiser la taille à zéro } void placer(char s, int x,int y, t_colonne& grille){ // Créer une nouvelle ligne ligne nouvelleLigne = new casegrille{x, s, nullptr}; //le tableau a la bonne taille if (y >= 1 && y <= grille.taille) { // Trouver l'emplacement approprié pour la nouvelle ligne ligne courante = grille.tab[y-1]; ligne precedente = nullptr; while (courante != nullptr && courante->x < x) { precedente = courante; courante = courante->suivant; } // Insérer la nouvelle ligne dans le chaînage trié if (precedente == nullptr) { // La nouvelle ligne doit être placée au début du chaînage grille.tab[y-1] = nouvelleLigne; } else { // La nouvelle ligne doit être placée entre precedente et courante precedente->suivant = nouvelleLigne; } nouvelleLigne->suivant = courante; } //le tableau est trop petit else if(y>grille.taille){ // Agrandir le tableau ligne* nouveauTab = new ligne[y]; // Copier les éléments de l'ancien tableau vers le nouveau for (int ind = 0; ind < grille.taille; ++ind) { nouveauTab[ind] = grille.tab[ind]; } // Ajouter la nouvelle valeur à la fin du tableau nouveauTab[y-1] = nouvelleLigne; // Mettre à jour la grille avec le nouveau tableau grille.tab = nouveauTab; for(int i=grille.taille;i<y-1 and i!=0;i++){ grille.tab[i]=nullptr; } grille.taille = y; } }; int main(){ t_colonne maGrille=vide(); // Placer des symboles dans la grille placer('O', 2, 1, maGrille); placer('X', 1, 1, maGrille); placer('X', 3, 1, maGrille); placer('O', 5, 3, maGrille); placer('X', 2, 2, maGrille); placer('O', 4, 10, maGrille); placer('X', 10, 1, maGrille); // Afficher la grille afficherGrille(maGrille); // Libérer la mémoire allouée pour la grille libererGrille(maGrille); }
Editor is loading...
Leave a Comment