}\r
\r
#if BinaryHeapPriorityQueue\r
- \r
+\r
public void Push(T item)\r
{\r
int currentPos = this.list.Count;\r
private void DeleteTop()\r
{\r
int tailPos = this.list.Count - 1;\r
- this.list[0] = this.list[tailPos];\r
+ if (tailPos == -1) return;\r
+ T current = this.list[tailPos];\r
this.list.RemoveAt(tailPos);\r
if (tailPos == 0) return;\r
tailPos--;\r
- \r
+\r
int currentPos = 0;\r
- T current = this.list[0];\r
while (true)\r
{\r
- int leftPos = currentPos * 2 + 1;\r
- if (leftPos > tailPos) break;\r
- int rightPos = leftPos + 1;\r
+ int chiledPos = currentPos * 2 + 1;\r
+ if (chiledPos > tailPos) break;\r
+ T chiled = this.list[chiledPos];\r
\r
- int chiledPos;\r
- T chiled;\r
- if (rightPos > tailPos)\r
+ int wrkPos = chiledPos + 1;\r
+ if (wrkPos <= tailPos)\r
{\r
- chiledPos = leftPos;\r
- chiled = this.list[chiledPos];\r
- }\r
- else\r
- {\r
- T left = this.list[leftPos];\r
- T right = this.list[rightPos];\r
- if (left.CompareTo(right) < 0)\r
- {\r
- chiledPos = leftPos;\r
- chiled = left;\r
- }\r
- else\r
+ T wrk = this.list[wrkPos];\r
+ if (chiled.CompareTo(wrk) > 0)\r
{\r
- chiledPos = rightPos;\r
- chiled = right;\r
+ chiledPos = wrkPos;\r
+ chiled = wrk;\r
}\r
}\r
\r
if (current.CompareTo(chiled) < 0) break;\r
this.list[currentPos] = chiled;\r
- this.list[chiledPos] = current;\r
- current = chiled;\r
currentPos = chiledPos;\r
}\r
+ this.list[currentPos] = current;\r
}\r
\r
#else\r