[JAVA] Stack 클래스

SangJin Ham·2024년 2월 3일
0

JAVA

목록 보기
12/15
post-thumbnail

Stack

스택(Stack) : '쌓다', '쌓이다'와 같은 뜻으로, 접시를 높이 쌓아 놓은 형태와 비슷하며, 데이터를 순서대로 쌓는 자료구조이다.

Stack의 특징

  • 후입선출(LIFO: Last In First Out : 먼저 들어온 데이터가 나중에 빠져나가는 구조
  • 단방향 입출력 구조 : 데이터의 들어오는 방향과 나가는 방향이 같다.
  • 데이터를 하나씩만 넣고 뺄 수 있다.
  • 깊이 우선 탐색(DFS)에 이용된다.
  • 재귀 함수의 동작 흐름과 같은 구조를 가진다.

Stack 객체 생성

Stack 객체를 생성할 땐 Stack<Type> 이름 = new Stack<>();의 형태로 생성할 수 있고, 데이터 타입은 클래스나 래퍼 클래스로 선언할 수 있다.

import java.util.Stack;

// Integer형 스택 선언
Stack<Integer> stackInt = new Stack<>();
// String형 스택 선언
Stack<String> stackStr = new Stack<>();
// Boolean형 스택 선언
Stack<Boolean> stackBool = new Stack<>();

Stack 값 추가

  • 추가 : push(Object obj) 메소드를 통해 값을 하나씩 추가할 수 있다.
// Integer형 스택 선언
Stack<Integer> stackInt = new Stack<>();

// 값 추가 - push()
// 1, 2, 3 순으로 값 추가
stackInt.push(1);		// 1 추가
stackInt.push(2);		// 2 추가
stackInt.push(3);		// 3 추가


Stack 값 삭제

  • 삭제 : pop() 메소드를 사용해 하나씩 뺄 수 있으며, 가장 위쪽에 있는 원소의 값이 제거된다.
  • 초기화 : clear() 메소드를 사용해 스택을 초기화할 수 있다.
// Integer형 스택 선언
Stack<Integer> stackInt = new Stack<>();

// 값 추가 - push()
// 1, 2, 3 순으로 값 추가
stackInt.push(1);		// 1 추가
stackInt.push(2);		// 2 추가
stackInt.push(3);		// 3 추가

// 값 제거 - pop()
// 3, 2 순으로 값 제거
stackInt.pop();			// 3 제거
stackInt.pop();			// 2 제거

// Stack 초기화 - claer()
stackInt.clear();

Stack 기타 메소드

  • peak() : 스택의 가장 위에 있는 값을 출력한다.
  • size() : 스택의 크기를 출력해준다.
  • empty() : 스택이 비어있는지 확인해 true/false를 리턴해준다.
  • contains(Object obj) : 스택에 해당 값이 있는지 확인해 true/false를 리턴해준다.
  • search(Object obj) : 스택에 해당 값이 있는지 확인해 인덱스가 아닌 순서를 반환하고 존재하지 않다면 -1을 호출한다.
    • 여기서 순서란 pop() 메소드를 호출했을 때 몇 번째 순서에 나오는 지에 대한 인덱스를 반환한다. 따라서 반환 값은 0부터가 아닌 1부터 시작된다.
Stack<String> stack = new Stack<>();

stack.push("A");
stack.push("B");
stack.push("C");
stack.push("D");

stack.peek(); 		// stack의 가장 상단의 값 D 출력
stack.size();		// stack의 크기 출력 : 4
stack.empty();		// stack이 비어있는제 check (비어있다면 true)
stack.contains(1)	// stack에 1이 있는지 check (있다면 true)
stack.search("B")	// "B"가 나올 순서인 3이 출력
profile
끄적끄적

0개의 댓글