https://github.com/gansidui/skiplist
skiplist for golang
https://github.com/gansidui/skiplist
Last synced: 9 months ago
JSON representation
skiplist for golang
- Host: GitHub
- URL: https://github.com/gansidui/skiplist
- Owner: gansidui
- Created: 2014-11-18T16:29:53.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2014-11-21T05:13:52.000Z (about 11 years ago)
- Last Synced: 2024-07-31T20:48:41.289Z (over 1 year ago)
- Language: Go
- Size: 112 KB
- Stars: 84
- Watchers: 7
- Forks: 24
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-go-cn - skiplist
- awesome-go - skiplist - Skiplist implementation in Go. (Data Structures and Algorithms / Trees)
- fucking-awesome-go - :octocat: skiplist - Skiplist implementation in Go :star: 29 :fork_and_knife: 7 (Data Structures / Advanced Console UIs)
- awesome-go - skiplist - | - | - | (Data Structures / Advanced Console UIs)
- awesome-go-plus - skiplist - Skiplist implementation in Go.  (Data Structures and Algorithms / Trees)
- awesome-go - skiplist - Skiplist implementation in Go. - :arrow_down:0 - :star:30 (Data Structures / Advanced Console UIs)
- awesome-go - skiplist - skiplist for golang - ★ 57 (Data Structures)
- awesome-go - skiplist - Skiplist implementation in Go. (Data Structures and Algorithms / Trees)
- awesome-go - skiplist - Skiplist implementation in Go. (Data Structures and Algorithms / Trees)
- fucking-awesome-go - skiplist - Skiplist implementation in Go. (Data Structures and Algorithms / Trees)
- awesome-go-cn - skiplist
- awesome-go-cn - skiplist
- awesome-go - skiplist - Skiplist implementation in Go. (Data Structures / Advanced Console UIs)
- awesome-go - skiplist - Skiplist implementation in Go. (Data Structures and Algorithms / Trees)
- awesome-go-extra - skiplist - 11-18T16:29:53Z|2014-11-21T05:13:52Z| (Generators / Trees)
- awesome-go - skiplist - Go中的跳过列表实现。 (<span id="数据结构-data-structures">数据结构 Data Structures</span> / <span id="高级控制台用户界面-advanced-console-uis">高级控制台用户界面 Advanced Console UIs</span>)
- awesome-go-cn - skiplist
- awesome-go - skiplist - Skiplist implementation in Go. (Data Structures / Advanced Console UIs)
- awesome-go-with-stars - skiplist - Skiplist implementation in Go. (Data Structures and Algorithms / Trees)
- awesome-go - skiplist - Skiplist implementation in Go. (Data Structures and Algorithms / Trees)
- awesome-Char - skiplist - Skiplist implementation in Go. (Data Structures / Advanced Console UIs)
README
skiplist
===============
reference from redis [zskiplist](https://github.com/antirez/redis)
Usage
===============
~~~Go
package main
import (
"fmt"
"github.com/gansidui/skiplist"
"log"
)
type User struct {
score float64
id string
}
func (u *User) Less(other interface{}) bool {
if u.score > other.(*User).score {
return true
}
if u.score == other.(*User).score && len(u.id) > len(other.(*User).id) {
return true
}
return false
}
func main() {
us := make([]*User, 7)
us[0] = &User{6.6, "hi"}
us[1] = &User{4.4, "hello"}
us[2] = &User{2.2, "world"}
us[3] = &User{3.3, "go"}
us[4] = &User{1.1, "skip"}
us[5] = &User{2.2, "list"}
us[6] = &User{3.3, "lang"}
// insert
sl := skiplist.New()
for i := 0; i < len(us); i++ {
sl.Insert(us[i])
}
// traverse
for e := sl.Front(); e != nil; e = e.Next() {
fmt.Println(e.Value.(*User).id, "-->", e.Value.(*User).score)
}
fmt.Println()
// rank
rank1 := sl.GetRank(&User{2.2, "list"})
rank2 := sl.GetRank(&User{6.6, "hi"})
if rank1 != 6 || rank2 != 1 {
log.Fatal()
}
if e := sl.GetElementByRank(2); e.Value.(*User).score != 4.4 || e.Value.(*User).id != "hello" {
log.Fatal()
}
}
/* output:
hi --> 6.6
hello --> 4.4
lang --> 3.3
go --> 3.3
world --> 2.2
list --> 2.2
skip --> 1.1
*/
~~~
License
===============
MIT