Stack, Queue

DEV_HOYA·2023년 10월 10일
0
post-thumbnail

📌 스택(Stack)

⭐ 개념

  • top에서는 가장 위에있는 자료를 가리키고 있음
  • 스택에서 자료를 삽입, 삭제할때는 top을 이용
  • 삽입하는 연산 : push
  • 삭제하는 연산 : pop
  • LIFO구조(Last In First Out)
  • 스택이 꽉차있을때 삽입하는 경우 : stack overflow
  • 스택이 비어있을때 삭제하는 경우 : stack underflow

⭐ 활용예시

  • 웹 브라우저 방문기록
  • 역순 문자열 만들기
  • 실행 취소
  • 후위표기법 계산
  • 수식의 괄호검사
  • DFS
  • 재귀함수

⭐ 메소드

Stack<Integer> stack = new Stack<>();
// push, add : 데이터 추가
stack.push(1);
stack.add(2);

// peek : 스택의 마지막 요소 출력
stack.peek();

// pop : 스택의 마지막 요소 반환 + 제거
stack.pop();

// isEmpty : 스택이 비어있는지의 여부, 비어있으면 true, 값이있으면 false
stack.isEmpty();

// clear : 스택의 전체값 초기화
stack.clear();

// size : 스택의 크기
stack.size();

// contains : 스택에 특정값 있는지 확인, 있으면 true
stack.contains(1);

📌 큐(Queue)

⭐ 개념

  • 큐의 가장 첫 원소를 front / 가장 끝 원소를 rear
  • 삭제연산은 front
  • 삽입연산은 rear
  • 접근은 front, rear로만 가능
  • FIFO방식(First In First Out)

⭐ 활용예시

  • BFS
  • 프로세스 관리
  • 프린터 인쇄 대기열

⭐ 메소드

Queue<Integer> queue = new LinkedList<>();

// add, offer : 데이터 추가
queue.add(1)
queue.offer(2);

// peek : 가장 먼저 들어간 값 조회
queue.peek();

// poll : 큐의 첫번째 요소 반환 + 제거
queue.poll();

// isEmpty : 큐가 비어있는지의 여부, 비어있으면 true, 값이있으면 false
queue.isEmpty();

// clear : 큐의 전체값 초기화
queue.clear();

// size : 큐의 크기
queue.size();

// contains : 큐에 특정값 있는지 확인, 있으면 true
queue.contains(1);

⭐ 질문

❓ 왜 Queue는 LinkedList로 구현하나?

  • Queue 자료구조는 삽입삭제가 빈번하므로 LinkedList를 사용한다.

📌 우선순위 큐(Priority Queue)

⭐ 개념

  • 들어가는 순서와는 상관없이 우선순위가 높은 데이터가 먼저 나가는 자료구조
  • 디폴트는 낮은숫자가 우선순위가 제일 높다.
//낮은 숫자가 우선 순위인 int 형 우선순위 큐 선언
PriorityQueue<Integer> priorityQueueLowest = new PriorityQueue<>();

//높은 숫자가 우선 순위인 int 형 우선순위 큐 선언
PriorityQueue<Integer> priorityQueueHighest = new PriorityQueue<>(Collections.reverseOrder());

⭐ 메소드

PriorityQueue<Integer> pqueue = new PriorityQueue<>();

// add, offer : 데이터 추가
pqueue.add(1);
pqueue.offer(2);

// poll : 우선순위가 제일높은 값 반환, 디폴트는 제일 낮은숫자
pqueue.poll();

// isEmpty : 큐가 비어있는지의 여부, 비어있으면 true, 값이있으면 false
pqueue.isEmpty();

// clear : 큐 초기화
pqueue.clear();

// size : 큐의 사이즈 반환
pqueue.size();

0개의 댓글