728x90
스택
- 후입선출(Last In First Out; LIFO) 자료구조
- 마지막에 들어온 데이터가 먼저 나가는 구조
- 데이터가 입력된 순서의 역순으로 처리되어야할 때 사용
- 함수 콜 스택, 수식 계산, 인터럽트 처리 등등
배열을 이용한 스택
class Stack {
int[] arr;
int top = -1;
Stack(int size) {
arr = new int[size];
}
public boolean isEmpty() {
if (top == -1) {
return true;
}
return false;
}
public boolean isFull() {
if (top == arr.length - 1) {
return true;
}
return false;
}
public void push(int data) {
if (isFull()) {
System.out.println("Stack is full!");
return;
}
top++;
arr[top] = data;
}
public Integer pop() {
if (isEmpty()) {
System.out.println("Stack is empty!");
return null;
}
int data = arr[top];
top--;
return data;
}
public Integer peek() {
if (isEmpty()) {
System.out.println("Stack is empty!");
return null;
}
return arr[top];
}
public void printStack() {
System.out.print("[");
for (int i = 0; i < top; ) {
System.out.print(arr[i] + ", ");
if (++i > top - 1) {
System.out.print(arr[i]);
}
}
System.out.println("]");
}
}
리스트를 이용한 스택
class Stack {
ArrayList list;
Stack() {
this.list = new ArrayList();
}
public boolean isEmpty() {
if (list.size() == 0) {
return true;
}
return false;
}
public void push(int data) {
list.add(data);
}
public Integer pop() {
if (isEmpty()) {
System.out.println("Stack is empty!");
return null;
}
int data = (int) list.get(list.size() - 1);
list.remove(list.size() - 1);
return data;
}
public Integer peek() {
if (isEmpty()) {
System.out.println("Stack is empty!");
return null;
}
return (int) list.get(list.size() - 1);
}
public void printStack() {
System.out.println(list);
}
}
'Algorithm' 카테고리의 다른 글
덱 (0) | 2022.12.15 |
---|---|
큐 (0) | 2022.12.15 |
연결 리스트 (0) | 2022.12.15 |
Java 버블 정렬, 삽입 정렬, 선택 정렬 (0) | 2022.10.28 |
Java 순열과 조합 (0) | 2022.10.26 |