Stack
- 선형 자료구조
- Last In First Out : 가장 나중에 입력된 자료를 가장 먼저 꺼낼 수 있음
- 맨 마지막 위치(top)에서만 자료를 추가, 삭제, 꺼내올 수 있음
책을 책상 위에 쌓으면 위에서 만 꺼낼 수 있다.
stack을 그대로 번역하면 "쌓다." 이기 때문에 말 그대로 아래서부터 데이터를 쌓고,
최근에 쌓은 데이터 즉, 맨 위의 데이터만 꺼낼 수 있다.
스택 생성
Stack<Integer> stack = new Stack<>();
데이터 처리
push(Object obj) : 데이터 추가
데이터를 맨 뒤에 추가한다.
//값 추가
stack.push(1);//[1]
stack.push(2);//[1,2]
stack.push(3);//[1,2,3]
pop() : 데이터 조회, 삭제 (꺼내기)
맨 뒤의 데이터를 꺼낸다.
= 가장 마지막에 넣은 데이터를 꺼낸다.
//[1, 2, 3, 4, 5] ( 1->2->3->4->5 순서로 데이터를 넣었다고 가정)
stack.pop();// 5 반환 -> [1, 2, 3, 4]
stack.pop();// 4 반환 -> [1, 2, 3]
peek() : 데이터 조회 (꺼내지 않음)
맨 뒤의 데이터를 조회한다.
= 다음에 pop() 할 데이터를 조회한다.
= 가장 마지막에 넣은 데이터를 조회한다.
// [1, 2, 3, 4, 5]
stack.peek(); // 5 반환 -> 데이터는 그대로 [1, 2, 3, 4, 5]
stack.peek(); // 5 반환 -> 데이터는 그대로 [1, 2, 3, 4, 5]
기타 메서드
- empty() : 스택이 비어있으면 true를 반환
- search() : 괄호 안의 값이 stack구조의 몇번째에 있는지 반환
- contains() : 괄호 안의 값이 stack에 존재하는지 true, false로 반환
- size() : stack의 크기 반환
- clear() : stack의 데이터를 모두 비움
//현재 상태 : [1,2,3,4]
stack.empty(); //false
stack.search(2); //3
stack.contains(3); //true
stack.size(); //4
Stack과 Deque
Stack은 Deque를 이용해서 대체할 수 있다.
Deque에서 first, last 중 한쪽으로만 데이터를 넣고 뺀다면 Stack과 똑같이 동작한다.
Deque를 모른다면 아래 글을 한번 읽어보길 권장한다.
Deque (데크) 정리 글 : 2023.06.06 - [자료구조] - [JAVA/자료구조] DEQUE 데크 (양방향 큐)
Stack은 LIFO 구조이지만 사실 index로 접근도 가능하고, index의 값을 변경할 수도 있다.
또한 Stack은 인터페이스가 아니라 클래스이다.
따라서 JAVA에서는 공식적으로 Stack 사용을 지양한다고 한다.
자바 공식문서에 아래와 같은 문구가 있다.
"보다 완전하고 일관된 LIFO 스택 작업은 Deque 인터페이스및 해당 구현에 의해 제공됩니다."
위에서 말했듯이 Stack은 인덱스로 값을 변경할 수도 있고, 클래스이기 때문에 구현이나 수정이 불가능하다.
즉, 인터페이스인 Deque가 클래스인 Stack보다 객체지향 관점에서 더 많은 유연성을 지원하기 때문에 JAVA에서는 Stack 사용을 지양하고 Deque를 권장하고 있는 것이다.
Stack과 Deque에 대해 가독성 좋게 잘 정리된 글이 있어 공유한다.
https://kdhyo98.tistory.com/62
반응형
'자료구조_알고리즘 > 자료구조_Java' 카테고리의 다른 글
[JAVA/자료구조] Map / HashMap / Hashtable (0) | 2023.06.06 |
---|---|
[JAVA/자료구조] DEQUE 데크 (양방향 큐) (0) | 2023.06.06 |
[JAVA/자료구조] Queue 큐 (0) | 2023.06.05 |
[Java] 배열(Array) (0) | 2023.04.20 |
[JAVA/자료구조] 컬렉션(Collection) 프레임워크 (0) | 2023.02.07 |