JAVA

[JAVA] 스택 / 큐

728x90

Stack

자료 구조 중 하나인 Stack의 사전적 정의는 '쌓다', '더미'입니다. 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료 구조라고 할 수 있습니다. Stack의 가장 큰 특징은 나중에 들어간 것이 먼저 나오는 (Last In First Out)의 형태를 띈다는 것입니다. 이 방식을 가진 자료구조인 Stack을 활용하여 다양한 문제를 해결할 수 있습니다. 자바에서 Stack은 java.util.Stack을 import하면 바로 사용할 수 있습니다.

 

1. 먼저 들어간 자료가 나중에 나옴 LIFO(Last In First Out) 구조
2. 시스템 해킹에서 버퍼오버플로우 취약점을 이용한 공격을 할 때 스택 메모리의 영역에서 함 
3. 인터럽트처리, 수식의 계산, 서브루틴의 복귀 번지 저장 등에 쓰임
4. 그래프의 깊이 우선 탐색(DFS)에서 사용
5. 재귀적(Recursion) 함수를 호출 할 때 사용

 

메서드

  • pop(): 스택에서 가장 위에 있는 항목을 제거한다.
  • push(item): item 하나를 스택의 가장 윗 부분에 추가한다.
  • peek(): 스택의 가장 위에 있는 항목을 반환한다.
  • isEmpty(): 스택이 비어 있을 때에 true를 반환한다.
  • size() : 스택의 크기를 반환한다.
  • contains(int value) : stack의 값을 search하는 함수
  • clear() : 스택에 있는 모든 값을 제거한다.

구현

1. Array Stack 배열

2. Linked연결 리스트

 


스택(Stack) 구현

import java.util.*;

public class test {
    public static void main(String[] args) {
        Stack<Integer> s = new Stack<>();

        // 삽입(5) - 삽입(2) - 삽입(3) - 삽입(7) - 삭제() - 삽입(1) - 삽입(4) - 삭제()
        s.push(5);
        s.push(2);
        s.push(3);
        s.push(7);
        s.pop();
        s.push(1);
        s.push(4);
        s.pop();

        // 스택의 최상단 원소부터 출력
        while (!s.empty()){
            System.out.print(s.peek() + " ");	//peek() 메서드 사용
            s.pop();
        }
    }
}

실행결과

1 3 2 5

 

큐(Queue) 구현

import java.util.*;

public class test {
    public static void main(String[] args) {
        Queue<Integer> q = new LinkedList<>();

        // 삽입(5) - 삽입(2) - 삽입(3) - 삽입(7) - 삭제() - 삽입(1) - 삽입(4) - 삭제()
        q.offer(5);
        q.offer(2);
        q.offer(3);
        q.offer(7);
        q.poll();
        q.offer(1);
        q.offer(4);
        q.poll();

        // 먼저 들어온 원소부터 추출
        while (!q.isEmpty()){
            System.out.print(q.poll() + " ");
        }
    }
}

실행결과

3 7 1 4 

 

 

 

728x90

'JAVA' 카테고리의 다른 글

How to Convert CamelCase to UnderScore & UnderScore to CamelCase  (1) 2023.01.14
[JAVA] 비트 연산자 정리  (0) 2021.04.06