스택(Stack) 은 영어사전 단어 의미로 쌓다라는 의미를 뜻합니다.
쌓아서 최 상단에 있는 부분을 먼저 빼는 형식으로 선출후입(LIFO) 이라고 표현합니다.
자바의 Stack클래스는 기본적으로 아래에 보이는 5가지의 함수를 제공해주고 있습니다.
자바에서 제공해주는 Stack 클래스를 사용해 살펴보도록 하겠습니다.
public Element push(Element item); //stack 최 상단에 데이터 insert
public Element pop(); //stack 최 상단 데이터를 제거
public Element peek(); //stack 최 상단 데이터를 출력
public boolean empty(); //tack이 비어있으면 true, 비어있지 않으면 false 로 반환
public int seach(Object o); //stack 값에 해당하는 데이터의 위치(순번)를 출력해준다. 인덱스를 반환 X 없으면 -1
먼저, new 생성자를 통해 Integer 형태의 Stack을 생성합니다.
Stack<Integer> stack = new Stack<>();
생성된 스택에 push함수를 사용해 5가지의 데이터를 추가해줍니다.
stack.push(1); //stack push 함수 = stack 최 상단에 데이터 insert 해준다.
stack.push(2); //stack push 함수 = stack 최 상단에 데이터 insert 해준다.
stack.push(3); //stack push 함수 = stack 최 상단에 데이터 insert 해준다.
stack.push(4); //stack push 함수 = stack 최 상단에 데이터 insert 해준다.
stack.push(5); //stack push 함수 = stack 최 상단에 데이터 insert 해준다.
추가된 스택을 확인해보기 위해 스택을 출력해주는 함수를 아래와 같이 간단하게 만들어줬습니다.
public static void displayStack(Stack<Integer> stack){
System.out.println("displayStack Start");
for(int i=0; i< stack.size(); i++){
System.out.println(stack.get(i));
}
System.out.println("displayStack End");
}
push함수를 통해 5개의 데이터가 쌓인 것을 확인하실수 있습니다.
displayStack(stack); // Stack 출력하기
이제 pop함수를 통해 최상단의 데이터를 제거해보도록 하겠습니다.
stack.pop(); //stack pop 함수 = stack 최 상단 데이터를 제거해준다.
스택출력함수인 displayStack함수를 사용해 어떻게 변경되었는지 확인하도록 하겠습니다.
기존에 5개였던 데이터가 최상단 데이터인 5가 삭제되어 총 4개로 변경이 된 점을 보실 수 있습니다.
삭제 되고 난 후의 최상단 데이터를 불러오기 위해 peek함수를 사용해보겠습니다.
System.out.println("최상단 데이터 ="+stack.peek()); //stack peek 함수 = stack 최 상단 데이터를 출력한다.
스택에 해당하는 값을 통해 스택의 위치(순번)을 찾고싶은 경우에는 search함수를 사용해 순번을 가져 올 수 있습니다.
헷갈리지 말아야 될 점은 인덱스의 위치가 아닌 스택의 순번 위치를 가져오고 있습니다.
데이터가 존재하지 않을 경우에는 -1을 반환합니다.
System.out.println(stack.search(2)); // stack search 함수 = stack 값에 해당하는 데이터의 위치(순번)를 출력해준다. 인덱스를 반환하는 것이 아니다. 없으면 -1
마지막으로 스택이 비어있는지 여부를 확인해주는 empty함수를 통해 데이터 존재 여부를 판단 할 수 있습니다.
System.out.println(stack.empty()); // stack empty 함수 = stack이 비어있으면 true, 비어있지 않으면 false 로 반환
전체 코드는 다음과 같습니다.
public class Main {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
stack.push(1); //stack push 함수 = stack 최 상단에 데이터 insert 해준다.
stack.push(2); //stack push 함수 = stack 최 상단에 데이터 insert 해준다.
stack.push(3); //stack push 함수 = stack 최 상단에 데이터 insert 해준다.
stack.push(4); //stack push 함수 = stack 최 상단에 데이터 insert 해준다.
stack.push(5); //stack push 함수 = stack 최 상단에 데이터 insert 해준다.
displayStack(stack); // Stack 출력하기
stack.pop(); //stack pop 함수 = stack 최 상단 데이터를 제거해준다.
displayStack(stack); // Stack 출력하기
System.out.println("최상단 데이터 =" + stack.peek()); //stack peek 함수 = stack 최 상단 데이터를 출력한다.
System.out.println("스택 위치 =" + stack.search(2)); // stack search 함수 = stack 값에 해당하는 데이터의 위치(순번)를 출력해준다. 인덱스를 반환하는 것이 아니다. 없으면 -1
System.out.println(stack.empty()); // stack empty 함수 = stack이 비어있으면 true, 비어있지 않으면 false 로 반환
}
public static void displayStack(Stack<Integer> stack) {
System.out.println("displayStack Start");
for (int i = 0; i < stack.size(); i++) {
System.out.println(stack.get(i));
}
System.out.println("displayStack End");
}
}
그럼 안뇽~~
'JAVA' 카테고리의 다른 글
[JAVA] ENUM 클래스 개념 및 사용법 (0) | 2023.04.11 |
---|---|
[JAVA] 상속 클래스 (super 키워드 관련) (0) | 2023.04.06 |
[JAVA] LocalDate Private 생성자 선언 이유 (0) | 2023.03.06 |
[JAVA] Stack 과 Heap에 대해서 (0) | 2022.07.27 |
[JAVA] JVM 구조 (0) | 2022.07.27 |