- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- swift split
- 감성에세이
- Algorithm
- 다트
- 정렬알고리즘
- 코테
- swift 알고리즘
- swift
- 알고리즘
- coding test
- 자료구조
- 프로그래머스 레벨2
- 프로그래머스 swift
- 정렬
- 디자인패턴
- 디자인 패턴
- programmer
- swift 코딩테스트
- datastructure
- 프로그래머스 level1
- sort
- 스위프트
- programmers
- 스위프트디자인패턴
- rxswift
- 프로그래머스
- 정렬 알고리즘
- 코딩테스트
- Design Pattern
- dart
Bill Kim's Life...
[자료구조] Stack(스택) : LIFO 본문
자료구조의 한 종류인 Stack(스택)에 대해서 살펴봅니다.
#. 구독 대상
- 컴퓨터 및 소프트웨어 공학과 관련자
- 자료구조 개념을 잡고 싶으신 분
- 소프트웨어 관련 종사자
- 기타 컴퓨터 공학에 관심이 있으신 분
- 기타 소프트웨어 개발과 지식에 관심이 있으신 모든 분들
- Swift 언어를 활용하여 자료구조를 공부해보고 싶으신 분들
Stack(스택)
스택(Stack)는 리스트의 한쪽 끝에서 자료의 삽입과 삭제가 이루어지는 자료구조입니다.
가장 최근에 들어온 자료가 가장 먼저 나가게 되는 LIFO(Last-In First-Out) 형태를 가지고 있습니다.
따라서 중간에서는 데이터를 추가 및 삭제하는 것이 불가능합니다
스택이 입출력이 이루어지는 부분을 스택 상단(Stack top) , 바닥 부분을 스택 하단(Stack bottom), 스택에 저장되는 것을 요소(Element) 라 부르며 스택에 요소가 하나도 없을 때 그러한 스택을 공백 스택(Empty stack) 이라고 합니다.
특징
- 데이터를 한 곳에서 삽입, 삭제
- Last In First Out (LIFO, 후입선출) 방식
- 중간에서 데이터 삽입 및 삭제 불가
- 배열과 비슷하지만 삽입, 삭제 등이 더 제한적임
Implementation
Swift를 활용하여 Stack 을 구현해보겠습니다.
우선 필요한 메소드는 아래와 같습니다.
- init : 리스트를 초기화하는 함수
- push : 데이터 입력
- pop : 마지막 데이터 삭제
- peak : 마지막 데이터 반환
- count : 현재 리스트의 크기를 반환
- isEmpty : 현재 리스트의 크기가 비어있는지 체크
Stack 클래스
class Stack<T> {
private var elements = Array<T>()
public init() {}
public func push(element: T) {
self.elements.append(element)
}
public func pop() -> T? {
return self.elements.popLast()
}
public func peek() -> T? {
return self.elements.last
}
public var isEmpty: Bool {
return self.elements.isEmpty
}
public var count: Int {
return self.elements.count
}
}
Iterator
public struct ArrayIterator<T> : IteratorProtocol {
var currentElement: [T]
init(elements: [T]) {
self.currentElement = elements
}
public mutating func next() -> T? {
if !self.currentElement.isEmpty {
return self.currentElement.popLast()
}
return nil
}
}
extension Stack : Sequence {
public func makeIterator() -> ArrayIterator<T> {
return ArrayIterator<T>(elements: self.elements)
}
}
사용 예시
let stack = Stack<Int>()
stack.push(1)
stack.push(2)
stack.push(3)
stack.push(4)
stack.push(5)
// 현재 데이터 카운트 : 5
print(stack.count)
for node in stack {
print(node)
// 5
// 4
// 3
// 2
// 1
}
이상으로 자료구조의 Stack(스택)에 대해서 살펴보았습니다.
그럼 이번 글을 통해서 스택에 대해서 조금이나마 이해가 되실 수 있으면 좋겠습니다.
감사합니다.
www.slideshare.net/BillKim8/swift-data-structure-stack
[참고 자료(References)]
[1] [스위프트 : 자료구조] 스택 : Stack : https://the-brain-of-sic2.tistory.com/38
[2] [스위프트:자료구조] 스택: Stack: 자료구조: DataStructure: 쌓기: swift : https://the-brain-of-sic2.tistory.com/18
[3] [Swift 자료구조 ch04] Stack : https://kor45cw.tistory.com/240
[4] Swift로 작성해보는 기본 자료구조 - Stack, Queue : https://wlaxhrl.tistory.com/87
[5] Stack : https://woongsios.tistory.com/87
[6] 스택(Stack) : https://kka7.tistory.com/74
[7] Swift, Data Structure, Stack : https://devmjun.github.io/archive/Stack
[8] [알고리즘] 2.1. 자료구조 : 스택(Stack) 이해하기 : https://monsieursongsong.tistory.com/4
[9] [자료구조]스택과 큐. (stack and queue) : https://winplz.tistory.com/entry/자료구조스택과-큐-stack-and-queue
[10] 자료구조(1) - 스택(Stack)이란 무엇일까? : https://minosaekki.tistory.com/8
'CS(컴퓨터 과학) > Data Structure' 카테고리의 다른 글
[자료구조] Dequeue(데크) : Doubly-ended Queue, 스택과 큐의 장점을 모아서 만든 자료구조 (0) | 2020.06.12 |
---|---|
[자료구조] Queue(큐) : FIFO, 배열을 통한 큐 구현 (0) | 2020.06.12 |
[자료구조] Linked List : 연결 리스트(Single, Double) (0) | 2020.06.11 |
[자료구조] Array : 순차리스트(배열) (0) | 2020.06.11 |
[자료구조] 자료구조의 목적과 분류 (0) | 2020.06.11 |