⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text10-12.htm

📁 浙江大学计算机学院数据结构课程的教学课件
💻 HTM
字号:
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body bgcolor="#FFFFFF" link="#0000FF" vlink="#3399FF" alink="#FF0066">
<div id="Layer1" style="position:absolute; width:711px; height:21px; z-index:1; top: 10px; background-color: #CCCCCC; layer-background-color: #CCCCCC; border: 1px none #000000; left: 26px"><b>|</b><font face="宋体" size="2"><a href="../text1/text1-0.htm">第一章</a></font><b>|</b><font face="宋体" size="2"><a href="../text2/text2-0.htm">第二章</a></font><b>|</b><font face="宋体" size="2"><a href="../text3/text3-0.htm">第三章</a></font><b>|</b><font face="宋体" size="2"><a href="../text4/text4-0.htm">第四章</a></font><b>|</b><font face="宋体" size="2"><a href="../text5/text5-0.htm">第五章</a></font><b>|</b><font face="宋体" size="2"><a href="../text6/text6-0.htm">第六章</a></font><b>|</b><font face="宋体" size="2"><a href="../text7/text7-0.htm">第七章</a></font><b>|</b><font face="宋体" size="2"><a href="../text8/text8-0.htm">第八章</a></font><b>|</b><font face="宋体" size="2"><a href="../text9/text9-0.htm">第九章</a></font><b>|</b><font face="宋体" size="2">第十章</font><b>|</b><font size="2" face="宋体"><a href="../textA/textA-0.htm">算法分析</a><b><font color="#000000">|</font></b> 
  </font></div>
<pre align="left">

<b><font face="Arial, Helvetica, sans-serif" size="4" color="#000000">#define IS_FULL (ptr )  (!(ptr ))
#define FALSE  =  0
#define  TRUE  = 1
typedef  struct {
                            int  key;
                            }<font color="#FF0000">element</font>;
typedef  struct tree_node  *tree_pointer;
               struct tree_node {
                                                tree_pointer  lefe_child;
                                                element   data;
                                                short  int  bf;
                                                tree_pointer  right_child;
                                                 };
int  unbalanced  =  FALSE;
tree_pointer  root  = NULL;

<font color="#FF0000">avl_insert</font> (&root, x, &unbalanced )

void <font color="#FF0000">avl_insert</font>( tree_pointer *parent , element x ,  int *unbalanced )
{  if ( !*parent ){  <i><font size="3" color="#CC0099"> /* insert element into null tree */</font></i>
       *unbalanced = TRUE ; 
       *parent = ( tree_pointer ) malloc( sizeof( tree_node ) ) ; 
       if ( IS_FULL( *parent ) ){
           fprintf( stderr , "The memory is  full\n" ) ; 
           exit( 1 ) ; 
       }
       ( *parent )->left_child = ( *parent )->right_child = NULL ; 
       ( *parent )->bf = 0 ; 
       ( *parent )->data = x ; 
   }
   else if ( x.key < ( *parent )->data.key ){
       avl_insert( &( *parent )->left_child , x , unbalanced ) ; 
       if ( *unbalanced )
 <i><font size="3" color="#CC0099">      /* left branch has grown higher */</font></i>
          switch( ( *parent )->bf ){
             case -1: ( *parent )->bf = 0 ; 
                       *unbalanced = FALSE ;     break ; 
             case 0:  ( *parent )->bf = 1 ;        break ; 
             case 1:  left_rotation( parent , unbalanced ) ; 
          }
   }
   else if ( x.key > ( *parent )->data.key ){
      avl_insert( &( *parent )->right_child , x , unbalanced ) ; 
       if ( *unbalanced )
      <i><font size="3" color="#CC0099">     /* right branch has grown higher */
     </font></i><font size="3" color="#CC0099"><font size="4" color="#000000">      switch ( ( *parent )->bf ){</font></font>
              case 1:  ( *parent )->bf = 0 ; 
                       *unbalanced = FALSE ;      break ; 
              case 0:  ( *parent )->bf = -1 ;       break ; 
              case -1: right_rotation( parent , unbalanced ) ; 
           }
   }
   else {  *unbalanced = FALSE ; 
       printf( "The key is already in the tree" ) ; 
   }
}
void <font color="#FF0000">left_rotation</font>( tree_pointer *parent , int *unbalanced )
{
        tree_pointer grand_child , child ; 
        child = ( *parent )->left_child ; 
        if ( child->bf == 1 ){
     <i><font size="3" color="#CC0099">      /* LL rotation */</font></i>
           ( *parent )->left_child = child->right_child ; 
           child->right_child = *parent ; 
           ( *parent )->bf = 0 ; 
           ( *parent ) = child ; 
        }
        else {
  <i><font size="3" color="#CC0099">      /* LR rotation */</font></i>
           grand_child = child->right_child ; 
           child->right_child = grand_child->left_child ; 
           grand_child->left_child = child ; 
           ( *parent )->left_child = grand_child->right_child ; 
           grand_child->right_child = *parent ; 
           switch( grand_child->bf ){
                  case 1:  ( *parent )->bf = -1 ; 
                           child->bf = 0 ; 
                           break ; 
                  case 0:  ( *parent )->bf = child->bf = 0 ; 
                           break ; 
                  case -1: ( *parent )->bf = 0 ; 
                           child->bf = 1 ; 
           }
           *parent = grand_child ; 
        }
        ( *parent )->bf = 0 ; 
        *unbalanced = FALSE ; 
}       

<font color="#FF0000">complexity</font>
  h --  the  height of the tree before insertion
 the worst case  -     O( log n )

<font color="#FF0000">probability:</font>
    rebalance --  0.5349
    single rotation ( LL or RR )   ---  0.2324
    double rotation  ( LR or RL ) ---  0.2324   </font></b>
         
           <img src="image/table.gif" width="570" height="168"></pre>
<p>&nbsp;</p>
<table width="731" cellspacing="0" cellpadding="0">
  <tr> 
    <td width="327">&nbsp;</td>
    <td width="271"><a href="../index.htm"><img width="60" height="25" usemap="#MapMap4" border="0" src="../../images/home.gif"></a><a href="../index.htm"><map name="MapMap4"><area shape="rect" coords="42,-34,88,-15" href="text0.htm"><area shape="rect" coords="4,4,55,23" href="text10-index.htm"></map></a></td>
    <td width="131"><font face="楷体_GB2312" size="2"><b><a href="text10-11.htm">上一页</a> 
      </b></font></td>
  </tr>
</table>
<p>&nbsp;</p>
</body>
</html>

⌨️ 快捷键说明

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