From 595aa939969c91e33bc286a018ae56c1252d0db8 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sat, 14 Jan 2023 01:06:00 +0800 Subject: [PATCH] feat: add Swift codes for deque article --- codes/swift/Package.swift | 2 + .../swift/chapter_stack_and_queue/deque.swift | 43 +++++++++++++++++++ docs/chapter_stack_and_queue/deque.md | 25 ++++++++++- 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 codes/swift/chapter_stack_and_queue/deque.swift diff --git a/codes/swift/Package.swift b/codes/swift/Package.swift index 89c03d9f6..c20c58f99 100644 --- a/codes/swift/Package.swift +++ b/codes/swift/Package.swift @@ -19,6 +19,7 @@ let package = Package( .executable(name: "queue", targets: ["queue"]), .executable(name: "linkedlist_queue", targets: ["linkedlist_queue"]), .executable(name: "array_queue", targets: ["array_queue"]), + .executable(name: "deque", targets: ["deque"]), ], targets: [ .target(name: "utils", path: "utils"), @@ -36,5 +37,6 @@ let package = Package( .executableTarget(name: "queue", path: "chapter_stack_and_queue", sources: ["queue.swift"]), .executableTarget(name: "linkedlist_queue", dependencies: ["utils"], path: "chapter_stack_and_queue", sources: ["linkedlist_queue.swift"]), .executableTarget(name: "array_queue", path: "chapter_stack_and_queue", sources: ["array_queue.swift"]), + .executableTarget(name: "deque", path: "chapter_stack_and_queue", sources: ["deque.swift"]), ] ) diff --git a/codes/swift/chapter_stack_and_queue/deque.swift b/codes/swift/chapter_stack_and_queue/deque.swift new file mode 100644 index 000000000..205da4055 --- /dev/null +++ b/codes/swift/chapter_stack_and_queue/deque.swift @@ -0,0 +1,43 @@ +/** + * File: deque.swift + * Created Time: 2023-01-14 + * Author: nuomi1 (nuomi1@qq.com) + */ + +@main +enum Deque { + /* Driver Code */ + static func main() { + /* 初始化双向队列 */ + // Swift 没有内置的双向队列类,可以把 Array 当作双向队列来使用 + var deque: [Int] = [] + + /* 元素入队 */ + deque.append(2) + deque.append(5) + deque.append(4) + deque.insert(3, at: 0) + deque.insert(1, at: 0) + print("双向队列 deque = \(deque)") + + /* 访问元素 */ + let peekFirst = deque.first! + print("队首元素 peekFirst = \(peekFirst)") + let peekLast = deque.last! + print("队尾元素 peekLast = \(peekLast)") + + /* 元素出队 */ + let pollFirst = deque.removeFirst() + print("队首出队元素 pollFirst = \(pollFirst),队首出队后 deque = \(deque)") + let pollLast = deque.removeLast() + print("队尾出队元素 pollLast = \(pollLast),队尾出队后 deque = \(deque)") + + /* 获取双向队列的长度 */ + let size = deque.count + print("双向队列长度 size = \(size)") + + /* 判断双向队列是否为空 */ + let isEmpty = deque.isEmpty + print("双向队列是否为空 = \(isEmpty)") + } +} diff --git a/docs/chapter_stack_and_queue/deque.md b/docs/chapter_stack_and_queue/deque.md index 4671d5c9e..e4674d5f1 100644 --- a/docs/chapter_stack_and_queue/deque.md +++ b/docs/chapter_stack_and_queue/deque.md @@ -196,5 +196,28 @@ comments: true === "Swift" ```swift title="deque.swift" - + /* 初始化双向队列 */ + // Swift 没有内置的双向队列类,可以把 Array 当作双向队列来使用 + var deque: [Int] = [] + + /* 元素入队 */ + deque.append(2) // 添加至队尾 + deque.append(5) + deque.append(4) + deque.insert(3, at: 0) // 添加至队首 + deque.insert(1, at: 0) + + /* 访问元素 */ + let peekFirst = deque.first! // 队首元素 + let peekLast = deque.last! // 队尾元素 + + /* 元素出队 */ + let pollFirst = deque.removeFirst() // 队首元素出队 + let pollLast = deque.removeLast() // 队尾元素出队 + + /* 获取双向队列的长度 */ + let size = deque.count + + /* 判断双向队列是否为空 */ + let isEmpty = deque.isEmpty ```