From 50a12ff215f7859b512e9f4fc7154196be0f56da Mon Sep 17 00:00:00 2001 From: qiuxuewei Date: Thu, 25 Nov 2021 16:24:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20225.=20=E7=94=A8=E9=98=9F?= =?UTF-8?q?=E5=88=97=E5=AE=9E=E7=8E=B0=E6=A0=88=20Swift=E7=89=88=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() + } +} +``` + -----------------------