diff --git a/Algorithms/225. Implement Stack using Queues/225. Implement Stack using Queues.go b/Algorithms/225. Implement Stack using Queues/225. Implement Stack using Queues.go new file mode 100644 index 00000000..92329f73 --- /dev/null +++ b/Algorithms/225. Implement Stack using Queues/225. Implement Stack using Queues.go @@ -0,0 +1,47 @@ +package leetcode + +type MyStack struct { + enque []int + deque []int +} + +/** Initialize your data structure here. */ +func Constructor_225() MyStack { + return MyStack{[]int{}, []int{}} +} + +/** Push element x onto stack. */ +func (this *MyStack) Push(x int) { + this.enque = append(this.enque, x) +} + +/** Removes the element on top of the stack and returns that element. */ +func (this *MyStack) Pop() int { + length := len(this.enque) + for i := 0; i < length-1; i++ { + this.deque = append(this.deque, this.enque[0]) + this.enque = this.enque[1:] + } + topEle := this.enque[0] + this.enque = this.deque + this.deque = nil + + return topEle +} + +/** Get the top element. */ +func (this *MyStack) Top() int { + topEle := this.Pop() + this.enque = append(this.enque, topEle) + + return topEle +} + +/** Returns whether the stack is empty. */ +func (this *MyStack) Empty() bool { + if len(this.enque) == 0 { + return true + } + + return false +} diff --git a/Algorithms/225. Implement Stack using Queues/225. Implement Stack using Queues_test.go b/Algorithms/225. Implement Stack using Queues/225. Implement Stack using Queues_test.go new file mode 100644 index 00000000..7985ea82 --- /dev/null +++ b/Algorithms/225. Implement Stack using Queues/225. Implement Stack using Queues_test.go @@ -0,0 +1,23 @@ +package leetcode + +import ( + "fmt" + "testing" +) + +func Test_Problem225(t *testing.T) { + obj := Constructor_225() + fmt.Printf("obj = %v\n", obj) + param_5 := obj.Empty() + fmt.Printf("param_5 = %v\n", param_5) + obj.Push(2) + fmt.Printf("obj = %v\n", obj) + obj.Push(10) + fmt.Printf("obj = %v\n", obj) + param_2 := obj.Pop() + fmt.Printf("param_2 = %v\n", param_2) + param_3 := obj.Top() + fmt.Printf("param_3 = %v\n", param_3) + param_4 := obj.Empty() + fmt.Printf("param_4 = %v\n", param_4) +} diff --git a/Algorithms/225. Implement Stack using Queues/README.md b/Algorithms/225. Implement Stack using Queues/README.md new file mode 100644 index 00000000..7a820da6 --- /dev/null +++ b/Algorithms/225. Implement Stack using Queues/README.md @@ -0,0 +1,36 @@ +# [225. Implement Stack using Queues](https://leetcode.com/problems/implement-stack-using-queues/) + +## 题目 + +Implement the following operations of a stack using queues. + +- push(x) -- Push element x onto stack. +- pop() -- Removes the element on top of the stack. +- top() -- Get the top element. +- empty() -- Return whether the stack is empty. + +Example : + +```c +MyStack stack = new MyStack(); + +stack.push(1); +stack.push(2); +stack.top(); // returns 2 +stack.pop(); // returns 2 +stack.empty(); // returns false +``` + +Note: + +- You must use only standard operations of a queue -- which means only push to back, peek/pop from front, size, and is empty operations are valid. +- Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue. +- You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack). + + +## 题目大意 + +题目要求用队列实现一个栈的基本操作:push(x)、pop()、top()、empty()。 + + +