일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Baekjoon
- for문 사용해보기
- 세 수
- 백준
- 비트 코인
- 단계별로 풀어보기
- 1065
- Dapp
- 자바스크립트
- 10817
- 더하기 사이클
- 솔리디티
- 1%d
- 평균은 넘겠지
- X보다 작은 수
- 함수 사용하기
- 1546
- 10871
- 블록 체인
- Remix
- 1110
- if문 사용해보기
- 이더리움
- 알고리즘 문제풀이
- Mist
- 시험 성적
- 그대로 출력하기
- 2448
- 가상 화폐
- 별 찍기 - 11
- Today
- Total
블링블링 범블링
[자료구조] 스택(Stack) 본문
스택(Stack)
스택은 선형 자료구조에서 대표적인 것 중에 하나다.
스택을 떠올리면 가장 먼저 생각하는 것은 이러한 구조의 그림이다. 바구니에 책을 차례대로 쌓고, 이 것을 꺼내려면 가장 나중에 쌓은 책을 꺼내야 한다.
많은 책에서 이 것을 LIFO(Last In First Out)라고 한다. 가장 나중에 들어 간 것이 가장 먼저 나온다는 의미다. 스택은 재귀 함수를 할 때도 많이 언급되는 자료구조이기도 하다.
스택을 구현할 때 배열을 이용해 하는 법과 리스트를 이용하는 방법이 있다. 나는 리스트로 구현을 했다. STL을 사용하지 못할 때는 이렇게 구현해서 써야하고, 개념을 이해하기 위해서는 직접 구현해보는 것이 좋은 것 같다. 나도 복습할 겸 다시 구현을 해봤다.
<소스코드>
[push()]
push(T data)는 데이터를 넣는 것이다. 리스트의 가장 마지막에 넣어주면 된다. 가장 마지막 데이터는 Top포인터가 가리키는 노드다. 새로운 노드가 생성되면, Top포인터는 새로운 노드를 가리키게 된다. 그리고 새로운 노드는 next포인터를 이용해 이전의 Top노드와 연결해준다.
[pop()]
노드를 지울 때는 Top 포인터가 가리키는 노드를 지워줘야한다. temp라는 임시 변수에 노드를 담아두고, Top을 밑에 있는 노드로 설정해준 뒤에 temp를 지워준다.
[top()]
top()은 가장 위에 있는 데이터를 반환하는 함수이다. 스택은 가장 나중에 들어온 데이터만 확인할 수 있다.
[size()]
stack의 사이즈를 반환하는 함수이다. 이를 이용해 현재 stack에 쌓은 데이터의 갯수를 알 수 있다.
[empty()]
empty()는 stack이 비었는 지 알려주는 bool 반환형 함수이다. _size변수가 0이라면 true를 반환해주면 된다. 조건문에 자주 쓰이는 함수이기도 하다.
<소스코드>
다음은 배열을 통해 구현한 스택STL이다. 가변배열을 이용해서 구현을 했다. 리스트와 다른 점은 구성하는 내용은 같지만, 담는 데이터에 용량에 따라서 속도에서 차이가 날 수 있다는 점이다.
그리고 단순한 스택을 쓴다는 것에서 크게 차이가 없다고 생각하지만, 배열로 스택을 쓰게 되면 중간의 데이터에 접근해야할 경우에 용이하다.
다음에 스택을 이용해서 풀었던 백준문제도 리뷰를 올릴 예정이다. 부지런하게...
출처: http://meylady.tistory.com/
'알고리즘 문제풀이 > 자료구조 및 알고리즘' 카테고리의 다른 글
[자료구조] 벡터(vector) (0) | 2018.05.01 |
---|---|
[자료구조] 큐(Queue) (0) | 2018.05.01 |
[자료구조] 원형 연결리스트(Circular Linked List) (0) | 2018.05.01 |
[자료구조] 단일 연결리스트(Singly Linked List) (0) | 2018.05.01 |
[자료구조] 리스트(List) (0) | 2018.05.01 |