type stack struct
type node struct
next *node
}func
newstack()
*stack ,}
,}return s
}func
(s *stack)
push
(data inte***ce
) s.head=n
}func
(s *stack)
pop()(
inte***ce
,bool
) n:=s.head
s.head=s.head.next
return n.data,
true
}
type queue struct
func
(q *queue)
enqueue
(data inte***ce
)if q.tail==
nilelse
}func
(q *queue)
dequeue()
(inte***ce
,bool
) d:=q.head.data
q.head=q.head.next
if q.head==
nilreturn d,
true
}func
(q queue)
string()
string
for node!=
nilreturn fmt.
sprintf
("%v"
,arr)
}func
newqueue()
*queue
return q
}
type doublelinkedlist struct
type doublenode struct
pre *doublenode
next *doublenode
}func
newdll()
*doublelinkedlist
return d
}func
(d *doublelinkedlist)
insert
(data inte***ce
)if d.head!=
nil d.head=dn
}func
(d *doublelinkedlist)
search
(data inte***ce
)bool
n:=d.head
for n!=
nil n=n.next
}return
false
}func
(d doublelinkedlist)
string()
string
for node!=
nilreturn fmt.
sprintf
("%v"
,arr)
}
type binarytree struct
type treenode struct
func
newtree()
*binarytree
}func
inorder
(t *treenode)
}func
preorder
(t *treenode)
}func
postorder
(t *treenode)
}func
(t *treenode)
serch
(data int
)*treenode
if t.data==data
else
if data>t.data
else
}func
(t *binarytree)
insert
(data int
)if t.root==
nil x:=t.root
var y *treenode
for x!=
nilelse
} n.parent=y
//注意不能直接讓x=n,因為x是nil,不是y的子節點
if y.data>data
else
}func
(t *binarytree)
replace
(src, dest *treenode)
else
if dest == dest.parent.left
else
src.parent = dest.parent
}func
(t *binarytree)
delete
(n *treenode)
else
if n.right==
nilelse
t.replace
(y,n)
//將n的左子樹掛在到y上
y.left=n.left
n.left.parent=y }}
func
(n *treenode)
minimum()
*treenode
return x
}func
(n *treenode)
fillnode
(data int
, left, right, parent *treenode)
紅黑樹比二叉搜尋樹多乙個屬性:color
滿足下列幾個性質:
1.每個節點都是紅色或者黑色的
2.根節點是黑色的
3.每個葉節點(nil)是黑色的
4.如果乙個節點是紅色的,那麼它的兩個子節點都是黑色的
5.對於每個節點,從該節點到其所有葉子結點的簡單路徑上,均包含相同數目的黑色節點
引理:1.一棵有n個內部個節點的紅黑樹的高度至多為2lg(n+1)
golang資料結構
常見的資料結構有陣列 切片 map 結構體。陣列是乙個由固定長度的特定型別元素組成的序列,乙個陣列可以由零個或多個元素組成。陣列的宣告語法如下 var variable name size variable type陣列變數名 陣列宣告及使用時的變數名。元素數量 陣列的元素數量,可以是乙個表示式,但...
Golang 資料結構
每種語言在實現資料結構有些許不同。go 是如何實現的呢?1.陣列 arraypackage main import fmt func main x 3 4 1 2 0 4 0 0 0 x 8 8 越界無法通過編譯 a 3 int b int 型別推導 x 和 a,b 是兩種不同的資料型別 編譯器會把...
資料結構演算法(二)
單調棧給定乙個長度為 n 的整數數列,輸出每個數左邊第乙個比它小的數,如果不存在則輸出 1。輸入格式 第一行包含整數 n,表示數列長度。第二行包含 n 個整數,表示整數數列。輸出格式 共一行,包含 n 個整數,其中第 i 個數表示第 i 個數的左邊第乙個比它小的數,如果不存在則輸出 1。資料範圍 1...