Study for Backend/Data Structure

[Data Structure기초] Stack

지미니박 2024. 2. 19. 23:01

 

Stack (스택)

- 데이터를 차곡차곡 쌓아올린 형태, 선형 자료구조

- 가장 마지막에 삽입된 자료가 가장 먼저 삭제됨 (Last In First Out , 후입선출)

- 정해진 방향으로 쌓을 수 있고 top 으로 정한 곳을 통해서만 접근 가능

- 문서 편집기에서 undo 기능을 구현할 때 stack 을 사용

 

Stack 시간복잡도

삽입(Push) : O(1) 
삭제(Pop) : O(1) 
읽기(Peek) : O(1) 
탐색(Search) : O(n)
접근(Access) : O(n)

 

연산  
push()  삽입. 스택이 가득 차 있으면 오류 발생 후 종료 , 공간이 있으면 top 증가 시킨 후 데이터 추가
pop()  삭제. 스택이 비어있으면 오류 발생 후 종료 , 스택이 비어있지 않으면 top 이 가리키는 데이터를 제거, top 감소
peek()  데이터 확인. top이 가리키고 있는 데이터를 조작없이 읽기만 함
isEmpty()  공간 유무 확인. 스택이 비어있으면 true, 비어있지 않으면 false
size() 스택 크기 리턴. 
contains() 특정 value 포함 여부 확인. 포함하면 true 포함하지 않으면 false
search() value의 위치를 반환. value가 여러개면 마지막 위치를 반환하고 찾는 값이 없으면 -1을 반환

 

//스택 사용예제
Stack<Integer> stack = new Stack<>(); //int형 스택 선언
stack.push(0);     // stack에 값 0 추가
stack.push(1);     // stack에 값 1 추가
stack.size();      // stack의 크기 출력 : 1 
stack.empty();     // stack이 비어있는제 check (비어있다면 true)
stack.contains(0)  // stack에 0 이 있는지 check (있다면 true)

 

장점

- 스택에 저장된 데이터를 가져오는 속도가 매우 빠르다.
데이터를 삽입, 삭제하는데 모든 데이터를 순회할 필요가 없기 때문이다.

- 자바에서는 스택을 기본 자료 구조로 제공

 

단점

- Thread-safe

멀티스레드 환경이 아닐 때 사용하면 lock 거는 작업때문에 오버헤드가 발생할 수 있다.

- 스택 오버플로우가 발생할 수 있다.
스택은 한계가 있어서, 요소를 계속해서 푸시하면 스택 오버플로우(Stack Overflow) 오류가 발생할 수 있다.
- 메모리를 관리하는데 부담이 될 수 있다.
스택에 데이터를 저장하는 동안 메모리를 사용하게 되며, 스택 오버플로우를 방지하기 위해 충분한 메모리를 확보해야 한다.

- 초기 용량 설정을 할 수 있는 생성자가 없어서 삽입이 많으면 배열을 복사해야하는 일이 빈번하게 발생한다.

 

 

 

관련 link

https://devlog-wjdrbs96.tistory.com/244

 

[Java] Stack 클래스는 무엇이고 문제점은 무엇일까?

Stack 클래스란 무엇인가? Stack 이라는 자료구조는 메모리에서도 쓰이고 실생활에서도 볼 수 있는 자료구조 입니다. (수식계산, 수식괄호검사, 웹브라우저의 뒤로/앞으로) 위와 같이 LIFO(후입 선출

devlog-wjdrbs96.tistory.com

https://velog.io/@db_jam/Java-%EC%8A%A4%ED%83%9DStack-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%A0%95%EB%A6%AC

 

[Java] 스택(Stack) 자료구조 정리

사전적으로 Stack은 '쌓다', '더미'라는 의미를 가지고 있고, 사전적인 의미에서 알 수 있듯이 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료 구조이다.

velog.io

https://velog.io/@gusdna4529/Stack

 

Java - 스택(Stack)

스택(Stack)이란 무엇인가?

velog.io

https://ittrue.tistory.com/200

 

[Java] 자바 스택(Stack) 클래스 메서드 정리 및 활용

스택이란? 스택은 ‘쌓다.’, ‘쌓이다.’와 같은 뜻을 가진 용어로, 접시를 높이 쌓아 놓은 형태와 비슷한 자료구조이다. 즉, 데이터를 순서대로 쌓는 자료구조이다. 실생활에서 흔히 접할 수

ittrue.tistory.com

https://coding-factory.tistory.com/601

 

[Java] 자바 Stack 클래스 사용법 & 예제 총정리

Stack이란? 자료 구조 중 하나인 Stack의 사전적 정의는 '쌓다', '더미'입니다. 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료 구조라고 할 수 있습니다. Stack의 가장 큰 특징은 나중에 들어간 것

coding-factory.tistory.com