알고리즘 & 자료구조

Stack / Queue 구현해보기 - swift

나른한코딩 2021. 8. 20. 15:39

 

 

**

작성자가 stack / queue를 연습하면서 작성한 기록을 남긴내용입니다.

나중에 자세한 설명가 추가 내용을 작성하며 수정할 예정입니다.

**

 

 

Stack

 - LIFO, array로 구현

 - 다양한 자료형을 수용할 수 있도록 generic을 이용

 - push, pop 메서드의 경우 구조체 내부에서 데이터를 수정하기 때문에 mutating 키워드를 사용.

struct Stack<T> {
  var stack = [T]()
  
  var isEmpty: Bool {
    return self.stack.isEmpty
  }
  
  var top: T? {
    return self.stack.last
  }
  
  mutating func push(_ item: T) {
    self.stack.append(item)
  }
  
  mutating func pop() -> T? {
    guard self.isEmpty == false else { return nil }
    return self.stack.popLast()
  }
}

 

 

 

Queue

 - FIFO, array를 이용하여 구현

 - 스택과 동일하게 다양한 자료형을 수용할 수 있도록 generic을 이용하여 정의.

 - enqueue, dequeue 메서드의 경우 구조체 내부에서 데이터를 수정해야 하기 때문에 mutating 키워드를 통해 정의.

// 구현 1
struct Queue<T> {
  var queue = [T]()
  
  var isEmpty: Bool {
    return self.queue.isEmpty
  }
  
  var front: T? {
    return self.queue.first
  }
  
  var rear: T? {
    return self.queue.last
  }
  
  mutating func enqueue(_ item: T) {
    self.queue.append(item)
  }
  
  mutating func dequeue() -> T? {
    guard self.isEmpty == false else { return nil }
    return self.queue.removeFirst()
  }
}
// 구현 2
struct Queue2 {
  var queue: [Int?] = []
  var head: Int = 0
  
  var count: Int {
    return queue.count
  }
  
  var isEmpty: Bool {
    return queue.isEmpty
  }
  
  mutating func enqueue(_ element: Int) {
    queue.append(element)
  }
  
  mutating func dequeue() -> Int? {
    guard head <= queue.count, let element = queue[head] else { return nil }
    queue[head] = nil
    head += 1
    
    if head > 50 {
      queue.removeFirst(head)
      head = 0
    }
    return element
  }
}
반응형

'알고리즘 & 자료구조' 카테고리의 다른 글

BFS/DFS 간단 예제 - Swift  (0) 2022.02.26
[자료구조] Trie - Swift  (0) 2022.02.25
Bubble Sort 간단 예제 - swift  (0) 2021.07.16