|
@@ -0,0 +1,85 @@
|
|
|
+type MyQueue struct {
|
|
|
+ Stack MyStack
|
|
|
+ Queue MyStack
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/** Initialize your data structure here. */
|
|
|
+func Constructor() MyQueue {
|
|
|
+ return MyQueue{make([]int, 0), make([]int, 0)}
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/** Push element x to the back of queue. */
|
|
|
+func (this *MyQueue) Push(x int) {
|
|
|
+ for !this.Queue.Empty() {
|
|
|
+ this.Stack.Push(this.Queue.Pop())
|
|
|
+ }
|
|
|
+ this.Stack.Push(x)
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/** Removes the element from in front of queue and returns that element. */
|
|
|
+func (this *MyQueue) Pop() int {
|
|
|
+ for !this.Stack.Empty() {
|
|
|
+ this.Queue.Push(this.Stack.Pop())
|
|
|
+ }
|
|
|
+ return this.Queue.Pop()
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/** Get the front element. */
|
|
|
+func (this *MyQueue) Peek() int {
|
|
|
+ for !this.Stack.Empty() {
|
|
|
+ this.Queue.Push(this.Stack.Pop())
|
|
|
+ }
|
|
|
+ return this.Queue.Peek()
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/** Returns whether the queue is empty. */
|
|
|
+func (this *MyQueue) Empty() bool {
|
|
|
+ return this.Stack.Empty() && this.Queue.Empty()
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * Your MyQueue object will be instantiated and called as such:
|
|
|
+ * obj := Constructor();
|
|
|
+ * obj.Push(x);
|
|
|
+ * param_2 := obj.Pop();
|
|
|
+ * param_3 := obj.Peek();
|
|
|
+ * param_4 := obj.Empty();
|
|
|
+ */
|
|
|
+
|
|
|
+
|
|
|
+type MyStack []int
|
|
|
+
|
|
|
+
|
|
|
+func (s MyStack) Size() int {
|
|
|
+ return len(s)
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func (s MyStack) Empty() bool {
|
|
|
+ return len(s) == 0
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func (s MyStack) Peek() int {
|
|
|
+ return s[len(s)-1]
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func (s *MyStack) Push(x int) {
|
|
|
+ *s = append(*s, x)
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func (s *MyStack) Pop() int {
|
|
|
+ n := len(*s)
|
|
|
+ top := (*s)[n-1]
|
|
|
+ *s = (*s)[:n-1]
|
|
|
+ return top
|
|
|
+}
|
|
|
+
|