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

yujamint·2022년 7월 6일
1

Java

목록 보기
3/6

Stack 이란?

사전적으로 Stack은 '쌓다', '더미'라는 의미를 가지고 있고, 사전적인 의미에서 알 수 있듯이 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료 구조이다. Stack의 가장 큰 특징은 나중에 들어간 것이 먼저 나오는 LIFO(Last In First Out)의 형태를 띈다는 것이다.
스택구조
Stack의 특징

  • 먼저 들어간 자료가 나중에 나오는 LIFO 구조
  • 그래프의 깊이 우선 탐색(DFS)에서 사용
  • 재귀적(Recursive) 함수를 호출 할 때 사용

Stack 사용법, 예제

Stack 선언

import java.util.stack;
Stack<Integer> stack = new Stack<>(); // int형 스택 선언
Stack<Character> stack = new Stack<>(); // char형 스택 선언

Stack을 선언하려면 객체의 타입을 파라미터로 주며 위와 같이 선언하면 된다.

Stack 값 추가

Stack<Integer> stack = new Stack<>(); // int형 스택 선언

stack.push(3);
stack.push(1);
stack.push(5);
stack.push(6);

System.out.println(stack); // 출력 결과 [3, 1, 5, 6]

Stack에 값을 추가하기 위해서는 push(value) 메소드를 사용한다.
add() 메서드를 통해서도 Stack에 값을 추가할 수 있다.
두 메서드의 차이점은 push() 메서드는 Stack 클래스에서 제공하며 추가한 객체를 리턴하고, add() 메서드는 List 클래스에서 제공한하며 추가 성공 여부(boolean)를 리턴한다는 것이다. 큰 차이점은 없지만 Stack을 사용했다는 것을 명확하게 알기 위해 push()를 사용하는 것이 좋다.

Stack 값 삭제

Stack<Integer> stack = new Stack<>(); // int형 스택 선언

stack.push(3);
stack.push(1);
stack.push(5);
stack.push(6);

stack.pop(); // 가장 위에 있는(최근에 들어간) 객체릘 꺼낸다.
System.out.println(stack); // 출력 결과 : [3, 1, 5]
stack.clear();
System.out.println(stack); // 출력 결과 : []

Stack에서 값을 하나 제거하기 위해서는 pop() 메소드를 사용한다. Stack에서 가장 위에 있는(마지막에 추가한) 값인 6이 pop() 메소드를 사용함으로써 제거된다. 위에서 설명한 Stack의 가장 큰 특징인 LIFO 구조를 확인할 수 있다. 모든 값을 제거하기 위해서는 clear() 메소드를 사용한다.

pop() 메소드는 가장 위에 있는 값을 제거하면서, 제거한 값을 리턴한다.

Stack의 가장 상단의 값

Stack<Integer> stack = new Stack<>(); // int형 스택 선언

stack.push(3);
stack.push(1);
stack.push(5);
stack.push(6);

System.out.println(stack.peek()); // 출력 결과 : 6

Stack의 가장 상단의 값을 확인하기 위해서는 peek() 메소드를 사용한다. 반환값으로 Stack 최상단의 값, 즉 가장 먼저 꺼내지게 될 값을 가진다. pop() 메소드 또한 같은 리턴값을 가지지만 pop() 메소드는 값을 제거하고, peek() 메소드는 값을 제거하지 않는다(확인만 함)는 차이가 있다.

Stack 기타 메서드

Stack<Integer> stack = new Stack<>(); // int형 스택 선언
Stack<Integer> stack2 = new Stack<>();

stack.push(3);
stack.push(1);
stack.push(5);
stack.push(6);

System.out.println(stack.size()); // 출력 결과 : 4
System.out.println(stack.isEmpty()); // 출력 결과 : false
System.out.println(stack2.isEmpty()); // 출력 결과 : true
System.out.println(stack.contains(5)); // 출력 결과 : true
  • size() : Stack의 크기를 리턴한다.
  • isEmpty() : Stack이 비어있다면 true, 비어있지 않다면 false를 리턴한다.
  • contains(value) : Stack이 value를 포함하고 있다면 true, 포함하고 있지 않다면 false를 리턴한다.

https://coding-factory.tistory.com/601
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=rorean&logNo=221620781986

profile
개발 기록

0개의 댓글