스택(Stack)
- 자료구조 중 하나
- LIFO(Last-In-First-Out)의 후입 선출구조
- 대표적인 예 : 브라우저, 후위표기의 수식 계산, 하이노탑
push : 데이터 삽입
pop : 데이터 삭제
peak : top이 가리키는 데이터를 읽는 작업
Stack 클래스
package com.company;
public class Stack {
private int top;
private int maxSize;
private Object[] stackArray;
//스택 생성, 스택의 최대 크기로 생성
public Stack(int maxSize) {
this.maxSize = maxSize;
this.stackArray = new Object[maxSize];
this.top = -1; // top은 -1로 초기화
}
//스택이 비었는지 체크
public boolean empty() {
return (top == -1);
}
//스택이 꽉찼는지 체크
public boolean full() {
return (top == maxSize-1);
}
//스택에 item 입력
public boolean push(Object item) {
if(full()) {
System.out.println("꽉 찼습니다.");
return false;
}
stackArray[++top] = item;
return true;
}
//스택의 가장 위의 데이터 제거
public Object pop() {
if(empty()) {
System.out.println("비었습니다.");
return false;
} else {
Object item = stackArray[top];
stackArray[top] = null;
top--;
return item;
}
}
//스택 출력
public void printStack(Stack stack) {
if(top != -1) {
for(int i=top; i<=top; i--) {
if(i == -1) {
break;
}
System.out.println(" | " + stackArray[i] + " | ");
System.out.println("----------");
}
}else {
System.out.println("비어있음");
}
}
}
Main 클래스
package com.company;
import java.util.Scanner;
public class Main {
public static void menu() {
System.out.println("1. push");
System.out.println("2. pop");
System.out.println("3. stack");
System.out.println("Q. 종료");
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
Stack stack = new Stack(T);
boolean flag = true;
while (flag) {
menu();
String s = sc.next();
switch (s) {
case "1":
System.out.print("Push : ");
String data = sc.next();
stack.push(data);
break;
case "2":
System.out.print("Pop : " + stack.pop());
break;
case "3":
stack.printStack(stack);
break;
case "Q":
case "q":
flag = false;
break;
}
}
}
}
출력 결과
'5. 알고리즘 > 5_2 실전' 카테고리의 다른 글
[알고리즘] JAVA 큐(Queue) 알고리즘 (0) | 2020.02.19 |
---|---|
[알고리즘] 실제 스택(Stack)사용 예제 자바(JAVA) (0) | 2020.02.19 |
[알고리즘] JAVA 계수 정렬 (Counting Sort) 알고리즘 (0) | 2020.02.17 |
[알고리즘] JAVA 힙 정렬 (Heap Sort) 알고리즘 (0) | 2020.02.16 |
[알고리즘] JAVA 병합 정렬 (Merge Sort) 알고리즘 (0) | 2020.02.15 |