본문 바로가기
웹 개발/java

[java] Stack (스택) 사용하기

by dani0312 2024. 2. 18.

📌Stack 알아보기

◾Stack 이란

'쌓다'의 뜻을 가진 용어로, 접시를 쌓아 놓은 형태와 유사한 자료구조이다. 데이터를 한 방향으로 순서대로 쌓고, 꺼내는 구조이다. 가장 나중에 들어간 데이터를 가장 먼저 꺼낸다. (LIFO: Last In First Out)

 

 

◾Stack 특징

- 후입선출(LIFO): 나중에 들어온 데이터가 가장 먼저 나가는 구조이다. 

   (Comparable인터페이스 또는 별도의 Comparator를 사용하여 지정이 가능하다.)

- 단방향 입출 구조: 데이터를 한 쪽 끝에서만 접근할 수 있다. 이 접근 포인트를 'Top'이라 한다.  

- 빠른 작업 속도: 데이터의 추가와 제거가 상수 시간(O(1))에 이루어져, 스택은 빠른 작업 속도를 제공한다. 

- 제한된 접근: 스택은 가장 최근에 추가된 데이터에만 접근이 가능하며, 중간에 있는 데이터는 입출력이 불가능하다. 

 

 

◾Stack 사용하기

1. 선언하기

        Stack<Integer> stack = new Stack<>();

`Stack` 키워드로 선언한다. 

 

 

2. 값 추가하기

	stack.push(1);
        stack.push(2);
        stack.push(3); 
        stack.add(4); // 1234 <-이 방향으로 값이 쌓인다.

push() 또는 add()메서드를 이용해 값을 추가한다. 두 가지 메서드 모두 값을 추가할 수 있으나 push()를 사용하는 것이 스택의 의도에 더 부합하다.

- push() : 스택의 맨 위에 요소를 추가한다. 

- add(): 컬렉션에 요소를 추가한다. 

 

3. 값 제거하기

		int value = stack.pop();
   		 System.out.println("value = " + value); // value = 4 (4제거,현재 123)

-pop(): 가장 최근에 추가된 데이터가 제거된다. 

 

 

4. 최상단 값 확인하기

        int peekVal = stack.peek();
        System.out.println("peekVal = " + peekVal); // peekVal = 3

- peek(): 스택의 맨 위에 위치한 데이터를 가져오며 데이터를 제거하지 않는다.

 

 

5. 비어있는지 확인하기

        boolean isEmpty = stack.isEmpty();
        System.out.println("isEmpty = " + isEmpty); // isEmpty = false

- isEmpty(): 스택이 비어있는지에 따라 true, false를 반환한다.

 

 

6. 스택의 사이즈 구하기

        int size = stack.size();
        System.out.println("size = " + size); //size = 3

- size(): 스택의 사이즈

 

 

7. 값의 위치 확인하기

 

// 현재 스택에 123 존재
	System.out.println("stack.search(0) = " + stack.search(0)); // stack.search(0) = -1 (존재X)
        System.out.println("stack.search(2) = " + stack.search(2)); // stack.search(2) = 2
        System.out.println("stack.search(3) = " + stack.search(3)); // stack.search(3) = 1

- search(값) : 해당 값의 위치를 반환한다.

스택의 끝에서부터 카운트하여. 가장 마지막에 넣은 값이 첫번째 값으로 1이다.

해당 값이 스택에 존재하지 않다면 -1을 반환한다. 

 

 

8. 값의 존재여부 확인하기

        boolean isContain = stack.contains(3);
        System.out.println("isContain = " + isContain); // isContain = true

- contains() : 해당 요소가 컬렉션에 포함되어 있는지 확인하고 true, false를 반환한다.

 

 

 

 


Reference

https://ittrue.tistory.com/200


/* 내가 추가한 코드 */ /* 내가 추가한 코드 끝끝 */