Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ สำหรับการนำต้นไม้ B (B Tree) มาใช้งาน


ต้นไม้ B (B-tree) เป็นการทั่วไปของต้นไม้ค้นหาทวิภาค (binary search tree) בכךที่โหนดสามารถมีลูกมากกว่าสองได้ มันเป็นโครงสร้างข้อมูลต้นไม้ที่ปรับสมดุลเอง (self-balancing) ซึ่งรักษาข้อมูลที่จัดเรียงแล้วและอนุญาตการเข้าถึงแบบลำดับ การค้นหา การแทรก และการลบในเวลา logarithm

นี่คือโปรแกรม C++ สำหรับการนำต้นไม้ B มาใช้งานของออเดอร์ 6

อัลกอริทึม

Begin   ฟังก์ชัน insert() เพื่อแทรกโหนดเข้าไปในต้นไม้:     เริ่มต้น x เป็นรูท     ถ้า x เป็นใบและมีพื้นที่สำหรับข้อมูลอีกหนึ่งชิ้น ให้แทรก a ไปที่ x     ถ้าไม่ ถ้า x ไม่ใช่ใบ ทำ       ค้นหาลูกของ x ที่จะถูกเดินทางต่อไป       ถ้าลูกไม่เต็ม เปลี่ยน x ให้ชี้ไปที่ลูก       ถ้าลูกเต็ม แยกมันออก และเปลี่ยน x ให้ชี้ไปที่หนึ่งในสองส่วนของลูก ถ้า a น้อยกว่า       คีย์กลางในลูก ให้ตั้ง x เป็นส่วนแรกของลูก มิฉะนั้นเป็นส่วนที่สองของลูก       เมื่อแยกลูก ให้ย้ายคีย์จากลูกไปยังพาเรนต์ x ของมัน End

ตัวอย่างโค้ด

#include<iostream> using namespace std; struct BTree//node declaration {   int *d;   BTree **child_ptr;   bool l;   int n; }*r = NULL, *np = NULL, *x = NULL; BTree* init()//creation of node {   int i;   np = new BTree;   np->d = new int[6];//order 6   np->child_ptr = new BTree *[7];   np->l = true;   np->n = 0;   for (i = 0; i < 7; i++) {     np->child_ptr[i] = NULL;   }   return np; } void traverse(BTree *p)//traverse the tree {   cout<<endl;   int i;   for (i = 0; i < p->n; i++) {     if (p->l == false) {       traverse(p->child_ptr[i]);     }     cout << " " << p->d[i];   }   if (p->l == false) {     traverse(p->child_ptr[i]);   }   cout<<endl; } void sort(int *p, int n)//sort the tree {   int i, j, t;   for (i = 0; i < n; i++) {     for (j = i; j <= n; j++) {       if (p[i] >p[j]) {         t = p[i];         p[i] = p[j];         p[j] = t;       }     }   } } int split_child(BTree *x, int i) {   int j, mid;   BTree *np1, *np3, *y;   np3 = init();//create new node   np3->l = true;   if (i == -1) {     mid = x->d[2];//find mid     x->d[2] = 0;     x->n--;     np1 = init();     np1->l= false;     x->l= true;     for (j = 3; j < 6; j++) {       np3->d[j - 3] = x->d[j];       np3->child_ptr[j - 3] = x->child_ptr[j];       np3->n++;       x->d[j] = 0;       x->n--;     }     for (j = 0; j < 6; j++) {       x->child_ptr[j] = NULL;     }     np1->d[0] = mid;     np1->child_ptr[np1->n] = x;     np1->child_ptr[np1->n + 1] = np3;     np1->n++;     r = np1;   } else {     y = x->child_ptr[i];     mid = y->d[2];     y->d[2] = 0;     y->n--;     for (j = 3; j <6 ; j++) {       np3->d[j - 3] = y->d[j];       np3->n++;       y->d[j] = 0;       y->n--;     }     x->child_ptr[i + 1] = y;     x->child_ptr[i + 1] = np3;   }   return mid; } void insert(int a) {   int i, t;   x = r;   if (x == NULL) {     r = init();     x = r;   } else {     if (x->l== true && x->n == 6) {       t = split_child(x, -1);       x = r;       for (i = 0; i < (x->n); i++) {         if ((a >x->d[i]) && (a < x->d[i + 1])) {           i++;           break;         } else if (a < x->d[0]) {           break;         } else {           continue;         }       }       x = x->child_ptr[i];     } else {       while (x->l == false) {         for (i = 0; i < (x->n); i++) {           if ((a >x->d[i]) && (a < x->d[i + 1])) {             i++;             break;           } else if (a < x->d[0]) {             break;           } else {             continue;           }         }         if ((x->child_ptr[i])->n == 6) {           t = split_child(x, i);           x->d[x->n] = t;           x->n++;           continue;         } else {           x = x->child_ptr[i];         }       }     }   }   x->d[x->n] = a;   sort(x->d, x->n);   x->n++; } int main() {   int i, n, t;   cout<<"enter the no of elements to be inserted\n";   cin>>n;   for(i = 0; i < n; i++) {     cout<<"enter the element\n";     cin>>t;     insert(t);   }   cout<<"traversal of constructed B tree\n";   traverse(r); }

ผลลัพธ์

enter the no of elements to be inserted 7 enter the element 10 enter the element 20 enter the element 30 enter the element 40 enter the element 50 enter the element 60 enter the element 70 traversal of constructed B tree 10 20 30 40 50 60 70