본문 바로가기
study/Java

Stack(push/pop)

by 고기만두(개발자) 2021. 8. 27. 15:51
728x90
반응형

이번 시간에는 stack에 대하여 알아보려 합니다.

Stack쌓아 올림’, ‘더미라는 뜻을 가진 단어입니다.

선형 메모리 공간에 데이터를 쌓아 저장하면서 후입선출(LIFO)의 시멘틱을 따르는 자료 구조입니다.

맨 처음 들어간 데이터가 바닥에 쌓이고, 맨 마지막에 저장된(push) 데이터가 제일 먼저 인출되어(pop) 삽입/삭제/수정이 가능합니다.

프링*스 과자를 생각하면 이해하기 쉬울 것 같네요.

통에 과자를 넣을 때, 맨 나중에 들어간 과자를 맨 처음 먹게 될 것입니다.

스택도 같은 원리입니다.

맨 위 데이터를 top이라고, 맨 아래는 bottom이라고 부르며, 보통의 경우 bottom의 값은 0으로 고정됩니다.

stack에서 자주 사용되는 메소드는 다음과 같습니다.

메소드 설명
boolean empty() 해당 스택이 비어 있으면 true, 비어 있지 않으면 false를 반환함.
E peek() 해당 스택의 제일 상단에 있는(제일 마지막으로 저장된) 요소를 반환함.
E pop() 해당 스택의 제일 상단에 있는(제일 마지막으로 저장된) 요소를 반환하고, 해당 요소를 스택에서 제거함.
E push(E item) 해당 스택의 제일 상단에 전달된 요소를 삽입함.
int search(Object o) 해당 스택에서 전달된 객체가 존재하는 위치의 인덱스를 반환함.
이때 인덱스는 제일 상단에 있는(제일 마지막으로 저장된) 요소의 위치부터 0이 아닌 1부터 시작함.

예제와 같이 stack을 구현해 보았습니다.

package jaryogujo;
import java.util.Stack;

public class prog {
	public static void main(String[] args) {
		Stack<Integer> st = new Stack<Integer>();	// 스택의 생성
		
		// push() 메소드를 이용한 요소의 저장
		st.push(4);
		st.push(2);
		st.push(3);
		st.push(1);
		
		// peek() 메소드를 이용한 요소의 반환
		System.out.println(st.peek());
		System.out.println(st);

top1이 저장되어 있음을 peak()을 통해 알 수 있었습니다.

그리고 st에 저장된 순서대로 [4, 2, 3, 1] 이 출력됩니다.

// pop() 메소드를 이용한 요소의 반환 및 제거
		System.out.println(st.pop());
		System.out.println(st);

Pop()으로 맨 위 stack1을 빼내어 출력했습니다.

그리고 남은 stack을 출력했더니 위와 같은 결과가 나왔습니다.

// search() 메소드를 이용한 요소의 위치 검색
		System.out.println(st.search(4));
		System.out.println(st.search(3));

Search(찾는 값) 메서드의 결과는 해당 값이 갖는 인덱스 주소입니다.

(그림에서는 작은 정사각형에 인덱스 주소를 표시했습니다.)

비어 있으면 -1, 그렇지 않다면 맨 위 요소부터 1에서 시작하는 인덱스 값을 출력합니다.

Stack에서는 인덱스 주소 값은 반환할 수 있지만, 어떤 값이 어디에 들어있는 지 탐색하는 기능은 없습니다.

따라서 삽입, 삭제 외에 다른 기능이 없습니다.

맨 윗층에 무엇이 들었는지만 보이고, 내용물은 알 수 없는 상자로 생각할 수 있을 것 같네요.

방향성도 없다보니, 삽입과 삭제 모두에서 시간복잡도는 O(1)이겠죠.

 

이번 시간에는 stack에 대해 알아보았습니다.

다음 시간에는 queue에 대해 알아보도록 하겠습니다.

 
728x90
반응형

'study > Java' 카테고리의 다른 글

Java의 Generic  (0) 2021.08.29
Queue에 대해 알아보자  (0) 2021.08.28
Hashmap / Treemap  (0) 2021.08.26
Doubly-linkedlist에 대해 알아보자  (0) 2021.08.25
Linkedlist에 대해 알아보자  (0) 2021.08.24

댓글