본문 바로가기

카테고리 없음

stack, queue, deque

stack

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

stack의 사용방법

  • Stack<Element> stack = new Stack<>();의 형식으로 인스턴스화 할 수 있다.
  • element에는 변수 타입을 지정한다.
  • stack.push(값)으로 스택에 값을 할당한다.
  • stack.pop()을 통해 가장 나중에 들어온 값을 제거한다.
  • stack.clear()를 통해 스택의 모든 값을 제거한다.
  • stack.peak()를 통해 가장 나중에 들어온 값을 반환한다.
  • stack.size()를 통해 저장된 양을 반환한다.
  • stack.empty()를 통해 비어있는 스택인지 반환한다.
  • stack.contains(값)을 통해 stack에 해당하는 값이 있는지 확인할 수 있다.

queue

  • util.queue와 util.LinkedList을 임포트 하여 사용할 수 있다.
  • queue은 자료를 저장하고, 가장 먼저 들어온 자료부터 반환한다.
  • queue의 사용 예시
    1. 먼저 들어간 자료가 먼저 나오는 구조 FIFO(First In FIrst Out) 구조
    2. 큐는 한 쪽 끝은 프런트(front)로 정하여 삭제 연산만 수행함
    3. 다른 한 쪽 끝은 리어(rear)로 정하여 삽입 연산만 수행함
    4. 그래프의 넓이 우선 탐색(BFS)에서 사용
    5. 컴퓨터 버퍼에서 주로 사용, 마구 입력이 되었으나 처리를 하지 못할 때, 버퍼(큐)를 만들어 대기 시킴

queue의 사용방법

  • Queue<Element> queue= new LinkedList<>();의 형식으로 인스턴스화 할 수 있다.
  • element에는 변수 타입을 지정한다.
  • queue.add(값) queue.offer(값)으로 큐에 값을 할당한다.
  • queue.poll(값)으로 큐의 첫 값을 반환하고 제거한다.
  • queue.peek()으로 큐의 첫 값을 반환한다.
  • queue.remove()으로 큐의 첫 값을 제거한다.
  • queue.clear()로 큐를 비운다.

deque

  • double-ended- queue의 줄임말이다.
  • 입력을 한 곳으로 제한한 덱을 scroll, 출력을 한 곳으로 제한한 덱을 shelf라고 한다.
  • util.deque와 여러 자료 형태을 임포트 하여 사용할 수 있다.
  • deque은 자료의 양 끝에서 접근, 추가가 가능하다
  • deque에 해당하는 자료 형태는 ArrayDeque, LinkedBlockingDeque, ConcurrentLinkedDeque, LinkedList 등이 있다.

deque의 사용방법

  • Deque<Element> queue= new 자료형<>();의 형식으로 인스턴스화 할 수 있다.
  • element에는 변수 타입을 지정한다.
  • deque.add()와 deque.offer()의 형태로 값을 추가할 수 있다.
    • add는 반환 값이 없고, 용량 초과시 예외 오류가 발생한다.
    • offer은 boolean반환값이 있고, 용량 초과시 false를 반환한다.
    • first와 last를 사용하여 추가 위치를 지정할 수 있다. 기본 값은 뒤부터 추가이다.
  • deque.poll(값)으로 큐의 첫 값을 반환하고 제거한다.
    • first와 laset를 사용하여 제거 위치를 지정할 수 있다. 기본 값은 앞부터 제거한다.
    • 덱이 빈 경우 예외 오류가 발생한다.
  • deque.remove()으로 큐의 첫 값을 제거한다.
    • first와 laset를 사용하여 제거 위치를 지정할 수 있다. 기본 값은 앞부터 제거한다.
    • 덱이 빈 경우 null의 형태로 반환된다.
  • deque.peek()으로 큐의 첫 값을 반환한다.
    • first와 laset를 사용하여 반환 위치를 지정할 수 있다. 기본 값은 앞부터 반환한다.
  • deque.get()으로 큐의 첫 값을 반환한다.
    • first와 laset를 사용하여 반환 위치를 지정할 수 있다. 기본 값이 없이 위치를 지정해야 사용 가능하다.
  • deque.removeFirstOccurence(값) : 덱을 앞부터 탐색하여 첫 값을 제거한다. 값이 없다면 동작하지 않는다.
  • deque.removeLastOccurence(값) : 덱을 뒤부터 탐색하여 첫 값을 제거한다. 값이 없다면 동작하지 않는다.
  • deque.addAll(자료) 입력 받은 컬렉션의 모든 데이터를 뒤부터 추가한다.
  • deque.contain(값) 덱이 값을 가지면 true를 반환한다.
  • deque.size() 덱의 크기를 반환한다.
  • deque.iterator(), descendingIterator() 덱의 앞/뒤부터 순차실행되는 이터레이터를 반환한다.
  • deque.clear()로 큐를 비운다.