B-tree: insert: Difference between revisions

From Algowiki
Jump to navigation Jump to search
Line 23: Line 23:
   1 ''i'' = ''x.n''
   1 ''i'' = ''x.n''
   2 '''if''' ''x.leaf''
   2 '''if''' ''x.leaf''
   3      '''while''' ''i &ge; 1 and ''k'' < ''x.key''iiiii
   3      '''while''' ''i &ge; 1 and ''k'' < ''x.key''<sub>i</sub>
   4              ''x.key''iii+111 = ''x.key''iiiii
   4              ''x.key''<sub>i+1</sub>= ''x.key''<sub>i</sub>
   5              ''i'' = ''i'' - 1
   5              ''i'' = ''i'' - 1
   6      ''x.key''iii+111 = ''k''
   6      ''x.key''<sub>i</sub>+111 = ''k''
   7      ''x.n'' = ''x.n'' + 1
   7      ''x.n'' = ''x.n'' + 1
   8      DISK-WRITE(''x)
   8      DISK-WRITE(''x)
   9 '''else while''' ''i'' &ge; 1 and ''k'' < ''x.key''iiiii
   9 '''else while''' ''i'' &ge; 1 and ''k'' < ''x.key''<sub>i</sub>
  10            ''i'' = ''i'' - 1
  10            ''i'' = ''i'' - 1
  11        ''i'' = ''i'' + 1
  11        ''i'' = ''i'' + 1
  12        DISK-READ(''x.c''iiii)
  12        DISK-READ(''x.c''<sub>i</sub>)
  13        '''if''' ''x.ciiii.n'' == 2''t'' - 1
  13        '''if''' ''x.c<sub>i</sub>.n'' == 2''t'' - 1
  14              B-TREE-SPLIT-CHILD(''x, i'')
  14              B-TREE-SPLIT-CHILD(''x, i'')
  15              '''if''' ''k'' > ''x.key''iiii
  15              '''if''' ''k'' > ''x.key''<sub>i</sub>
  16                      ''i'' = ''i'' + 1
  16                      ''i'' = ''i'' + 1
  17        B-TREE-INSERT-NONFULL(''x.ciii, k)   
  17        B-TREE-INSERT-NONFULL(''x.c<sub>i</sub>, k)   
</code>
</code>

Revision as of 20:23, 25 September 2014

Pseudocode

B-TREE-INSERT(T,k)

B-TREE-INSERT(T,k)
 1 r = T.root
 2 if r.n == 2t - 1
 3      s = ALLOCATE-NODE()
 4      T.root = s
 5      s.leaf = FALSE
 6      s.n = 0
 7      s.c1 = r
 8      B-TREE-SPLIT-CHILD(s, 1)
 9      B-TREE-INSERT-NONFULL(s, k)
10 else B-TREE-INSERT-NONFULL(r, k)   

B-TREE-INSERT-NONFULL(x,k)

B-TREE-INSERT-NONFULL(x,k)
 1 i = x.n
 2 if x.leaf
 3      while i ≥ 1 and k < x.keyi
 4              x.keyi+1= x.keyi
 5              i = i - 1
 6      x.keyi+111 = k
 7      x.n = x.n + 1
 8      DISK-WRITE(x)
 9 else while i ≥ 1 and k < x.keyi
10             i = i - 1
11        i = i + 1
12        DISK-READ(x.ci)
13        if x.ci.n == 2t - 1
14               B-TREE-SPLIT-CHILD(x, i)
15               if k > x.keyi
16                       i = i + 1
17         B-TREE-INSERT-NONFULL(x.ci, k)