C#ʵÏÖƽºâ¶à·²éÕÒÊ÷£¨BÊ÷£©

·¢±íÓÚ£º2012-4-28 10:05

×ÖÌ壺´ó ÖРС | ÉÏһƪ | ÏÂһƪ | ÎÒҪͶ¸å

 ×÷ÕߣºËΛV½£    À´Ô´£º51TestingÈí¼þ²âÊÔÍø²É±à

·ÖÏí£º

¡¡¡¡´úÂë2.³õʼ»¯BÊ÷

¡¡¡¡ÕâÊÇBTreeÀàµÄ¹¹Ô캯Êý£¬³õʼ»¯Ò»¸ö¸ù½Úµã¡£È«²¿´úÂëÎÒÉÔºó¸ø³ö¡£

¡¡¡¡ÏÂÃæÔòÒª¿¼ÂÇBÊ÷µÄ²åÈ룬ÆäʵBÊ÷µÄ¹¹½¨¹ý³ÌÒ²ÊÇÏòBÊ÷²åÈëÔªËصĹý³Ì¡£BÊ÷µÄ²åÈëÏà¶ÔÀ´Ëµ±È½Ï¸´ÔÓ£¬ÐèÒª¿¼ÂǺܶàÒòËØ¡£

¡¡¡¡Ê×ÏÈ£¬Ã¿Ò»¸ö½Úµã¿ÉÈÝÄɵÄÔªËظöÊýÊÇÒ»Ñù²¢ÇÒÓÐÏ޵ģ¬ÕâÀïÎÒÉùÃ÷ÁËÒ»¸ö³£Á¿×îΪÿ¸ö½Úµã£¬Èç´úÂë3Ëùʾ¡£

const int NumPerNode = 4;

¡¡¡¡´úÂë3.ÉèÖÃÿ¸ö½Úµã×î¶àÈÝÄɵÄÔªËظöÊý

¡¡¡¡¶ÔÓÚBÊ÷À´Ëµ£¬½ÚµãÔö¼ÓµÄΨһ·½Ê½¾ÍÊǽڵã·ÖÁÑ£¬Õâ¸ö¸ÅÄîºÍSQL SERVERÖеÄÒ³·ÖÁÑÊÇÒ»ÑùµÄ¡£

¡¡¡¡Ò³·ÖÁѵĹý³ÌÊ×ÏÈÐèÒªÉú³ÉÐÂÒ³£¬È»ºó½«´ó¸ÅÒ»°ëµÄÔªËØÒƶ¯µ½ÐÂÒ³ÖУ¬È»ºó½«ÖмäÔªËØÌáÉýµ½¸¸½Úµã¡£±ÈÈçÎÒÏëÔÚÏÖÓеÄÔªËØÖвåÈë8£¬Ôì³ÉÒÑÂúµÄÒ³½øÐзÖÁÑ£¬Èçͼ3Ëùʾ£º

ͼ3.ÏòÒѾ­ÂúµÄÒ¶×Ó½Úµã²åÈëÔªËØ»áÔì³ÉÒ³·ÖÁÑ

¡¡¡¡Í¨¹ýÒ¶×Ó·ÖÁѵĸÅÄî²»ÄÑ¿´³ö£¬Ò¶×Ó½Úµã·ÖÁѲŻáÔì³É·ÇÒ¶×Ó½ÚµãÔªËصÄÔö¼Ó¡£×îÖÕ´«µÝµ½¸ùÔªËØ¡£¶ø¸ùÔªËصķÖÁÑÊÇÊ÷³¤¸ßµÄΨһ;¾¶¡£

