본문 바로가기
자료구조와 알고리즘 (Java)

[자료구조][Java] 스택 (Stack)

by IGBR 2022. 4. 19.

1. 스택의 구조

  • 스택은 LIFO( Last-In , First-Out ) 또는 FILO(First-In , Last-Out) 데이터 관리 방식을 따름
    • LIFO : 마지막에 넣은 데이터를 가장 먼저 추출하는 데이터 관리 정책
    • FILO : 처음에 넣은 데이터를 가장 마지막에 추출하는 데이터 관리 정책 
  • 대표적인 스택의 활용
    • 컴퓨터 내부의 프로세스 구조의 함수 동작 방식
  • 일상 생활 속 스택의 활용
    • 연탄 구멍
    • 쌓아둔 책
  • 주요 기능
    • Push : 데이터를 스택에 추가
    • Pop : 데이터를 스택에서 꺼내기
  • 장단점 ( 배열을 사용해서 구현 한다 가정 )
    • 장점
      • 구조가 단순해서 구현이 쉽다.
      • 데이터 저장/ 읽기 속도가 빠르다.
    • 단점 (일반적인 스택 구현시)
      • 데이터 최대 갯수를 미리 정해야 한다.
      • 저장 공간의 낭비가 발생할 수 있음
        • 미리 최대 갯수 만큼 저장 공간을 확보 해야하기 때문.

 

2. Java에서 스택(Stack) 자료구조 사용하기

  • java.util 패키지에서 Stack 클래스 제공
    • push(아이템) : 아이템을 스택에 추가
    • pop( ) : 스택에서 마지막에 넣은 아이템을 리턴하고 , 해당 아이템은 Stack에서 삭제 

 

import java.util.Stack;

// 자료형 매개변수를 넣어서, 스택에 들어갈 데이터의 타입을 지정해야함
Stack<Integer> stack_int = new Stack<Integer>(); // Integer형 스택의 선언

 

  • 스택에 값 추가하기 push( 아이템 ) 메소드
stack_int.push(1);
stack_int.push(2);
stack_int.push(3);

 

  • 스택에서 값 추출하기 pop( ) 메소드
stack_int.pop(); // 스택에서 가장 마지막에 넣은 값 제거

 

3. Java에서 ArrayList 를 사용해서 직접 스택(Stack) 구현하기

 

import java.util.ArrayList;

public class MyStack<T> {

	private ArrayList<T> stack = new ArrayList<T>();
	
	public void push(T item) {
		stack.add(item);
	}
	
	public T pop() {
		if (stack.isEmpty()) {
			return null;
		} else {
			return stack.remove(stack.size()-1);
		}
	}
	
	public static void main(String[] args) {
		MyStack<Integer> ms = new MyStack<Integer>();
		ms.push(1);
		ms.push(2);
		System.out.println(ms.pop());
		ms.push(3);
		System.out.println(ms.pop());
		System.out.println(ms.pop());
	}	

}

댓글