随笔分类 - go与数据结构
摘要:本篇文章我们用Go封装一个利用gopark和goready实现协程睡眠唤醒的库。文章参考自:https://github.com/brewlin/net-protocol 1.gopark和goready的声明 //go:linkname gopark runtime.gopark func gop
阅读全文
摘要:本篇文章我们用Go实现一个自定义事件注册并等待唤醒的机制,其中涉及到的链表操作可以参考上一篇文章。文章参考自:https://github.com/brewlin/net-protocol 1.自定义唤醒事件 type EventMask uint16 const ( EventIn EventMa
阅读全文
摘要:本篇文章我们用Go封装一个介入式的双向链表,目的是将链表的实现和具体元素解耦。文章参考自:https://github.com/brewlin/net-protocol 1.元素的接口 type Element interface { Next() Element Prev() Element Se
阅读全文
摘要:本篇文章我们用Go封装一个无等待锁库。文章参考自:https://github.com/brewlin/net-protocol 1.锁的封装 type Mutex struct { v int32 ch chan struct{} } 2.锁的初始化 func (m *Mutex) Init()
阅读全文
摘要:本篇文章我们用go来实现红黑树,部分参考资料如下: https://www.cnblogs.com/skywang12345/p/3245399.html#!comments https://blog.csdn.net/v_JULY_v/article/details/6105630 https:/
阅读全文
摘要:本篇,我们用go简单的实现平衡二叉查找树。具体原理参考大佬博客即可:AVL树(一)之 图文解析 和 C语言的实现 1.节点定义 type AVLNode struct{ data int height int left, right *AVLNode } 2.树的遍历 // 前序遍历 func Pr
阅读全文
摘要:本篇,我们用go简单的实现二叉查找树。 1.节点定义 type BSNode struct{ data int left, right, parent *BSNode } 2.前序遍历 func (p *BSNode) PreTraverse() error{ if p.data == 0 { re
阅读全文
摘要:本篇,我们用go简单的实现单链表这种数据结构。 1.节点定义 type Node struct{ data int next *Node } 2.节点的添加 // 尾插法插入节点 func (p *Node) Append(data int) { for p.next != nil { p = p.
阅读全文