3 \documentclass[12pt]{article}
4 \usepackage{elemfig,amsmath}
6 \newcommand{\xlab}[1]{\mlabel{\textsc{#1}}}
10 data[0] = btex \xlab{a} etex; data[1] = btex \xlab{b} etex; data[2] = btex \xlab{c} etex;
11 data[3] = btex \xlab{d} etex; data[4] = btex \xlab{e} etex; data[5] = btex \xlab{f} etex;
12 data[6] = btex \xlab{g} etex; data[7] = btex \xlab{h} etex; data[8] = btex \xlab{i} etex;
13 data[9] = btex \xlab{j} etex; data[10] = btex \xlab{k} etex; data[11] = btex \xlab{l} etex;
14 data[12] = btex \xlab{m} etex; data[13] = btex \xlab{n} etex; data[14] = btex \xlab{o} etex;
16 pair min_reasonable_cell; min_reasonable_cell := (0,0);
18 min_reasonable_cell :=
19 (max(xpart min_reasonable_cell, xpart (urcorner data[_i_] - llcorner data[_i_])),
20 max(ypart min_reasonable_cell, ypart (urcorner data[_i_] - llcorner data[_i_])));
22 color deletedelement; deletedelement = .5white;
24 picture emptyqueue; emptyqueue := btex \phantom{\elementlabel{Queue}} etex;
25 picture vemptyqueue; vemptyqueue := emptyqueue rotated 90 xscaled .4;
30 boxjoin(b.w - a.e = (20,0));
31 leafit.a(data[0], data[1], data[2]);
32 leafit.d(data[3], data[4], data[5]);
33 leafit.g(data[6], data[7], data[8]);
34 leafit.j(data[9], data[10], data[11]);
35 leafit.m(data[12], data[13], data[14]);
37 internalnodeit.ina(data[3], data[6], nullpicture);
38 internalnodeit.inj(data[12], nullpicture, nullpicture);
39 internalnodeit.root(data[9], nullpicture, nullpicture);
40 ina.s = .5[a.nw,g.ne] + (0,24);
41 inj.s = .5[j.nw,m.ne] + (0,24);
42 root.s = .5[ina.nw,inj.ne] + (0,24);
43 fixelement(a,d,g,j,m);
44 fixelement(root,ina,inj);
45 leafconnect(a,d,g,j,m);
46 drawelement(a,d,g,j,m,ina,inj,root);
47 internalnodeconnect(ina,a,d,g);
48 internalnodeconnect(inj,j,m);
49 internalnodeconnect(root,ina,inj);
54 boxjoin(b.w - a.e = (20,0));
55 leafit.a(data[0], data[1], data[2]);
56 leafit.d(data[3], data[4], data[5]);
58 leafit.g(data[6], data[7], data[8]);
59 leafit.j(data[9], data[10], data[11]);
60 leafit.m(data[12], data[13], data[14]);
62 internalnodeit.ina(data[3], data[6], nullpicture);
63 internalnodeit.inj(data[12], nullpicture, nullpicture);
64 internalnodeit.root(data[9], nullpicture, nullpicture);
65 ina.s = .5[a.nw,g.ne] + (0,24);
66 inj.s = .5[j.nw,m.ne] + (0,24);
67 root.s = .5[ina.nw,inj.ne] + (0,24);
68 fixelement(a,d,g,j,m);
69 fixelement(root,ina,inj);
70 fill nodecellbpath(d,1) withcolor deletedelement;
71 leafconnect(a,d,g,j,m);
72 drawelement(a,d,g,j,m,ina,inj,root);
73 internalnodeconnect(ina,a,d,g);
74 internalnodeconnect(inj,j,m);
75 internalnodeconnect(root,ina,inj);
79 % delete node DEF: poison next pointer
80 boxjoin(b.w - a.e = (20,0));
81 leafit.a(data[0], data[1], data[2]);
82 leafit.d(data[3], data[4], data[5]);
83 d.locked = d.deleted = true;
84 leafit.g(data[6], data[7], data[8]);
85 leafit.j(data[9], data[10], data[11]);
86 leafit.m(data[12], data[13], data[14]);
88 internalnodeit.ina(data[3], data[6], nullpicture);
89 internalnodeit.inj(data[12], nullpicture, nullpicture);
90 internalnodeit.root(data[9], nullpicture, nullpicture);
91 ina.s = .5[a.nw,g.ne] + (0,24);
92 inj.s = .5[j.nw,m.ne] + (0,24);
93 root.s = .5[ina.nw,inj.ne] + (0,24);
94 fixelement(a,d,g,j,m);
95 fixelement(root,ina,inj);
96 fill nodecellsbpath(d,0,2) withcolor deletedelement;
97 fill leafnextbpath(d) withcolor black;
98 leafconnect(a,d,g,j,m);
99 drawelement(a,d,g,j,m,ina,inj,root);
100 internalnodeconnect(ina,a,d,g);
101 internalnodeconnect(inj,j,m);
102 internalnodeconnect(root,ina,inj);
106 % delete node DEF: poison ABC's next pointer
107 boxjoin(b.w - a.e = (20,0));
108 leafit.a(data[0], data[1], data[2]);
109 leafit.d(data[3], data[4], data[5]);
110 d.locked = d.deleted = true;
111 leafit.g(data[6], data[7], data[8]);
112 leafit.j(data[9], data[10], data[11]);
113 leafit.m(data[12], data[13], data[14]);
115 internalnodeit.ina(data[3], data[6], nullpicture);
116 internalnodeit.inj(data[12], nullpicture, nullpicture);
117 internalnodeit.root(data[9], nullpicture, nullpicture);
118 ina.s = .5[a.nw,g.ne] + (0,24);
119 inj.s = .5[j.nw,m.ne] + (0,24);
120 root.s = .5[ina.nw,inj.ne] + (0,24);
121 fixelement(a,d,g,j,m);
122 fixelement(root,ina,inj);
123 fill nodecellsbpath(d,0,2) withcolor deletedelement;
124 fill leafnextbpath(d) withcolor black;
125 fill leafnextbpath(a) withcolor black;
126 leafconnect(a,d,g,j,m);
127 drawelement(a,d,g,j,m,ina,inj,root);
128 internalnodeconnect(ina,a,d,g);
129 internalnodeconnect(inj,j,m);
130 internalnodeconnect(root,ina,inj);
134 % delete node DEF: adjust GHI.prev
135 boxjoin(b.w - a.e = (20,0));
136 leafit.a(data[0], data[1], data[2]);
137 leafit.d(data[3], data[4], data[5]);
138 d.locked = d.deleted = true;
139 leafit.g(data[6], data[7], data[8]);
140 leafit.j(data[9], data[10], data[11]);
141 leafit.m(data[12], data[13], data[14]);
143 internalnodeit.ina(data[3], data[6], nullpicture);
144 internalnodeit.inj(data[12], nullpicture, nullpicture);
145 internalnodeit.root(data[9], nullpicture, nullpicture);
146 ina.s = .5[a.nw,g.ne] + (0,24);
147 inj.s = .5[j.nw,m.ne] + (0,24);
148 root.s = .5[ina.nw,inj.ne] + (0,24);
149 fixelement(a,d,g,j,m);
150 fixelement(root,ina,inj);
151 fill nodecellsbpath(d,0,2) withcolor deletedelement;
152 fill leafnextbpath(d) withcolor black;
153 fill leafnextbpath(a) withcolor black;
156 g.prevpath = g.prev .. (d.se - (0,3)) .. tension 1.5 .. (d.sw - (0,3)) .. (a.previn - (0,1));
157 d.nextpath = d.next -- g.nextin;
158 drawelement(a,d,g,j,m,ina,inj,root);
159 internalnodeconnect(ina,a,d,g);
160 internalnodeconnect(inj,j,m);
161 internalnodeconnect(root,ina,inj);
165 % delete node DEF: adjust ABC.next
166 boxjoin(b.w - a.e = (20,0));
167 leafit.a(data[0], data[1], data[2]);
168 leafit.d(data[3], data[4], data[5]);
169 d.locked = d.deleted = true;
170 leafit.g(data[6], data[7], data[8]);
171 leafit.j(data[9], data[10], data[11]);
172 leafit.m(data[12], data[13], data[14]);
174 internalnodeit.ina(data[3], data[6], nullpicture);
175 internalnodeit.inj(data[12], nullpicture, nullpicture);
176 internalnodeit.root(data[9], nullpicture, nullpicture);
177 ina.s = .5[a.nw,g.ne] + (0,24);
178 inj.s = .5[j.nw,m.ne] + (0,24);
179 root.s = .5[ina.nw,inj.ne] + (0,24);
180 fixelement(a,d,g,j,m);
181 fixelement(root,ina,inj);
182 fill nodecellsbpath(d,0,2) withcolor deletedelement;
183 fill leafnextbpath(d) withcolor black;
185 a.nextpath = a.next .. (d.nw + (0,3)) .. tension 1.5 .. (d.ne + (0,3)) .. (g.nextin + (0,1));
186 d.prevpath = d.prev -- a.previn;
187 d.nextpath = d.next -- g.nextin;
188 g.prevpath = g.prev .. (d.se - (0,3)) .. tension 1.5 .. (d.sw - (0,3)) .. (a.previn - (0,1));
189 drawelement(a,d,g,j,m,ina,inj,root);
190 internalnodeconnect(ina,a,d,g);
191 internalnodeconnect(inj,j,m);
192 internalnodeconnect(root,ina,inj);
196 % delete node DEF: adjust internal node
197 boxjoin(b.w - a.e = (20,0));
198 leafit.a(data[0], data[1], data[2]);
199 leafit.d(data[3], data[4], data[5]);
201 leafit.g(data[6], data[7], data[8]);
202 leafit.j(data[9], data[10], data[11]);
203 leafit.m(data[12], data[13], data[14]);
205 internalnodeit.ina(data[6], nullpicture, nullpicture);
207 internalnodeit.inj(data[12], nullpicture, nullpicture);
208 internalnodeit.root(data[9], nullpicture, nullpicture);
209 ina.s = .5[a.nw,g.ne] + (0,24);
210 inj.s = .5[j.nw,m.ne] + (0,24);
211 root.s = .5[ina.nw,inj.ne] + (0,24);
212 fixelement(a,d,g,j,m);
213 fixelement(root,ina,inj);
214 fill nodecellsbpath(d,0,2) withcolor deletedelement;
215 fill leafnextbpath(d) withcolor black;
217 a.nextpath = a.next .. (d.nw + (0,3)) .. tension 1.5 .. (d.ne + (0,3)) .. (g.nextin + (0,1));
218 d.prevpath = d.prev -- a.previn;
219 d.nextpath = d.next -- g.nextin;
220 g.prevpath = g.prev .. (d.se - (0,3)) .. tension 1.5 .. (d.sw - (0,3)) .. (a.previn - (0,1));
221 drawelement(a,d,g,j,m,ina,inj,root);
222 internalnodeconnect(ina,a,g);
223 internalnodeconnect(inj,j,m);
224 internalnodeconnect(root,ina,inj);
228 % delete node GHI: after leaf unlink
229 boxjoin(b.w - a.e = (20,0));
230 leafit.a(data[0], data[1], data[2]);
231 leafit.d(data[3], data[4], data[5]);
233 leafit.g(data[6], data[7], data[8]);
234 g.locked = g.deleted = true;
235 leafit.j(data[9], data[10], data[11]);
236 leafit.m(data[12], data[13], data[14]);
238 internalnodeit.ina(data[6], nullpicture, nullpicture);
239 internalnodeit.inj(data[12], nullpicture, nullpicture);
240 internalnodeit.root(data[9], nullpicture, nullpicture);
241 ina.s = .5[a.nw,g.ne] + (0,24);
242 inj.s = .5[j.nw,m.ne] + (0,24);
243 root.s = .5[ina.nw,inj.ne] + (0,24);
244 fixelement(a,d,g,j,m);
245 fixelement(root,ina,inj);
246 fill nodecellsbpath(g,0,2) withcolor deletedelement;
247 fill leafnextbpath(g) withcolor black;
249 a.nextpath = a.next .. (g.nw + (0,3)) .. tension 1.5 .. (g.ne + (0,3)) .. (j.nextin + (0,1));
250 g.prevpath = g.prev -- a.previn;
251 g.nextpath = g.next -- j.nextin;
252 j.prevpath = j.prev .. (g.se - (0,3)) .. tension 1.5 .. (g.sw - (0,3)) .. (a.previn - (0,2));
253 drawelement(a,g,j,m,ina,inj,root);
254 internalnodeconnect(ina,a,g);
255 internalnodeconnect(inj,j,m);
256 internalnodeconnect(root,ina,inj);
260 % delete node GHI: after internal node
261 boxjoin(b.w - a.e = (20,0));
262 leafit.a(data[0], data[1], data[2]);
263 leafit.d(data[3], data[4], data[5]);
265 leafit.g(data[6], data[7], data[8]);
267 leafit.j(data[9], data[10], data[11]);
268 leafit.m(data[12], data[13], data[14]);
270 internalnodeit.ina(nullpicture, nullpicture, nullpicture);
272 internalnodeit.inj(data[12], nullpicture, nullpicture);
273 internalnodeit.root(data[9], nullpicture, nullpicture);
274 ina.s = .5[a.nw,g.ne] + (0,24);
275 inj.s = .5[j.nw,m.ne] + (0,24);
276 root.s = .5[ina.nw,inj.ne] + (0,24);
277 fixelement(a,d,g,j,m);
278 fixelement(root,ina,inj);
279 fill nodecellsbpath(g,0,2) withcolor deletedelement;
280 fill leafnextbpath(g) withcolor black;
282 a.nextpath = a.next .. (g.nw + (0,3)) .. tension 1.5 .. (g.ne + (0,3)) .. (j.nextin + (0,1));
283 g.prevpath = g.prev -- a.previn;
284 g.nextpath = g.next -- j.nextin;
285 j.prevpath = j.prev .. (g.se - (0,3)) .. tension 1.5 .. (g.sw - (0,3)) .. (a.previn - (0,2));
286 drawelement(a,g,j,m,ina,inj,root);
287 internalnodeconnect(ina,a);
288 internalnodeconnect(inj,j,m);
289 internalnodeconnect(root,ina,inj);
293 % delete node GHI: after collapse
294 boxjoin(b.w - a.e = (20,0));
295 leafit.a(data[0], data[1], data[2]);
296 leafit.d(data[3], data[4], data[5]);
298 leafit.g(data[6], data[7], data[8]);
300 leafit.j(data[9], data[10], data[11]);
301 leafit.m(data[12], data[13], data[14]);
303 internalnodeit.ina(nullpicture, nullpicture, nullpicture);
305 internalnodeit.inj(data[12], nullpicture, nullpicture);
306 internalnodeit.root(data[9], nullpicture, nullpicture);
308 ina.s = .5[a.nw,g.ne] + (0,24);
309 inj.s = .5[j.nw,m.ne] + (0,24);
310 root.s = .5[ina.nw,inj.ne] + (0,24);
311 fixelement(a,d,g,j,m);
312 fixelement(root,ina,inj);
313 fill nodecellsbpath(g,0,2) withcolor deletedelement;
314 fill leafnextbpath(g) withcolor black;
316 a.nextpath = a.next .. (g.nw + (0,3)) .. tension 1.5 .. (g.ne + (0,3)) .. (j.nextin + (0,1));
317 g.prevpath = g.prev -- a.previn;
318 g.nextpath = g.next -- j.nextin;
319 j.prevpath = j.prev .. (g.se - (0,3)) .. tension 1.5 .. (g.sw - (0,3)) .. (a.previn - (0,2));
320 drawelement(a,g,j,m,ina,inj,root);
321 internalnodeconnect(inj,j,m);
322 drawconnarrow ina.child[0] {down} .. tension 4 .. {down} (a.n + (3,0));
323 drawconnarrow root.child[0] {down} .. tension 2 and 1 .. (ina.nw + (0,4)) .. {down} a.n;
324 internalnodeconnectone(root,inj,1);