From 63ad545c64202b21dfbdb6f6d149799ea0b0c27f Mon Sep 17 00:00:00 2001 From: qiuxuewei Date: Wed, 24 Nov 2021 15:33:59 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20232.=E7=94=A8=E6=A0=88?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E9=98=9F=E5=88=97=20Swift=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0232.用栈实现队列.md | 37 +++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/problems/0232.用栈实现队列.md b/problems/0232.用栈实现队列.md index 0e4a5d6d..6e247d1d 100644 --- a/problems/0232.用栈实现队列.md +++ b/problems/0232.用栈实现队列.md @@ -349,6 +349,43 @@ MyQueue.prototype.empty = function() { }; ``` +Swift: +```swift +class MyQueue { + + var stackIn = [Int]() + var stackOut = [Int]() + + init() {} + + /** Push element x to the back of queue. */ + func push(_ x: Int) { + stackIn.append(x) + } + + /** Removes the element from in front of queue and returns that element. */ + func pop() -> Int { + if stackOut.isEmpty { + while !stackIn.isEmpty { + stackOut.append(stackIn.popLast()!) + } + } + return stackOut.popLast() ?? -1 + } + + /** Get the front element. */ + func peek() -> Int { + let res = pop() + stackOut.append(res) + return res + } + + /** Returns whether the queue is empty. */ + func empty() -> Bool { + return stackIn.isEmpty && stackOut.isEmpty + } +} +``` -----------------------
From 50a12ff215f7859b512e9f4fc7154196be0f56da Mon Sep 17 00:00:00 2001 From: qiuxuewei Date: Thu, 25 Nov 2021 16:24:01 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20225.=20=E7=94=A8?= =?UTF-8?q?=E9=98=9F=E5=88=97=E5=AE=9E=E7=8E=B0=E6=A0=88=20Swift=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0225.用队列实现栈.md | 119 ++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) diff --git a/problems/0225.用队列实现栈.md b/problems/0225.用队列实现栈.md index edb88f36..be9f1f79 100644 --- a/problems/0225.用队列实现栈.md +++ b/problems/0225.用队列实现栈.md @@ -598,5 +598,124 @@ MyStack.prototype.empty = function() { ``` +Swift +```Swift +// 定义一个队列数据结构 +class Queue { + var array: [Int] + init() { + array = [Int]() + } + + /** Push element x to the back of queue. */ + func push(_ x: Int) { + array.append(x) + } + + /** Removes the element from in front of queue and returns that element. */ + func pop() -> Int { + if array.isEmpty { + return -1 + } + return array.removeFirst() + } + + /** Get the front element. */ + func peek() -> Int { + if array.isEmpty { + return -1 + } + return array.first! + } + + /** Returns whether the queue is empty. */ + func empty() -> Bool { + return array.isEmpty + } + + func count() -> Int { + return array.count + } +} + +// 使用双队列 +class MyStack { + var queue1: Queue + var queue2: Queue + + init() { + queue1 = Queue() + queue2 = Queue() + } + + func push(_ x: Int) { + queue1.push(x) + } + + func pop() -> Int { + if queue1.empty() { + return -1 + } + while queue1.count() > 1 { + queue2.push(queue1.pop()) + } + let res = queue1.pop() + while !queue2.empty() { + queue1.push(queue2.pop()) + } + return res + } + + func top() -> Int { + if queue1.empty() { + return -1 + } + let res = pop() + push(res) + return res + } + + func empty() -> Bool { + return queue1.empty() && queue2.empty() + } +} + +// 使用单队列 +class MyStack { + var queue: Queue + + init() { + queue = Queue() + } + + func push(_ x: Int) { + queue.push(x) + } + + func pop() -> Int { + if queue.empty() { + return -1 + } + for _ in 1 ..< queue.count() { + queue.push(queue.pop()) + } + return queue.pop() + } + + func top() -> Int { + if queue.empty() { + return -1 + } + let res = pop() + push(res) + return res + } + + func empty() -> Bool { + return queue.empty() + } +} +``` + -----------------------