golang之棧實現

2021-10-06 18:35:15 字數 1500 閱讀 8542

stack api為壓棧、彈棧、棧是否為空、檢視棧頂元素(peek),檢視棧中資料的數量、flush(清空棧)

棧的實現底層資料結構可以使用陣列也可以使用鍊錶:

陣列實現棧和鍊錶實現的棧的插入、查詢、拿取資料的複雜度都為1。

package stack

import "fmt"

/** 陣列棧,每次插入資料,即壓棧,都放入陣列的最後乙個元素,取的時候,從最後乙個元素取,複雜度都是o(1).

* author:sxy

*/type stack struct

func newstack(cap int) *stack

}func (s *stack) push(n int) bool

s.top++

s.data[s.top] = n

return true

}func (s *stack) isempty() bool

return false

}func (s *stack) pop() int

res := s.data[s.top]

s.top--

return res

}func (s *stack) peek() int

res := s.data[s.top]

return res

}func (s *stack) print() else }}

func (s *stack) flush()

package stack

import "fmt"

/** 鏈式棧,每次插入資料,即壓棧,都放入鍊錶的第乙個元素,取的時候,從第乙個元素取,複雜度都是o(1).

* author:sxy

*/type node struct

type linkedliststack struct

func newlinkedliststack() *linkedliststack

}func (lls *linkedliststack) push(val int) bool

return true

} lls.top = &node

return true

}func (lls *linkedliststack) pop() int

v := lls.top.val

lls.top = lls.top.next

return v

}func (lls *linkedliststack) peek() int

return lls.top.val

}func (lls *linkedliststack) isempty() bool

return false

}func (lls *linkedliststack) flush()

func (lls *linkedliststack) print() else

}}

陣列之golang實現(1)

1.實現乙個支援動態擴容的陣列 滿足的功能 增 從指定位置插入,從尾部插入 刪,查。package array import errors fmt 實現乙個大小固定的有序陣列,支援動態增刪改操作。author sxy type array struct func newarray cap int a...

堆排序之golang實現

主要是理解思路,思路有了 則是水到渠成。堆排序實際是陣列排序,使用陣列的下標構造成乙個二叉樹,想法很有意思。加入有陣列a,那可以把a 0 視為根節點,它的子節點為a 2 0 1 a 2 0 2 即對於任何乙個節點a i 則有子節點a 2 i 1 和a 2 i 2 1.構建乙個大頂堆,構建成功後a 0...

設計模式之golang實現策略

package strategy type cashcal inte ce type deal struct type normaldeal struct func nd normaldeal cashcal price float64 float64 type rebatedeal struct ...