Golang演算法(二)資料結構

2021-10-10 06:16:15 字數 3083 閱讀 1486

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...