mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 14:18:20 +08:00 
			
		
		
		
	Merge branch 'master' of github.com:krahets/hello-algo
This commit is contained in:
		@ -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"]),
 | 
			
		||||
    ]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										44
									
								
								codes/swift/chapter_stack_and_queue/deque.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								codes/swift/chapter_stack_and_queue/deque.swift
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,44 @@
 | 
			
		||||
/**
 | 
			
		||||
 * 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)")
 | 
			
		||||
 | 
			
		||||
        /* 元素出队 */
 | 
			
		||||
        // 使用 Array 模拟时 pollFirst 的复杂度为 O(n)
 | 
			
		||||
        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)")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -25,6 +25,7 @@ enum Queue {
 | 
			
		||||
        print("队首元素 peek = \(peek)")
 | 
			
		||||
 | 
			
		||||
        /* 元素出队 */
 | 
			
		||||
        // 使用 Array 模拟时 poll 的复杂度为 O(n)
 | 
			
		||||
        let pool = queue.removeFirst()
 | 
			
		||||
        print("出队元素 poll = \(pool),出队后 queue = \(queue)")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -196,5 +196,29 @@ 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! // 队尾元素
 | 
			
		||||
 | 
			
		||||
    /* 元素出队 */
 | 
			
		||||
    // 使用 Array 模拟时 pollFirst 的复杂度为 O(n)
 | 
			
		||||
    let pollFirst = deque.removeFirst() // 队首元素出队
 | 
			
		||||
    let pollLast = deque.removeLast() // 队尾元素出队
 | 
			
		||||
 | 
			
		||||
    /* 获取双向队列的长度 */
 | 
			
		||||
    let size = deque.count
 | 
			
		||||
 | 
			
		||||
    /* 判断双向队列是否为空 */
 | 
			
		||||
    let isEmpty = deque.isEmpty
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
@ -246,6 +246,7 @@ comments: true
 | 
			
		||||
    let peek = queue.first!
 | 
			
		||||
 | 
			
		||||
    /* 元素出队 */
 | 
			
		||||
    // 使用 Array 模拟时 poll 的复杂度为 O(n)
 | 
			
		||||
    let pool = queue.removeFirst()
 | 
			
		||||
 | 
			
		||||
    /* 获取队列的长度 */
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user