-
-
Save bemasher/1777766 to your computer and use it in GitHub Desktop.
package main | |
import ( | |
"fmt" | |
) | |
type Stack struct { | |
top *Element | |
size int | |
} | |
type Element struct { | |
value interface{} // All types satisfy the empty interface, so we can store anything here. | |
next *Element | |
} | |
// Return the stack's length | |
func (s *Stack) Len() int { | |
return s.size | |
} | |
// Push a new element onto the stack | |
func (s *Stack) Push(value interface{}) { | |
s.top = &Element{value, s.top} | |
s.size++ | |
} | |
// Remove the top element from the stack and return it's value | |
// If the stack is empty, return nil | |
func (s *Stack) Pop() (value interface{}) { | |
if s.size > 0 { | |
value, s.top = s.top.value, s.top.next | |
s.size-- | |
return | |
} | |
return nil | |
} | |
func main() { | |
stack := new(Stack) | |
stack.Push("Things") | |
stack.Push("and") | |
stack.Push("Stuff") | |
for stack.Len() > 0 { | |
// We have to do a type assertion because we get back a variable of type | |
// interface{} while the underlying type is a string. | |
fmt.Printf("%s ", stack.Pop().(string)) | |
} | |
fmt.Println() | |
} |
Thanks for the simple implementation. I have upgraded it and added Peek. One enhancement that I added is exists
variable.
here's the link which I have incorporated into one of my project: https://github.com/alinz/gonote/blob/master/note/util/stack.go
Thanks.
Thanks for the implementation example! I probably would have used a slice or something silly.
Used this as the basis for a typed stack here:
https://github.com/tooolbox/go-xib-strings/blob/master/stack.go
Thanks again.
According to ur design, I implement another version of stack via Slice. Which will be used in one of my project.
This is the stack link : https://github.com/tonyshaw/Stack
Thanks.
Let me add my thanks, too!
I added @alinz Peep and I added a PopLast and maximum capacity.
https://gist.github.com/markturansky/3f2273ae39f970ff56ff22a047cc6345
Excellent. I've used this as the main data structure for computing convex hull in 2D.
https://github.com/hemantasapkota/go-convexhull
Thanks.