/* -------------------------------------------------------- */ /*Mise en garde….. Notez bien: dans les exemples qui suivent, la clé d ’indexation est un.

Slides:



Advertisements
Présentations similaires
Structures de données avancées : MBT ( Multidimensional B-trees )
Advertisements

Premier programme en C :
A RECUPERER EN ENTRANT Le polycopié de Caml Partie 1
L’ interruption de boucle
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
Suite à de nombreuses remarques concernant le projet de structures de données 'Gestion d'un Aéroport' , voici un polycopié de cours concernant la gestion.
FLSI602 Génie Informatique et Réseaux
Parallel Programming in C with MPI and OpenMP
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Récursivité.
Cours d’Algorithmique
OCaml – Les arbres L3 MI.
RECURSIVITE ARBRES BINAIRES
Programme de baccalauréat en informatique Algorithmique et programmation IFT-1001 Thierry EUDE Hatem Mahbouli Laboratoire #12 Département dinformatique.
PROGRAMMATION SCIENTIFIQUE EN C PRO Généralités u Présentation du plan de cours –Disponibilité –Références u Environnement de travail –Langage C.
TRAITEMENT DE STRUCTURES
1 Les pointeurs et quelques rappels sur certains éléments du langage C.
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
Les tris.
Gestion de Fichiers Arbres B.
FICHIERS.
Les fichiers binaires en C++
Les fichiers indexés (Les B-arbres)
LA STRUCTURE D'ARBRE-B Institut National des Sciences Appliquées – Rouen Département Architecture des Systèmes d’Information.
Arbres Rouge noir Démo : INF3105 Structures de données et algorithmes
/* */ /* **** btutil.c **** Contient les fonctions utilitaires du programme create_root() -- Obtient.
IFT Structures de données
Instruction sélective switch-case Instruction répétitive do-while For
Indexes à Arbres et Indexes à Hachage
IFT 6800 Atelier en Technologies d’information
Les arbres binaires.
1 La récursion. Nous avons vu qu'un programme est constitué d'un ensemble de fonctions. Il est possible pour une fonction donnée d'appeler une autre fonction.
Plan troisième cours Instruction sélective Instruction répétitive
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Semaine 12 (2 ième partie) Les B-arbres Département d’informatique et de génie logiciel Édition septembre.
Structures de données IFT-2000 Abder Alikacem Retour sur les listes ordonnées Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000 Abder Alikacem Semaine 11, 1 ère partie Les B-arbres Département dinformatique et de génie logiciel Édition septembre 2009.
L’essentiel du langage C
Structures des données
Le langage C Structures de données
Les pointeurs L'opérateur &.
Ch. PAUL - Piles et Files à l'aide de listes chainées
Les adresses des fonctions
1 FICHIERS. 2 Les Fichiers  Les "entrées-sorties conversationnelles" échangent des informations entre le programme et l'utilisateur.  Le terme de fichier.
SIF-1053 Architecture des ordinateurs
Autres éléments du langage
Un survol du language C.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Arbres binaires et tables de hachage
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
Structures de données avancées : Fichiers uni-dimensionnels Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Programmation Système et Réseau
Structures de données avancées : Arbres ‘Left Leaning Red-Black’
Structures de données avancées : MBT ( Multidimensional B-trees )
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
Cours LCS N°4 Présenté par Mr: LALLALI
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
6ième Classe (Mercredi, 17 novembre) CSI2572
Les structures de contrôle
1 UMLV  FICHIERS Mémoire de masse découpée en blocs Fichier :liste chaînée de blocs, ou arbre de blocs (répertoires - fichiers)‏ Bloc d’éléments Bloc.
1 PHP 5 Notions fondamentales (niveau 1 cours #3) Formation continue – Cégep de Sainte-Foy François G Couillard.
Les monceaux (Heap) Monceaux Propriétés des Monceaux
4/25/2017 4:30 PM Arbres (2,4) CSI2510 CSI2510.
. Le B-Arbre.
1 UNIX AVANCE Yves PAGNOTTE – Janvier – LES PROCESSUS SOUS UNIX.
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Informatique 2A Langage C 4ème séance
Transcription de la présentation:

/* */ /*Mise en garde….. Notez bien: dans les exemples qui suivent, la clé d ’indexation est un champ numérique, de la même manière que dans le cadre du TP3 (et de la phase 3 du projet en cours). De plus, n’oubliez pas d’associer à toute clé son pointeur donné… Enfin, je vous invite à considérer tout ce qui sera donné en énoncé du TP3 ainsi que les explications supplémentaires qui se trouveront ici: (ces explications additionnelles seront disponibles en même temps que le TP3) */

/* */ /* **** btutil.c **** Contient les fonctions utilitaires du programme create_root() -- Obtient et initialise le noeud racine et insere une clef. pageinit() -- Place NOKEY dans tous les espaces "clef" et NIL dans les espaces "fils" search_node() -- Retourne YES si la clef est dans le noeud, sinon retourne NO. Dans chaque cas, la position de la clef est mise dans pos. ins_in_page() -- Insere la clef et le fils droit dans la page. split() -- Scinde le noeud par la creation d'un nouveau noeud et par le déplacement de la moitié des clefs vers ce nouveau noeud. Effectue la promotion de la clef du milieu et du rrn du nouveau noeud. Etc.. */

