Skip to content

Commit 0b94864

Browse files
author
hunterhug
committed
fix some code
1 parent 2a7eb94 commit 0b94864

File tree

8 files changed

+94
-61
lines changed

8 files changed

+94
-61
lines changed

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@
9595

9696
| 日期 | 组织/个人 | 说明 |
9797
| ----- | ------- | ------- |
98+
| 2022.04.21 | cy | 4.50 RMB |
99+
| 2022.04.13 | cy | 1.50 RMB |
100+
| 2022.04.02 | skywalker | 9.50 RMB |
101+
| 2022.03.13 | 小桀 | 4.50 RMB |
98102
| 2022.03.02 | 古寒飞 | 9.50 RMB |
99103
| 2022.02.08 | 罗博贤 | 9.50 RMB |
100104
| 2022.01.21 | 匿名 | 1.50 RMB |

_coverpage.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<!-- _coverpage.md -->
22

3-
# [数据结构和算法(Golang实现) **v2.2.6**](http://www.lenggirl.com)
3+
# [数据结构和算法(Golang实现) **v2.2.7**](http://www.lenggirl.com)
44

55
[![GitHub stars](https://img.shields.io/github/stars/hunterhug/goa.c.svg?style=social&label=Stars)](https://github.com/hunterhug/goa.c/stargazers)
66
[![GitHub last commit](https://img.shields.io/github/last-commit/hunterhug/goa.c.svg)](https://github.com/hunterhug/goa.c)
@@ -10,4 +10,5 @@
1010
> 盛年不重来,一日难再晨,及时当勉励,岁月不待人。
1111
1212
[GitHub](https://github.com/hunterhug/goa.c)
13+
[Blog](http://www.lenggirl.com)
1314
<a href="/#/README" target="_blank">开始阅读</a>

algorithm/search/rb_tree.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ func (tree *RBTree) fixAfterInsertion(node *RBTNode) {
432432

433433
否则,需要找到叶子节点,方便新节点插进去:
434434

435-
```
435+
```go
436436
// 辅助变量 t,表示新元素要插入到该子树,t是该子树的根节点
437437
t := tree.Root
438438

@@ -2033,3 +2033,7 @@ is a rb tree
20332033
红黑树可以用来作为字典 `Map` 的基础数据结构,可以存储键值对,然后通过一个键,可以快速找到键对应的值,相比哈希表查找,不需要占用额外的空间。我们以上的代码实现只有 `value`,没有 `key:value`,可以简单改造实现字典。
20342034

20352035
`Java` 语言基础类库中的 `HashMap``TreeSet``TreeMap` 都有使用到,`C++` 语言的 `STL` 标准模板库中,`map``set` 类也有使用到。很多中间件也有使用到,比如 `Nginx`,但 `Golang` 语言标准库并没有它。
2036+
2037+
## 附录
2038+
2039+
代码下载:[https://github.com/hunterhug/goa.c/blob/master/code/rbt/main.go](https://github.com/hunterhug/goa.c/blob/master/code/rbt/main.go)

code/bstree/main.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,25 @@ import (
44
"fmt"
55
)
66

7-
// 二叉查找树
7+
// BinarySearchTree 二叉查找树
88
type BinarySearchTree struct {
99
Root *BinarySearchTreeNode // 树根节点
1010
}
1111

12-
// 二叉查找树节点
12+
// BinarySearchTreeNode 二叉查找树节点
1313
type BinarySearchTreeNode struct {
1414
Value int64 // 值
1515
Times int64 // 值出现的次数
1616
Left *BinarySearchTreeNode // 左子树
1717
Right *BinarySearchTreeNode // 右字树
1818
}
1919

20-
// 初始化一个二叉查找树
20+
// NewBinarySearchTree 初始化一个二叉查找树
2121
func NewBinarySearchTree() *BinarySearchTree {
2222
return new(BinarySearchTree)
2323
}
2424

25-
// 添加元素
25+
// Add 添加元素
2626
func (tree *BinarySearchTree) Add(value int64) {
2727
// 如果没有树根,证明是棵空树,添加树根后返回
2828
if tree.Root == nil {
@@ -59,7 +59,7 @@ func (node *BinarySearchTreeNode) Add(value int64) {
5959
}
6060
}
6161

62-
// 找出最小值的节点
62+
// FindMinValue 找出最小值的节点
6363
func (tree *BinarySearchTree) FindMinValue() *BinarySearchTreeNode {
6464
if tree.Root == nil {
6565
// 如果是空树,返回空
@@ -79,7 +79,7 @@ func (node *BinarySearchTreeNode) FindMinValue() *BinarySearchTreeNode {
7979
return node.Left.FindMinValue()
8080
}
8181

82-
// 找出最大值的节点
82+
// FindMaxValue 找出最大值的节点
8383
func (tree *BinarySearchTree) FindMaxValue() *BinarySearchTreeNode {
8484
if tree.Root == nil {
8585
// 如果是空树,返回空
@@ -99,7 +99,7 @@ func (node *BinarySearchTreeNode) FindMaxValue() *BinarySearchTreeNode {
9999
return node.Right.FindMaxValue()
100100
}
101101

102-
// 查找指定节点
102+
// Find 查找指定节点
103103
func (tree *BinarySearchTree) Find(value int64) *BinarySearchTreeNode {
104104
if tree.Root == nil {
105105
// 如果是空树,返回空
@@ -130,7 +130,7 @@ func (node *BinarySearchTreeNode) Find(value int64) *BinarySearchTreeNode {
130130
}
131131
}
132132

133-
// 查找指定节点的父亲
133+
// FindParent 查找指定节点的父亲
134134
func (tree *BinarySearchTree) FindParent(value int64) *BinarySearchTreeNode {
135135
if tree.Root == nil {
136136
// 如果是空树,返回空
@@ -178,7 +178,7 @@ func (node *BinarySearchTreeNode) FindParent(value int64) *BinarySearchTreeNode
178178
}
179179
}
180180

181-
// 删除指定的元素
181+
// Delete 删除指定的元素
182182
func (tree *BinarySearchTree) Delete(value int64) {
183183
if tree.Root == nil {
184184
// 如果是空树,直接返回
@@ -257,7 +257,7 @@ func (tree *BinarySearchTree) Delete(value int64) {
257257
}
258258
}
259259

260-
// 中序遍历
260+
// MidOrder 中序遍历
261261
func (tree *BinarySearchTree) MidOrder() {
262262
tree.Root.MidOrder()
263263
}

code/interface/main2.go

+15-7
Original file line numberDiff line numberDiff line change
@@ -5,38 +5,38 @@ import (
55
"reflect"
66
)
77

8-
// 定义一个接口,有一个方法
8+
// A 定义一个接口,有一个方法
99
type A interface {
1010
Println()
1111
}
1212

13-
// 定义一个接口,有两个方法
13+
// B 定义一个接口,有两个方法
1414
type B interface {
1515
Println()
1616
Printf() int
1717
}
1818

19-
// 定义一个结构体
19+
// A1Instance 定义一个结构体
2020
type A1Instance struct {
2121
Data string
2222
}
2323

24-
// 结构体实现了Println()方法,现在它是一个 A 接口
24+
// Println 结构体实现了Println()方法,现在它是一个 A 接口
2525
func (a1 *A1Instance) Println() {
2626
fmt.Println("a1:", a1.Data)
2727
}
2828

29-
// 定义一个结构体
29+
// A2Instance 定义一个结构体
3030
type A2Instance struct {
3131
Data string
3232
}
3333

34-
// 结构体实现了Println()方法,现在它是一个 A 接口
34+
// Println 结构体实现了Println()方法,现在它是一个 A 接口
3535
func (a2 *A2Instance) Println() {
3636
fmt.Println("a2:", a2.Data)
3737
}
3838

39-
// 结构体实现了Printf()方法,现在它是一个 B 接口,它既是 A 又是 B 接口
39+
// Printf 结构体实现了Printf()方法,现在它是一个 B 接口,它既是 A 又是 B 接口
4040
func (a2 *A2Instance) Printf() int {
4141
fmt.Println("a2:", a2.Data)
4242
return 0
@@ -48,31 +48,39 @@ func main() {
4848

4949
// 将具体的结构体赋予该变量
5050
a = &A1Instance{Data: "i love you"}
51+
5152
// 调用接口的方法
5253
a.Println()
54+
5355
// 断言类型
5456
if v, ok := a.(*A1Instance); ok {
5557
fmt.Println(v)
5658
} else {
5759
fmt.Println("not a A1")
5860
}
61+
5962
fmt.Println(reflect.TypeOf(a).String())
6063

6164
// 将具体的结构体赋予该变量
6265
a = &A2Instance{Data: "i love you"}
66+
6367
// 调用接口的方法
6468
a.Println()
69+
6570
// 断言类型
6671
if v, ok := a.(*A1Instance); ok {
6772
fmt.Println(v)
6873
} else {
6974
fmt.Println("not a A1")
7075
}
76+
7177
fmt.Println(reflect.TypeOf(a).String())
7278

7379
// 定义一个B接口类型的变量
7480
var b B
81+
7582
//b = &A1Instance{Data: "i love you"} // 不是 B 类型
7683
b = &A2Instance{Data: "i love you"}
84+
7785
fmt.Println(b.Printf())
7886
}

code/rbt/main.go

+20-20
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@ const (
1111
BLACK = false
1212
)
1313

14-
// 普通红黑树
14+
// RBTree 普通红黑树
1515
type RBTree struct {
1616
Root *RBTNode // 树根节点
1717
}
1818

19-
// 新建一棵空树
19+
// NewRBTree 新建一棵空树
2020
func NewRBTree() *RBTree {
2121
return &RBTree{}
2222
}
2323

24-
// 普通红黑树节点
24+
// RBTNode 普通红黑树节点
2525
type RBTNode struct {
2626
Value int64 // 值
2727
Times int64 // 值出现的次数
@@ -31,15 +31,15 @@ type RBTNode struct {
3131
Color bool // 父亲指向该节点的链接颜色
3232
}
3333

34-
// 节点的颜色
34+
// IsRed 节点的颜色
3535
func IsRed(node *RBTNode) bool {
3636
if node == nil {
3737
return false
3838
}
3939
return node.Color == RED
4040
}
4141

42-
// 返回节点的父亲节点
42+
// ParentOf 返回节点的父亲节点
4343
func ParentOf(node *RBTNode) *RBTNode {
4444
if node == nil {
4545
return nil
@@ -48,7 +48,7 @@ func ParentOf(node *RBTNode) *RBTNode {
4848
return node.Parent
4949
}
5050

51-
// 返回节点的左子节点
51+
// LeftOf 返回节点的左子节点
5252
func LeftOf(node *RBTNode) *RBTNode {
5353
if node == nil {
5454
return nil
@@ -57,7 +57,7 @@ func LeftOf(node *RBTNode) *RBTNode {
5757
return node.Left
5858
}
5959

60-
// 返回节点的右子节点
60+
// RightOf 返回节点的右子节点
6161
func RightOf(node *RBTNode) *RBTNode {
6262
if node == nil {
6363
return nil
@@ -66,14 +66,14 @@ func RightOf(node *RBTNode) *RBTNode {
6666
return node.Right
6767
}
6868

69-
// 设置节点颜色
69+
// SetColor 设置节点颜色
7070
func SetColor(node *RBTNode, color bool) {
7171
if node != nil {
7272
node.Color = color
7373
}
7474
}
7575

76-
// 对某节点左旋转
76+
// RotateLeft 对某节点左旋转
7777
func (tree *RBTree) RotateLeft(h *RBTNode) {
7878
if h != nil {
7979

@@ -98,7 +98,7 @@ func (tree *RBTree) RotateLeft(h *RBTNode) {
9898
}
9999
}
100100

101-
// 对某节点右旋转
101+
// RotateRight 对某节点右旋转
102102
func (tree *RBTree) RotateRight(h *RBTNode) {
103103
if h != nil {
104104

@@ -123,7 +123,7 @@ func (tree *RBTree) RotateRight(h *RBTNode) {
123123
}
124124
}
125125

126-
// 普通红黑树添加元素
126+
// Add 普通红黑树添加元素
127127
func (tree *RBTree) Add(value int64) {
128128
// 根节点为空
129129
if tree.Root == nil {
@@ -246,7 +246,7 @@ func (tree *RBTree) fixAfterInsertion(node *RBTNode) {
246246
tree.Root.Color = BLACK
247247
}
248248

249-
// 普通红黑树删除元素
249+
// Delete 普通红黑树删除元素
250250
func (tree *RBTree) Delete(value int64) {
251251
// 查找元素是否存在,不存在则退出
252252
p := tree.Find(value)
@@ -422,7 +422,7 @@ func (tree *RBTree) fixAfterDeletion(node *RBTNode) {
422422
SetColor(node, BLACK)
423423
}
424424

425-
// 找出最小值的节点
425+
// FindMinValue 找出最小值的节点
426426
func (tree *RBTree) FindMinValue() *RBTNode {
427427
if tree.Root == nil {
428428
// 如果是空树,返回空
@@ -442,7 +442,7 @@ func (node *RBTNode) FindMinValue() *RBTNode {
442442
return node.Left.FindMinValue()
443443
}
444444

445-
// 找出最大值的节点
445+
// FindMaxValue 找出最大值的节点
446446
func (tree *RBTree) FindMaxValue() *RBTNode {
447447
if tree.Root == nil {
448448
// 如果是空树,返回空
@@ -462,7 +462,7 @@ func (node *RBTNode) FindMaxValue() *RBTNode {
462462
return node.Right.FindMaxValue()
463463
}
464464

465-
// 查找指定节点
465+
// Find 查找指定节点
466466
func (tree *RBTree) Find(value int64) *RBTNode {
467467
if tree.Root == nil {
468468
// 如果是空树,返回空
@@ -493,7 +493,7 @@ func (node *RBTNode) Find(value int64) *RBTNode {
493493
}
494494
}
495495

496-
// 中序遍历
496+
// MidOrder 中序遍历
497497
func (tree *RBTree) MidOrder() {
498498
tree.Root.MidOrder()
499499
}
@@ -515,7 +515,7 @@ func (node *RBTNode) MidOrder() {
515515
node.Right.MidOrder()
516516
}
517517

518-
// 验证是不是棵红黑树
518+
// IsRBTree 验证是不是棵红黑树
519519
func (tree *RBTree) IsRBTree() bool {
520520
if tree == nil || tree.Root == nil {
521521
return true
@@ -548,7 +548,7 @@ func (tree *RBTree) IsRBTree() bool {
548548
return true
549549
}
550550

551-
// 节点所在的子树是否是一棵二分查找树
551+
// IsBST 节点所在的子树是否是一棵二分查找树
552552
func (node *RBTNode) IsBST() bool {
553553
if node == nil {
554554
return true
@@ -585,7 +585,7 @@ func (node *RBTNode) IsBST() bool {
585585
return true
586586
}
587587

588-
// 节点所在的子树是否遵循2-3-4树
588+
// Is234 节点所在的子树是否遵循2-3-4树
589589
func (node *RBTNode) Is234() bool {
590590
if node == nil {
591591
return true
@@ -615,7 +615,7 @@ func (node *RBTNode) Is234() bool {
615615
return true
616616
}
617617

618-
// 节点所在的子树是否平衡,是否有 blackNum 个黑链接
618+
// IsBalanced 节点所在的子树是否平衡,是否有 blackNum 个黑链接
619619
func (node *RBTNode) IsBalanced(blackNum int) bool {
620620
if node == nil {
621621
return blackNum == 0

golang/basic.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## 一、举个例子
44

5-
现在我们来建立一个完整的程序 `main.go`
5+
现在我们来建立一个完整的程序 `main.go`(代码较长,可以快速跳过)
66

77
```go
88
// Golang程序入口的包名必须为 main

0 commit comments

Comments
 (0)