¡¡¡¡ÔÚC#ÖеÄʵÏÖ´úÂëÈç´úÂë4Ëùʾ¡£

  1. //BÊ÷ÖеĽڵã·ÖÁÑ  
  2.  public void BTreeSplitNode(TreeNode<T> FatherNode, int position, TreeNode<T> NodeToBeSplit)  
  3.  {  
  4.      TreeNode<T> newNode = new TreeNode<T>();//´´½¨Ð½ڵ㣬ÈÝÄÉ·ÖÁѺó±»Òƶ¯µÄÔªËØ  
  5.      newNode.IsLeaf = NodeToBeSplit.IsLeaf;//нڵãµÄ²ã¼¶ºÍÔ­½ÚµãλÓÚͬһ²ã  
  6.      newNode.elementNum = NumPerNode - (NumPerNode / 2 + 1);//нڵãÔªËصĸöÊý´óԼΪ·ÖÁѽڵãµÄÒ»°ë  
  7.      for (int i = 1; i < NumPerNode - (NumPerNode / 2 + 1); i++)  
  8.      {  
  9.          //½«Ô­Ò³Öкó°ë²¿·Ö¸´ÖƵ½ÐÂÒ³ÖÐ  
  10.          newNode.Elements[i - 1] = NodeToBeSplit.Elements[i + NumPerNode / 2];  
  11.      }  
  12.      if (!NodeToBeSplit.IsLeaf)//Èç¹û²»ÊÇÒ¶×ӽڵ㣬½«Ö¸ÕëÒ²¸´ÖƹýÈ¥  
  13.      {  
  14.          for (int j = 1; j < NumPerNode / 2 + 1; j++)  
  15.          {  
  16.              newNode.Pointer[j - 1] = NodeToBeSplit.Pointer[NumPerNode / 2];  
  17.          }  
  18.      }  
  19.      NodeToBeSplit.elementNum = NumPerNode / 2;//Ô­½ÚµãÊ£ÓàÔªËظöÊý  
  20.  
  21.      //½«¸¸½ÚµãÖ¸Ïò×Ó½ÚµãµÄÖ¸ÕëÏòºóÍÆһλ  
  22.      for (int k = FatherNode.elementNum + 1; k > position + 1; k--)  
  23.      {  
  24.          FatherNode.Pointer[k] = FatherNode.Pointer[k - 1];  
  25.      }  
  26.      //½«¸¸½ÚµãµÄÔªËØÏòºóÍÆһλ  
  27.      for (int k = FatherNode.elementNum; k > position + 1; k--)  
  28.      {  
  29.          FatherNode.Elements[k] = FatherNode.Elements[k - 1];  
  30.      }  
  31.      //½«±»·ÖÁѵÄÒ³µÄÖмä½Úµã²åÈ븸½Úµã  
  32.      FatherNode.Elements[position - 1] = NodeToBeSplit.Elements[NumPerNode / 2];  
  33.      //¸¸½ÚµãÔªËØ´óС+1  
  34.      FatherNode.elementNum += 1;  
  35.      //½«FatherNode,NodeToBeSplit,newNodeд»Ø´ÅÅÌ,Èý´ÎIOд²Ù×÷  
  36.  
  37.  }

53/5<12345>
¼ÛÖµ398ÔªµÄ²âÊԿγÌÃâ·ÑÔùËÍ£¬ÌîÎʾíÁìÈ¡°É£¡

¹Ø×¢51Testing

ÁªÏµÎÒÃÇ

¿ì½ÝÃæ°å Õ¾µãµØͼ ÁªÏµÎÒÃÇ ¹ã¸æ·þÎñ ¹ØÓÚÎÒÃÇ Õ¾³¤Í³¼Æ

·¨ÂɹËÎÊ£ºÉϺ£äîϪÂÉʦÊÂÎñËù ÏîÆåÂÉʦ
°æȨËùÓÐ ÉϺ£²©Îª·åÈí¼þ¼¼Êõ¹É·ÝÓÐÏÞ¹«Ë¾ Copyright©51testing.com 2003-2022
ͶËß¼°Òâ¼û·´À¡£ºwebmaster@51testing.com; ÒµÎñÁªÏµ£ºservice@51testing.com 021-64471599-8017

»¦ICP±¸05003035ºÅ

»¦¹«Íø°²±¸ 31010102002173ºÅ