/*create_root() -- Obtient et initialise le noeud racine et insere une clef.*/ create_root(clef key, short left, short right) { BTPAGE page; short rrn; rrn = getpage(); pageinit(&page); page.key[0] = key; page.child[0] = left; page.child[1] = right; page.keycount = 1; btwrite(rrn,&page); putroot(rrn); return(rrn); } /* */

/*pageinit(): initialise une PAGE */ pageinit(BTPAGE *p_page) /* p_page est un pointer vers une page */ { int j; for (j = 0; j < MAXKEYS; j++) { p_page->key[j].matricule = NIL; p_page->key[j].RRN_Fich_Prin = NIL; p_page->child[j] = NIL; } p_page->child[MAXKEYS] = NIL; return 0; }

/* **** btio.c **** Ce fichier contient les fonctions b-arbre impliquees directement dans les entres/sorties btopen() -- Ouvre le fichier "btree.dat" qui contient le b-arbre. btclose() -- Ferme "btree.dat" getroot() -- Obtient le rrn du noeud racine a partir des deux premiers octets de btree.dat. putroot() -- Place le rrn du noeud racine dans les deux premiers octets de btree.dat. create_tree() -- Crée "btree.dat" ainsi que le noeud racine getpage() -- Obtient le prochain bloc disponible dans "btree.dat" pour une nouvelle page btread() -- Lit le numéro rrn de la page à partir de "btree.dat" btwrite() -- Écrit le numéro rrn de la page dans "btree.dat" */

/* btopen() -- Ouvre le fichier "btree.dat" qui contient le b-arbre */ int btopen(void) { btfd = fopen("btree.dat", "w+b"); return(btfd > 0); } /* */

/*getroot() -- Obtient le rrn du noeud racine a partir des deux premiers octets de btree.dat */ short getroot(void) { short root; fseek(btfd, 0, SEEK_SET); if (fread(&root, sizeof(short), 1, btfd) == 0) { printf("Error: Unable to get root.\007\n"); exit(1); } return root; }

/* */ /* **** driver.c **** Le "pilote" pour la création et la manipulation de b-arbres. Crée ou ouvre un fichier b-arbre. Obtient la clef suivante et appelle la fonction insert pour l'insérer dans l'arbre. Au besoin, driver peut créer une nouvelle racine pour l'arbre. */

/* **** driver.c ****...suite Le "pilote" pour la création et la manipulation de b-arbres. Crée ou ouvre un fichier b-arbre. Obtient la clef suivante et appelle la fonction insert pour l'inserer dans l'arbre. Au besoin, driver peut créer une nouvelle racine pour l'arbre. */ #include "bt.h" int main() {…… /* ouverture du fichier index*/ if btopen() root = getroot(); else {btfd = fopen(``btree.dat``, ``wb+); key = getclef(); /* une première clé dans ce cas..*/ root = create_root(key, NIL, NIL); } /* ouverture du fichier principal ETUDIANT.dat ….*/ key = getclef(); /* une clé à insérer*/ do { promoted = insert(root, key, &promo_rrn, &promo_key); if (promoted) root = create_root(promo_key, root, promo_rrn); key = getclef(); } while(/* le fichier ETUDIANT n’est pas épuisé*/); }

/***** insert.c **** Contient la fonction insert() qui insere une clef dans un b-arbre. S'appelle de manière recursive tant que le bas de l'arbre n'est pas atteint. Alors, insert() insère une clef dans une feuille de l ’arbre. Si le noeud est plein, - appelle split() pour scinder le noeud - promouvoi la clef du milieu et le rrn du nouveau nœud et essaie d ’insérer la clé promue lors de ses remontées d ’appel */ /* insert() Arguments: rrn: Le rrn de la page dans laquelle on fait l'insertion *promo_r_child: Le fils promu vers le prochain niveau key: La clef à être insérée *promo_key: La clef promue vers le prochain niveau */

insert (short rrn, clef key, short *promo_r_child, clef *promo_key) { BTPAGE page, /* La page actuelle */ newpage; /* La nouvelle page cree dans le cas d'une separation */ int found, promoted; /* Des valeurs booleennes */ short pos, p_b_rrn; /* Le rrn promu d'en dessous */ clef p_b_key; /* La clef promue d'en dessous */ if (rrn == NIL) { /* Une fois passe le bas de l'arbre on promouvoit */ *promo_key = key; /* la premiere clef pour qu'elle soit inseree au niveau d'une feuille */ *promo_r_child = NIL; return (YES); } btread(rrn, &page); found = search_node(key, &page, &pos); if (found) { printf("Error: attempt to insert duplicate key: %d \n\007", key.matricule); return (0); } promoted = insert(page.child[pos], key, &p_b_rrn, &p_b_key); if (!promoted) return (NO); /* Pas de promotion */ if (page.keycount < MAXKEYS) {ins_in_page(p_b_key, p_b_rrn, &page); /* On peux inserer la clef et un */ btwrite(rrn, &page); /* pointer dans cette page. */ return (NO); /* Pas de promotion */ } else {split(p_b_key, p_b_rrn, &page, promo_key, promo_r_child, &newpage); btwrite(rrn, &page); btwrite(*promo_r_child, &newpage); return (YES); /* Une promotion a lieu */ }