修改PriorityQueue顺序, 以大到小为默认
This commit is contained in:
parent
411533f1a4
commit
4d56ed3348
14
README.md
14
README.md
|
@ -7,6 +7,16 @@
|
||||||
``` golang
|
``` golang
|
||||||
pq := pqueuekey.New(compare.Int)
|
pq := pqueuekey.New(compare.Int)
|
||||||
pq.Push(1, 1)
|
pq.Push(1, 1)
|
||||||
pq.Push(2, 2)
|
pq.Push(4, 4)
|
||||||
v = pq.Pop() // v = 2
|
pq.Push(5, 5)
|
||||||
|
pq.Push(6, 6)
|
||||||
|
pq.Push(2, 2) // pq.Values() = [6 5 4 2 1]
|
||||||
|
value, _ := pq.Pop() // value = 6
|
||||||
|
t.Error(value)
|
||||||
|
value, _ = pq.Get(1) // value = 1 pq.Values() = [5 4 2 1]
|
||||||
|
value, _ = pq.Get(0) // value = nil , Get equal to Seach Key
|
||||||
|
value, _ = pq.Index(0) // value = 5, compare.Int the order from big to small
|
||||||
|
values := pq.GetRange(2, 5) // values = [2 4 5]
|
||||||
|
values = pq.GetRange(5, 2) // values = [5 4 2]
|
||||||
|
values3 := pq.GetAround(5) // values3 = [<nil>, 5, 4]
|
||||||
```
|
```
|
||||||
|
|
|
@ -122,32 +122,32 @@ func TestQueueGetAround(t *testing.T) {
|
||||||
|
|
||||||
var result string
|
var result string
|
||||||
result = spew.Sprint(pq.GetAround(53))
|
result = spew.Sprint(pq.GetAround(53))
|
||||||
if result != "[32 53 78]" {
|
if result != "[78 53 32]" {
|
||||||
t.Error(result)
|
t.Error(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
result = spew.Sprint(pq.GetAround(52))
|
result = spew.Sprint(pq.GetAround(52))
|
||||||
if result != "[32 <nil> 53]" {
|
if result != "[53 <nil> 32]" {
|
||||||
t.Error(result)
|
t.Error(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
result = spew.Sprint(pq.GetAround(1))
|
result = spew.Sprint(pq.GetAround(1))
|
||||||
if result != "[<nil> 1 4]" {
|
if result != "[4 1 <nil>]" {
|
||||||
t.Error(result)
|
t.Error(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
result = spew.Sprint(pq.GetAround(90))
|
result = spew.Sprint(pq.GetAround(90))
|
||||||
if result != "[78 90 <nil>]" {
|
if result != "[<nil> 90 78]" {
|
||||||
t.Error(result)
|
t.Error(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
result = spew.Sprint(pq.GetAround(0))
|
result = spew.Sprint(pq.GetAround(0))
|
||||||
if result != "[<nil> <nil> 1]" {
|
if result != "[1 <nil> <nil>]" {
|
||||||
t.Error(result)
|
t.Error(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
result = spew.Sprint(pq.GetAround(100))
|
result = spew.Sprint(pq.GetAround(100))
|
||||||
if result != "[90 <nil> <nil>]" {
|
if result != "[<nil> <nil> 90]" {
|
||||||
t.Error(result)
|
t.Error(result)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -273,7 +273,7 @@ func (tree *vbTree) GetRange(k1, k2 interface{}) (result []interface{}) {
|
||||||
return []interface{}{}
|
return []interface{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
result = make([]interface{}, 0, 16)
|
result = make([]interface{}, 0, 8)
|
||||||
|
|
||||||
// iter := NewIterator(min)
|
// iter := NewIterator(min)
|
||||||
tree.iter.SeNode(min)
|
tree.iter.SeNode(min)
|
||||||
|
@ -300,7 +300,7 @@ func (tree *vbTree) GetRange(k1, k2 interface{}) (result []interface{}) {
|
||||||
return []interface{}{}
|
return []interface{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
result = make([]interface{}, 0, 16)
|
result = make([]interface{}, 0, 8)
|
||||||
|
|
||||||
// iter := NewIterator(max)
|
// iter := NewIterator(max)
|
||||||
tree.iter.SeNode(max)
|
tree.iter.SeNode(max)
|
||||||
|
@ -329,11 +329,12 @@ func (tree *vbTree) Get(key interface{}) (interface{}, bool) {
|
||||||
return n, false
|
return n, false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetAround 改成Big To Small
|
||||||
func (tree *vbTree) GetAround(key interface{}) (result [3]interface{}) {
|
func (tree *vbTree) GetAround(key interface{}) (result [3]interface{}) {
|
||||||
an := tree.getArounNode(key)
|
an := tree.getArounNode(key)
|
||||||
for i, n := range an {
|
for i, n := range an {
|
||||||
if n != nil {
|
if n != nil {
|
||||||
result[i] = n.value
|
result[2-i] = n.value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|
|
@ -93,56 +93,56 @@ func TestGetAround(t *testing.T) {
|
||||||
var Result string
|
var Result string
|
||||||
|
|
||||||
Result = spew.Sprint(tree.GetAround(17))
|
Result = spew.Sprint(tree.GetAround(17))
|
||||||
if Result != "[16 17 20]" {
|
if Result != "[20 17 16]" {
|
||||||
t.Error(tree.Values())
|
t.Error(tree.Values())
|
||||||
t.Error("17 is root, tree.GetAround(17)) is error", Result)
|
t.Error("17 is root, tree.GetAround(17)) is error", Result)
|
||||||
t.Error(tree.debugString())
|
t.Error(tree.debugString())
|
||||||
}
|
}
|
||||||
|
|
||||||
Result = spew.Sprint(tree.GetAround(3))
|
Result = spew.Sprint(tree.GetAround(3))
|
||||||
if Result != "[<nil> 3 7]" {
|
if Result != "[7 3 <nil>]" {
|
||||||
t.Error(tree.Values())
|
t.Error(tree.Values())
|
||||||
t.Error("tree.GetAround(3)) is error", Result)
|
t.Error("tree.GetAround(3)) is error", Result)
|
||||||
t.Error(tree.debugString())
|
t.Error(tree.debugString())
|
||||||
}
|
}
|
||||||
|
|
||||||
Result = spew.Sprint(tree.GetAround(40))
|
Result = spew.Sprint(tree.GetAround(40))
|
||||||
if Result != "[30 40 40]" {
|
if Result != "[40 40 30]" {
|
||||||
t.Error(tree.Values())
|
t.Error(tree.Values())
|
||||||
t.Error("tree.GetAround(40)) is error", Result)
|
t.Error("tree.GetAround(40)) is error", Result)
|
||||||
t.Error(tree.debugString())
|
t.Error(tree.debugString())
|
||||||
}
|
}
|
||||||
|
|
||||||
Result = spew.Sprint(tree.GetAround(50))
|
Result = spew.Sprint(tree.GetAround(50))
|
||||||
if Result != "[40 50 <nil>]" {
|
if Result != "[<nil> 50 40]" {
|
||||||
t.Error(tree.Values())
|
t.Error(tree.Values())
|
||||||
t.Error("tree.GetAround(50)) is error", Result)
|
t.Error("tree.GetAround(50)) is error", Result)
|
||||||
t.Error(tree.debugString())
|
t.Error(tree.debugString())
|
||||||
}
|
}
|
||||||
|
|
||||||
Result = spew.Sprint(tree.GetAround(18))
|
Result = spew.Sprint(tree.GetAround(18))
|
||||||
if Result != "[17 <nil> 20]" {
|
if Result != "[20 <nil> 17]" {
|
||||||
t.Error(tree.Values())
|
t.Error(tree.Values())
|
||||||
t.Error("18 is not in list, tree.GetAround(18)) is error", Result)
|
t.Error("18 is not in list, tree.GetAround(18)) is error", Result)
|
||||||
t.Error(tree.debugString())
|
t.Error(tree.debugString())
|
||||||
}
|
}
|
||||||
|
|
||||||
Result = spew.Sprint(tree.GetAround(5))
|
Result = spew.Sprint(tree.GetAround(5))
|
||||||
if Result != "[3 <nil> 7]" {
|
if Result != "[7 <nil> 3]" {
|
||||||
t.Error(tree.Values())
|
t.Error(tree.Values())
|
||||||
t.Error("5 is not in list, tree.GetAround(5)) is error", Result)
|
t.Error("5 is not in list, tree.GetAround(5)) is error", Result)
|
||||||
t.Error(tree.debugString())
|
t.Error(tree.debugString())
|
||||||
}
|
}
|
||||||
|
|
||||||
Result = spew.Sprint(tree.GetAround(2))
|
Result = spew.Sprint(tree.GetAround(2))
|
||||||
if Result != "[<nil> <nil> 3]" {
|
if Result != "[3 <nil> <nil>]" {
|
||||||
t.Error(tree.Values())
|
t.Error(tree.Values())
|
||||||
t.Error("2 is not in list, tree.GetAround(2)) is error", Result)
|
t.Error("2 is not in list, tree.GetAround(2)) is error", Result)
|
||||||
t.Error(tree.debugString())
|
t.Error(tree.debugString())
|
||||||
}
|
}
|
||||||
|
|
||||||
Result = spew.Sprint(tree.GetAround(100))
|
Result = spew.Sprint(tree.GetAround(100))
|
||||||
if Result != "[50 <nil> <nil>]" {
|
if Result != "[<nil> <nil> 50]" {
|
||||||
t.Error(tree.Values())
|
t.Error(tree.Values())
|
||||||
t.Error("50 is not in list, tree.GetAround(50)) is error", Result)
|
t.Error("50 is not in list, tree.GetAround(50)) is error", Result)
|
||||||
t.Error(tree.debugString())
|
t.Error(tree.debugString())
|
||||||
|
|
|
@ -122,32 +122,32 @@ func TestQueueGetAround(t *testing.T) {
|
||||||
|
|
||||||
var result string
|
var result string
|
||||||
result = spew.Sprint(pq.GetAround(53))
|
result = spew.Sprint(pq.GetAround(53))
|
||||||
if result != "[32 53 78]" {
|
if result != "[78 53 32]" {
|
||||||
t.Error(result)
|
t.Error(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
result = spew.Sprint(pq.GetAround(52))
|
result = spew.Sprint(pq.GetAround(52))
|
||||||
if result != "[32 <nil> 53]" {
|
if result != "[53 <nil> 32]" {
|
||||||
t.Error(result)
|
t.Error(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
result = spew.Sprint(pq.GetAround(1))
|
result = spew.Sprint(pq.GetAround(1))
|
||||||
if result != "[<nil> 1 4]" {
|
if result != "[4 1 <nil>]" {
|
||||||
t.Error(result)
|
t.Error(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
result = spew.Sprint(pq.GetAround(90))
|
result = spew.Sprint(pq.GetAround(90))
|
||||||
if result != "[78 90 <nil>]" {
|
if result != "[<nil> 90 78]" {
|
||||||
t.Error(result)
|
t.Error(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
result = spew.Sprint(pq.GetAround(0))
|
result = spew.Sprint(pq.GetAround(0))
|
||||||
if result != "[<nil> <nil> 1]" {
|
if result != "[1 <nil> <nil>]" {
|
||||||
t.Error(result)
|
t.Error(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
result = spew.Sprint(pq.GetAround(100))
|
result = spew.Sprint(pq.GetAround(100))
|
||||||
if result != "[90 <nil> <nil>]" {
|
if result != "[<nil> <nil> 90]" {
|
||||||
t.Error(result)
|
t.Error(result)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -273,7 +273,7 @@ func (tree *vbTree) GetRange(k1, k2 interface{}) (result []interface{}) {
|
||||||
return []interface{}{}
|
return []interface{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
result = make([]interface{}, 0, 16)
|
result = make([]interface{}, 0, 8)
|
||||||
|
|
||||||
// iter := NewIterator(min)
|
// iter := NewIterator(min)
|
||||||
tree.iter.SeNode(min)
|
tree.iter.SeNode(min)
|
||||||
|
@ -300,7 +300,7 @@ func (tree *vbTree) GetRange(k1, k2 interface{}) (result []interface{}) {
|
||||||
return []interface{}{}
|
return []interface{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
result = make([]interface{}, 0, 16)
|
result = make([]interface{}, 0, 8)
|
||||||
|
|
||||||
// iter := NewIterator(max)
|
// iter := NewIterator(max)
|
||||||
tree.iter.SeNode(max)
|
tree.iter.SeNode(max)
|
||||||
|
@ -333,7 +333,7 @@ func (tree *vbTree) GetAround(key interface{}) (result [3]interface{}) {
|
||||||
an := tree.getArounNode(key)
|
an := tree.getArounNode(key)
|
||||||
for i, n := range an {
|
for i, n := range an {
|
||||||
if n != nil {
|
if n != nil {
|
||||||
result[i] = n.value
|
result[2-i] = n.value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|
|
@ -93,56 +93,56 @@ func TestGetAround(t *testing.T) {
|
||||||
var Result string
|
var Result string
|
||||||
|
|
||||||
Result = spew.Sprint(tree.GetAround(17))
|
Result = spew.Sprint(tree.GetAround(17))
|
||||||
if Result != "[16 17 20]" {
|
if Result != "[20 17 16]" {
|
||||||
t.Error(tree.Values())
|
t.Error(tree.Values())
|
||||||
t.Error("17 is root, tree.GetAround(17)) is error", Result)
|
t.Error("17 is root, tree.GetAround(17)) is error", Result)
|
||||||
t.Error(tree.debugString())
|
t.Error(tree.debugString())
|
||||||
}
|
}
|
||||||
|
|
||||||
Result = spew.Sprint(tree.GetAround(3))
|
Result = spew.Sprint(tree.GetAround(3))
|
||||||
if Result != "[<nil> 3 7]" {
|
if Result != "[7 3 <nil>]" {
|
||||||
t.Error(tree.Values())
|
t.Error(tree.Values())
|
||||||
t.Error("tree.GetAround(3)) is error", Result)
|
t.Error("tree.GetAround(3)) is error", Result)
|
||||||
t.Error(tree.debugString())
|
t.Error(tree.debugString())
|
||||||
}
|
}
|
||||||
|
|
||||||
Result = spew.Sprint(tree.GetAround(40))
|
Result = spew.Sprint(tree.GetAround(40))
|
||||||
if Result != "[30 40 40]" {
|
if Result != "[40 40 30]" {
|
||||||
t.Error(tree.Values())
|
t.Error(tree.Values())
|
||||||
t.Error("tree.GetAround(40)) is error", Result)
|
t.Error("tree.GetAround(40)) is error", Result)
|
||||||
t.Error(tree.debugString())
|
t.Error(tree.debugString())
|
||||||
}
|
}
|
||||||
|
|
||||||
Result = spew.Sprint(tree.GetAround(50))
|
Result = spew.Sprint(tree.GetAround(50))
|
||||||
if Result != "[40 50 <nil>]" {
|
if Result != "[<nil> 50 40]" {
|
||||||
t.Error(tree.Values())
|
t.Error(tree.Values())
|
||||||
t.Error("tree.GetAround(50)) is error", Result)
|
t.Error("tree.GetAround(50)) is error", Result)
|
||||||
t.Error(tree.debugString())
|
t.Error(tree.debugString())
|
||||||
}
|
}
|
||||||
|
|
||||||
Result = spew.Sprint(tree.GetAround(18))
|
Result = spew.Sprint(tree.GetAround(18))
|
||||||
if Result != "[17 <nil> 20]" {
|
if Result != "[20 <nil> 17]" {
|
||||||
t.Error(tree.Values())
|
t.Error(tree.Values())
|
||||||
t.Error("18 is not in list, tree.GetAround(18)) is error", Result)
|
t.Error("18 is not in list, tree.GetAround(18)) is error", Result)
|
||||||
t.Error(tree.debugString())
|
t.Error(tree.debugString())
|
||||||
}
|
}
|
||||||
|
|
||||||
Result = spew.Sprint(tree.GetAround(5))
|
Result = spew.Sprint(tree.GetAround(5))
|
||||||
if Result != "[3 <nil> 7]" {
|
if Result != "[7 <nil> 3]" {
|
||||||
t.Error(tree.Values())
|
t.Error(tree.Values())
|
||||||
t.Error("5 is not in list, tree.GetAround(5)) is error", Result)
|
t.Error("5 is not in list, tree.GetAround(5)) is error", Result)
|
||||||
t.Error(tree.debugString())
|
t.Error(tree.debugString())
|
||||||
}
|
}
|
||||||
|
|
||||||
Result = spew.Sprint(tree.GetAround(2))
|
Result = spew.Sprint(tree.GetAround(2))
|
||||||
if Result != "[<nil> <nil> 3]" {
|
if Result != "[3 <nil> <nil>]" {
|
||||||
t.Error(tree.Values())
|
t.Error(tree.Values())
|
||||||
t.Error("2 is not in list, tree.GetAround(2)) is error", Result)
|
t.Error("2 is not in list, tree.GetAround(2)) is error", Result)
|
||||||
t.Error(tree.debugString())
|
t.Error(tree.debugString())
|
||||||
}
|
}
|
||||||
|
|
||||||
Result = spew.Sprint(tree.GetAround(100))
|
Result = spew.Sprint(tree.GetAround(100))
|
||||||
if Result != "[50 <nil> <nil>]" {
|
if Result != "[<nil> <nil> 50]" {
|
||||||
t.Error(tree.Values())
|
t.Error(tree.Values())
|
||||||
t.Error("50 is not in list, tree.GetAround(50)) is error", Result)
|
t.Error("50 is not in list, tree.GetAround(50)) is error", Result)
|
||||||
t.Error(tree.debugString())
|
t.Error(tree.debugString())
|
||||||
|
|
Loading…
Reference in New Issue
Block a user