스택
은 데이터를 차곡차곡 쌓아 올린 형태의 자료구조입니다.
그래서 마지막에 삽입된 데이터가 먼저 삭제되는 구조를 가지고 있습니다.
쌓여있는 접시를 생각하면 이해가 쉽습니다. 가장 위에 접시를 올리고, 가장 위에 접시를 먼저 사용합니다.
참고로 스택은 힙 메모리 영역에서 일반적인 데이터를 저장하는 스택과, 스택 영역 메모리에서 프로그램의 변수와 같은 정보를 저장하는 스택으로 나뉩니다.
LIFO (Last In First Out)
Stack OverFlow
다.import java.util.Stack; Stack<Integer> stack = new Stack<>();; //push for (int i=0; i<5; i++) { stack.push(i); } System.out.println(stack); //[0, 1, 2, 3, 4] //peek System.out.println(stack.peek()); //4 //pop stack.pop(); System.out.println(stack.peek()); //3 //search System.out.println(stack.search(3)); //1 //empty System.out.println(stack.empty()); //false
import java.util.Arrays; public class ArrayStack { private int top; private int size; private String[] stack; public ArrayStack(int size) { this.top = -1; this.size = size; this.stack = new String[size]; } public void push(String item) { if (top == size - 1) { System.out.println("Stack is full"); } else { stack[++top] = item; } } public void pop() { if (!empty()){ stack[top--] = ""; } } public String peek() { if (empty()) { return ""; } else { return stack[top]; } } public String search(int index) { if (empty()) { return ""; } else { return stack[size - index - 1]; } } public boolean empty() { return (top == -1); } public static void main(String[] args) { int size = 5; ArrayStack arrayStack = new ArrayStack(size); //push arrayStack.push("A"); arrayStack.push("B"); arrayStack.push("C"); arrayStack.push("D"); arrayStack.push("E"); System.out.println(Arrays.toString(arrayStack.stack)); //[A, B, C, D, E] //peek System.out.println(arrayStack.peek()); //E //pop arrayStack.pop(); System.out.println(arrayStack.peek()); //D //search System.out.println(arrayStack.search(3)); //B //empty System.out.println(arrayStack.empty()); //false } }