우당탕탕 좌충우돌 개발일기
스택(Stack)의 구조 본문
스택(Stack)의 구조
- 스택은 LIFO(Last In, First Out) 또는 FILO(First In, Last Out) 데이터 관리 방식을 따름
- LIFO : 마지막에 넣은 데이터를 가장 먼저 추출함
- FILO : 처음에 넣은 데이터를 가장 마지막에 추출함
- 데이터를 스택에 넣는건 push() / 데이터를 스택에서 꺼내는건 pop()
- 큐(Queue)가 FIFO 라면, 스택(Stack)은 LIFO
💡스택(Stack)의 장점 vs 단점
장점 : 구조의 단순화 / 데이터의 저장,읽기 속도 빠름
단점 : 데이터 최대 개수를 미리 정해야 하고, 미리 정한만큼 쓰지 못하면 저장공간의 낭비 발생
📝push와 pop을 이용한 예제코드
import java.util.Stack;
public class Test_stack {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<Integer>();
stack.push(1); //1이 추가됨
stack.push(2); //2가 추가됨
stack.push(3); //3이 추가됨
stack.pop(); //3이 제거됨
stack.pop(); //2가 제거됨
System.out.println(stack);
}
}
📝ArrayList를 이용해서 가변적으로 Stack(스택)에 데이터를 넣고 빼보자
import java.util.ArrayList;
public class Test_stack<T> {
private ArrayList<T> stack = new ArrayList<T>();
public void push(T i) {
stack.add(i); //add는 ArrayList의 객체
}
public T pop() {
if(stack.isEmpty()) {
return null;
}
//stack의 사이즈를 알 수 없기때문에 size 메소드로 값을 구한 뒤 -1을 해주면 끝자리 값이 삭제됨
return stack.remove(stack.size() - 1);
}
public boolean isEmpty() {
return stack.isEmpty();
}
public static void main(String[] args) {
Test_stack<Integer> ts = new Test_stack<Integer>();
ts.push(1); //1을 넣고
ts.push(2); //2를 넣고
System.out.println(ts.pop()); //2가 출력되고 값이 빠짐
ts.push(3); //3을 넣고
System.out.println(ts.pop()); //3이 출력되고 값이 빠짐
System.out.println(ts.pop()); //남은 값은 1로, 1이 출력됨
//2 3 1 순으로 출력된다.
}
}
반응형
'Programming > JAVA' 카테고리의 다른 글
Getter & Setter (0) | 2023.12.19 |
---|---|
ResponseBody 어노테이션 사용법 (0) | 2023.12.19 |
Optional 클래스 (0) | 2022.08.18 |
큐(Queue)의 구조 (0) | 2022.08.11 |
리스트(List) 와 ArrayList의 차이 (0) | 2022.08.11 |