마지막에 들어온게 첫번째로 나가는 데이터 구조.(LIFO)
/*
___ _ _
/ __| |_ __ _ __| |__ ___
\__ \ _/ _` / _| / /(_-<
|___/\__\__,_\__|_\_\/__/
*/
/*
Last-in first-out (LIFO)
Push and pop are O(1) operations.
*/
class Stack<T> {
private var array: [T] = []
func push(_ item: T) {
array.append(item)
}
func pop() -> T? {
array.popLast()
}
func peek() -> T? {
array.last
}
var isEmpty: Bool {
array.isEmpty
}
var count: Int {
array.count
}
}
struct StackStruct<T> {
fileprivate var array = [T]()
mutating func push(_ item: T) {
array.append(item)
}
mutating func pop() -> T? {
array.popLast()
}
var peek: T? {
array.last
}
var isEmpty: Bool {
array.isEmpty
}
var count: Int {
array.count
}
}
첫번째로 들어온게 첫번째로 나가는 데이터 구조.(FIFO)
/*
___
/ _ \ _ _ ___ _ _ ___ ___
| (_) | || / -_) || / -_|_-<
\__\_\\_,_\___|\_,_\___/__/
*/
/*
First-in first-out (FIFO)
enqueue O(1) dequeue O(n)
*/
class Queue<T> {
private var array: [T] = []
func enqueue(_ item: T) {
array.append(item)
}
func dequeue() -> T? {
if isEmpty {
return nil
} else {
return array.removeFirst()
}
}
var isEmpty: Bool {
return array.isEmpty
}
var count: Int {
return array.count
}
func peek() -> T? {
return array.first
}
}
struct QueueStruct<T> {
private var array: [T] = []
mutating func enqueue(_ item: T) {
array.append(item)
}
mutating func dequeue() -> T? {
if isEmpty {
return nil
} else {
return array.removeFirst()
}
}
var isEmpty: Bool {
return array.isEmpty
}
var count: Int {
return array.count
}
func peek() -> T? {
return array.first
}
}
struct Queue<T> {
private var queue: [T?] = []
private var head: Int = 0
public var count: Int {
return queue.count
}
public var isEmpty: Bool {
return queue.isEmpty
}
public mutating func enqueue(_ element: T) {
queue.append(element)
}
public mutating func dequeue() -> T? {
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
}
}