Stack.
자료 구조 중 하나인 Stack은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 자료 구조
후입선출 자료 구조 Last In First Out : LIFO
데이터가 입력된 순서의 역순으로 처리되어야 할 때 사용
ex) 함수 콜 스택, 수식 계산, 인터럽트 처리, 웹브라우저 앞으로 / 뒤로
자바에서 스택을 사용하기 위해서 java.util 패키지에서 제공하는 Stack을 사용하면 된다.
기본 Stack 클래스 외에도 ArrayList로도 구현해보자.
Stack 한장으로 정리해보기.
Stack 주요 메서드.
import java.util.Stack;
public class Main {
public static void main(String[] args) {
// Stack 선언
Stack<String> strStack = new Stack<>();
Stack<Integer> intStack = new Stack<>();
// 데이터 추가. front <- 1 <- 2 <- 3 (top)
strStack.push("data1");
strStack.push("data2");
strStack.push("data3");
// 최상단 값 출력 값을 삭제하지 않음, top
String top = strStack.peek();
System.out.println(top); // data3
// 데이터 삭제, front <- 1 <- 2 <- 3--->>>>> pop
System.out.println(strStack.pop()); // data3
System.out.println(strStack.pop()); // data2
strStack.clear(); //
System.out.println(strStack); // []
// strStack.pop(); // EmptyStackException
// 데이터 추가
intStack.push(1);
intStack.push(2);
intStack.push(3);
intStack.push(4);
intStack.push(5);
System.out.println(intStack); // [1, 2, 3, 4, 5]
// 기타 메서드
System.out.println(intStack.size()); // 5
System.out.println(intStack.isEmpty()); // false
System.out.println(intStack.contains(3)); // true
System.out.println(intStack.search(3)); // 3, 뒤에서 몇번째 나오는지, 없으면 -1
System.out.println(intStack.search(1)); // 5 중복된 값이 있으면 첫번째 만나는 자리 출력
System.out.println(intStack.search(10)); // -1
}
}
ArrayList로 Stack구현하기.
import java.util.ArrayList;
class MyStack {
private ArrayList<String> arrayStack = new ArrayList<>();
public void push(String data) { // add
arrayStack.add(data);
}
public String pop() { // delete
int length = arrayStack.size();
if (length == 0) {
System.out.println("MyStack is empty!");
return null;
}
return arrayStack.remove(length - 1); // 마지막 인덱스 자료 반환 및 삭제
}
public String peek() {
int length = arrayStack.size();
if (length == 0) {
System.out.println("MyStack is empty!");
return null;
}
return arrayStack.get(length -1); // 마지막 인덱스 자료 반환만
}
@Override
public String toString() { // 객체 주소 말고 arrayStack 을 출력하기 위해 재정의
return "MyStack{" + "arrayStack=" + arrayStack + "}";
}
}
public class Main {
public static void main(String[] args) {
MyStack stack = new MyStack();
stack.push("A");
stack.push("B");
stack.push("C");
System.out.println(stack); // MyStack{arrayStack=[A, B, C]}
System.out.println(stack.peek()); // C
System.out.println(stack.pop()); // C
System.out.println(stack.pop()); // B
System.out.println(stack.pop()); // A
System.out.println(stack.pop()); // MyStack is empty! null
System.out.println(stack); // MyStack{arrayStack=[]}
}
}
'BACKEND > Data Structure & Algorithm' 카테고리의 다른 글
선형자료구조 - 데크/덱(Deque) (1) | 2023.05.19 |
---|---|
선형자료구조 - 큐(Queue) (0) | 2023.05.18 |
자료구조란 무엇이고 선형/비선형 자료구조란? (0) | 2023.05.17 |
선형자료구조 - 연결리스트(LinkedList) (1) | 2023.05.15 |
선형자료구조 - Array / ArrayList (0) | 2023.05.15 |