🐶 스택이란 무엇일까요
- 후입선출 자료구조
- Last In First Out (LIFO)
- 영어를 풀어보면 마지막에 들어온 데이터가 먼저 나가는 구조입니다.
- 데이터가 입력된 순서의 역순으로 처리되어야 할 때 사용합니다.
- ex) 함수 콜 스택, 수식 계산, 인터럽트 처리 등
🐶 스택 기본 연산
- 데이터 추가 (push) : 스택의 가장 마지막 위치에 데이터 추가
- 데이터 꺼내기 (pop) : 스택의 가장 마지막 위치에서 데이터 꺼냄
🐶 java의 stack 사용하기
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Stack stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack); // [1, 2, 3]
System.out.println(stack.pop()); // 3
System.out.println(stack); // [1, 2]
System.out.println(stack.peek()); // 2
System.out.println(stack); // [1, 2]
System.out.println(stack.contains(1)); // true
System.out.println(stack.size()); // 2
System.out.println(stack.empty()); // false
stack.clear();
System.out.println(stack); // []
// stack.pop(); -> 에러 발생
}
}
🐶 java ArrayList를 이용한 스택 구현
import java.util.ArrayList;
class MyStack1 {
ArrayList list;
MyStack1() {
this.list = new ArrayList();
}
public boolean isEmpty() {
if (this.list.size() == 0) {
return true;
} else {
return false;
}
}
public void push(int data) {
this.list.add(data);
}
public Integer pop() {
if (this.isEmpty()) {
System.out.println("Stack is empty");
return null;
}
int data = (int)this.list.get(this.list.size() - 1);
this.list.remove(this.list.size() - 1);
return data;
}
public Integer peek() {
if (this.isEmpty()) {
System.out.println("Stack is empty");
return null;
}
int data = (int)this.list.get(this.list.size() - 1);
return data;
}
public void printStack() {
System.out.println(this.list);
}
}
public class Main {
public static void main(String[] args) {
MyStack1 myStack1 = new MyStack1();
System.out.println(myStack1.isEmpty());
myStack1.push(1);
myStack1.push(2);
myStack1.push(3);
myStack1.printStack();
System.out.println(myStack1.peek());
myStack1.printStack();
System.out.println(myStack1.pop());
System.out.println(myStack1.pop());
myStack1.printStack();
}
}
🐶 java 배열을 이용한 스택 구현
import java.util.ArrayList;
class MyStack2 {
int[] arr;
int top = -1;
MyStack2(int size) {
this.arr = new int[size];
}
public boolean isEmpty() {
if (this.top == -1) {
return true;
} else {
return false;
}
}
public boolean isFull() {
if (this.top == this.arr.length - 1) {
return true;
} else {
return false;
}
}
public void push(int data) {
if (this.isFull()) {
System.out.println("Stack is full");
return;
}
this.top += 1;
this.arr[this.top] = data;
}
public Integer pop() {
if (this.isEmpty()) {
System.out.println("Stack is empty");
return null;
}
int data = this.arr[this.top];
this.top -= 1;
return data;
}
public Integer peek() {
if (this.isEmpty()) {
System.out.println("Stack is empty");
return null;
}
return this.arr[this.top];
}
public void printStack() {
for (int i = 0; i <= this.top; i++) {
System.out.print(this.arr[i] + " ");
}
System.out.println();
}
}
public class Main {
public static void main(String[] args) {
MyStack2 myStack = new MyStack2(5);
System.out.println(myStack.isEmpty());
myStack.push(1);
myStack.push(2);
myStack.push(3);
myStack.push(4);
myStack.printStack();
System.out.println(myStack.peek());
myStack.printStack();
System.out.println(myStack.pop());
System.out.println(myStack.pop());
myStack.printStack();
}
}