본문으로 바로가기

  

 

스택(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;
            }
        }

    }
}

 

출력 결과