/* -------------------------------------------------------- */ /* **** btutil.c **** Contient les fonctions utilitaires du programme create_root() -- Obtient.

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
Rappels C.
(Classes prédéfinies – API Java)
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
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é.
Mémoire périphérique Stockage primaire: Mémoire principale (RAM)
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
Les fichiers et les chaînes de caractères
1 Les pointeurs et quelques rappels sur certains éléments du langage C.
Les tris.
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.
IFT Structures de données
Instruction sélective switch-case Instruction répétitive do-while For
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
/* */ /*Mise en garde….. Notez bien: dans les exemples qui suivent, la clé d ’indexation est un.
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.
Procédures et fonctions
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
et quelques rappels sur certains éléments du langage C
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.
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
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
Pthread Ordonnancement. #define _MULTI_THREADED #include #ifndef _CHECK_H #define _CHECK_H /* headers used by a majority of the example program */ #include.
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.
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
Les monceaux (Heap) Monceaux Propriétés des Monceaux
Page: 1-Ali Walid Gestion de fichiers. B-Arbre +.
. Le B-Arbre.
1 UNIX AVANCE Yves PAGNOTTE – Janvier – LES PROCESSUS SOUS UNIX.
Informatique 2A Langage C 2 è séance. Objectifs de la séance 2 Début de la modularité avec les fonctions Création d’une première bibliothèque.
Informatique 1A Langage C 6 ème séance 1. Objectifs de la séance 6  Allocation dynamique de mémoire  Application à la création de tableaux 2.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Informatique 2A Langage C 4ème séance
Transcription de la présentation:

/* */ /* **** 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. */

/*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(): Place NOKEY dans tous les espaces "clef" et NIL dans les espaces fils */ 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() -- Cree "btree.dat" ainsi que le noeud racine getpage() -- Obtient le prochain bloc disponible dans "btree.dat" pour une nouvelle page btread() -- Lit le numero rrn de la page a partir de "btree.dat" btwrite() -- Ecrit le numero 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 **** 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+); root = create_root(key, NIL, NIL); } /* ouverture du fichier principal ETUDIANT.dat ….*/ key = getclef(); /* une première clé..*/ 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 maniere recursive tant que le bas de l'arbre n'est pas atteint.Alors, insert() insere une clef dans le noeud.Si le noeud est plein, - appelle split() pour scinder le noeud - promouvoi la clef du milieu et le rrn du nouveau noeud */ /* 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 a etre inseree ici ou plus bas *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 boolennes */ 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 */ }