修改lastack清空时候不正确的问题

This commit is contained in:
huangsimin 2019-03-13 14:05:21 +08:00
parent 6b1d2a80e9
commit 2333e08152
3 changed files with 23 additions and 14 deletions

View File

@ -252,12 +252,12 @@ ALL:
} }
} }
const PutCompartorSize = 300000 const CompartorSize = 300000
const NumberMax = 60000000 const NumberMax = 60000000
func BenchmarkIterator(b *testing.B) { func BenchmarkIterator(b *testing.B) {
avl := New(utils.IntComparator) avl := New(utils.IntComparator)
b.N = PutCompartorSize b.N = CompartorSize
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
v := randomdata.Number(0, NumberMax) v := randomdata.Number(0, NumberMax)
@ -283,7 +283,7 @@ func BenchmarkIterator(b *testing.B) {
func BenchmarkGodsIterator(b *testing.B) { func BenchmarkGodsIterator(b *testing.B) {
avl := avltree.NewWithIntComparator() avl := avltree.NewWithIntComparator()
b.N = PutCompartorSize b.N = CompartorSize
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
v := randomdata.Number(0, NumberMax) v := randomdata.Number(0, NumberMax)
@ -310,7 +310,7 @@ func BenchmarkGodsIterator(b *testing.B) {
func BenchmarkRemove(b *testing.B) { func BenchmarkRemove(b *testing.B) {
avl := New(utils.IntComparator) avl := New(utils.IntComparator)
b.N = PutCompartorSize b.N = CompartorSize
var l []int var l []int
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
@ -329,7 +329,7 @@ func BenchmarkRemove(b *testing.B) {
func BenchmarkGodsRemove(b *testing.B) { func BenchmarkGodsRemove(b *testing.B) {
avl := avltree.NewWithIntComparator() avl := avltree.NewWithIntComparator()
b.N = PutCompartorSize b.N = CompartorSize
var l []int var l []int
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
@ -349,7 +349,7 @@ func BenchmarkGodsRemove(b *testing.B) {
func BenchmarkGet(b *testing.B) { func BenchmarkGet(b *testing.B) {
avl := New(utils.IntComparator) avl := New(utils.IntComparator)
b.N = PutCompartorSize b.N = CompartorSize
for i := 0; i < b.N/2; i++ { for i := 0; i < b.N/2; i++ {
avl.Put(randomdata.Number(0, NumberMax)) avl.Put(randomdata.Number(0, NumberMax))
} }
@ -364,7 +364,7 @@ func BenchmarkGet(b *testing.B) {
func BenchmarkGodsRBGet(b *testing.B) { func BenchmarkGodsRBGet(b *testing.B) {
rb := redblacktree.NewWithIntComparator() rb := redblacktree.NewWithIntComparator()
b.N = PutCompartorSize b.N = CompartorSize
for i := 0; i < b.N/2; i++ { for i := 0; i < b.N/2; i++ {
rb.Put(randomdata.Number(0, NumberMax), i) rb.Put(randomdata.Number(0, NumberMax), i)
} }
@ -379,7 +379,7 @@ func BenchmarkGodsRBGet(b *testing.B) {
func BenchmarkGodsAvlGet(b *testing.B) { func BenchmarkGodsAvlGet(b *testing.B) {
rb := avltree.NewWithIntComparator() rb := avltree.NewWithIntComparator()
b.N = PutCompartorSize b.N = CompartorSize
for i := 0; i < b.N/2; i++ { for i := 0; i < b.N/2; i++ {
rb.Put(randomdata.Number(0, NumberMax), i) rb.Put(randomdata.Number(0, NumberMax), i)
} }
@ -400,7 +400,7 @@ func BenchmarkPut(b *testing.B) {
b.ResetTimer() b.ResetTimer()
b.StartTimer() b.StartTimer()
b.N = PutCompartorSize b.N = CompartorSize
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
avl.Put(randomdata.Number(0, NumberMax)) avl.Put(randomdata.Number(0, NumberMax))
} }
@ -417,7 +417,7 @@ func BenchmarkGodsRBPut(b *testing.B) {
b.ResetTimer() b.ResetTimer()
b.StartTimer() b.StartTimer()
b.N = PutCompartorSize b.N = CompartorSize
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
rb.Put(randomdata.Number(0, NumberMax), i) rb.Put(randomdata.Number(0, NumberMax), i)
} }
@ -434,7 +434,7 @@ func BenchmarkGodsPut(b *testing.B) {
b.ResetTimer() b.ResetTimer()
b.StartTimer() b.StartTimer()
b.N = PutCompartorSize b.N = CompartorSize
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
avl.Put(randomdata.Number(0, NumberMax), i) avl.Put(randomdata.Number(0, NumberMax), i)
} }

View File

@ -1,7 +1,7 @@
package avl package avl
import ( import (
"github.com/emirpasic/gods/stacks/arraystack" "474420502.top/eson/structure/lastack"
) )
type Iterator struct { type Iterator struct {
@ -10,12 +10,12 @@ type Iterator struct {
dir int dir int
up *Node up *Node
cur *Node cur *Node
tstack *arraystack.Stack tstack *lastack.Stack
// curnext *Node // curnext *Node
} }
func initIterator(avltree *AVL) *Iterator { func initIterator(avltree *AVL) *Iterator {
iter := &Iterator{op: avltree, tstack: arraystack.New()} iter := &Iterator{op: avltree, tstack: lastack.New()}
iter.up = avltree.root iter.up = avltree.root
return iter return iter
} }

9
interface.go Normal file
View File

@ -0,0 +1,9 @@
package structure
type IteratorNext interface {
Next() bool
}
type IteratorPrev interface {
Prev() bool
}