bpdelete.cpp

来自「经典c++程序的实现」· C++ 代码 · 共 50 行

CPP
50
字号
// function binaryle(A, n, K) returns the greatest value less than//   or equal to K in array A of length n.// function removerec(A, n, c) removes record at position c from//   array A with n records.// function merge_nodes(N1, N2) merges together the record arrays of//   BPNodes N1 and N2.// function suffle_nodes(N1, N2) copies execess records from BPNode//   N2 to BPNode N1, so that both have an equal number of records. Bool BP::removehelp(BPNode* root, KEY K, KEY& retval) {  int currec;  Bool delchild;  KEY myretv = NOKEY;  if (root->isLeaf()) {    currec = binaryle(root->recarray, root->numrec, K);    if (root->recarray[currec].key != K) ERROR;  // record not found  }  else { // Delete from child    currec = binaryle(root->recarray, root->numrec, K);    delchild = removehelp(root->recarray[currec].pointer,K,myretv);    if (myretv != NOKEY)      root->recarray[currec].key = myretv;    if (!delchild) return FALSE; // Child did not collapse  }  // Now, remove record at position currec  if (root->numrec > THRESHOLD) {// Just remove it    removerec(root->recarray, rec->numrec, currec);    return FALSE;  }  else {// Underflow    if (root->leftptr == NULL) // No left neighbor      if (root->numrec + root->rightptr->numrec <= MAXREC) {        merge_nodes(root, root->rightptr);        return TRUE;      }      else {        shuffle_nodes(root, root->rightptr);        retval = root->recarray[0].key;  // Key value has changed        return FALSE;      }    else if (root->numrec + root->leftptr->numrec <= MAXREC) {      merge_nodes(root, root->leftptr);      return TRUE;    }    else {      shuffle_nodes(root, root->leftptr);      retval = root->recarray[0].key;      return FALSE;}}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?