728x90
반응형
💡 Stack의 특징
- 맨 마지막 위치(top)에서만 자료를 추가, 삭제, 꺼내올 수 있음( 중간의 자료를 꺼낼 수 없음)
- Last In First Out (LIFO : 후입선출) 구조
- 택배 상자가 쌓여있는 모양
- 가장 최근의 자료를 찾아오거나 게임에서 히스토리를 유지하고 이를 무를때 사용
- 함수의 메모리는 호출 순서에 따른 stack 구조
- jdk 클래스 : Stack
🧑🏻💻 배열을 활용하여 Stack 구현하기
- MyArrayStack.Java
package ch04;
import ch02.MyArray;
public class MyArrayStack {
int top; // 스택의 최상위 데이터 위치
MyArray arrayStack; //MyArray 참조형 변수
public MyArrayStack() {
//default 생성자
//초기화 및 인스턴스 생성
top = 0;
arrayStack = new MyArray();
}
public MyArrayStack(int size) {
//데이터를 담을 배열 사이즈 초기화
arrayStack = new MyArray(size);
}
public void push(int data) {
// 스택에 데이터 추가
if(isFull()) {
//배열의 사이즈만큼 데이터가 꽉 차있는 경우
System.out.println("stack is full");
return;
}
//배열에 데이터 추가
arrayStack.addElement(data);
//최상위 데이터 위치 1 증가
top++;
}
public int pop() {
// 스택에 데이터 꺼내기
if(top == 0) {
// 최상위 데이터가 없는 경우
System.out.println("stack is empty");
return MyArray.ERROR_NUM;
}
// 최상위 데이터를 꺼낸 후(배열의 맨 마지막 데이터 제거)
return arrayStack.removeElement(--top);
}
public int peek() {
//최상위 데이터 조회
if (top == 0) {
System.out.println("stack is empty");
return MyArray.ERROR_NUM;
}
return arrayStack.getElement(top-1);
}
public int getSize() {
// 현재 데이터의 수 리턴
return top;
}
public boolean isFull() {
// 스택의 사이즈가 찼는지, 체크
if(top == arrayStack.ARRAY_SIZE) {
return true;
}
else return false;
}
public boolean isEmpty() {
// 스택이 비어있는지 체크
if(top == 0) {
return true;
}
else return false;
}
public void printAll() {
// 모든 요소 출력
arrayStack.printAll();
}
}
- MyArrayStackTest.java
public class MyArrayStackTest {
public static void main(String[] args) {
MyArrayStack stack = new MyArrayStack(3);
stack.push(10);
stack.push(20);
stack.push(30);
stack.push(40);
stack.printAll();
System.out.println("top element is " + stack.pop());
stack.printAll();
System.out.println("stack size is " + stack.getSize());
}
}
728x90
반응형
'Java' 카테고리의 다른 글
[Java] 싱글톤(Singleton) 패턴 (0) | 2023.01.10 |
---|---|
[Java] 큐(Queue) 구현 (2) | 2023.01.08 |
[Java] 연결 리스트(LinkedList) (0) | 2023.01.03 |
[Java] 배열(Array) 구현 (0) | 2023.01.03 |
[JAVA] String, String Builder, String Text Block (0) | 2022.04.13 |