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