스택과 큐(Stack & Queue)

Ouroboros·2023년 10월 21일
0

자료구조

목록 보기
3/13

1. ⚡Stack

Stack : (깔끔하게 정돈하여) 쌓다[포개다]; 쌓이다, 포개지다


▶️ 그림에서 보다시피, 같은 크기와 구조의 데이터를 정해진 방향으로만 쌓을 수 있다.

▶️ Top으로 정한 곳을 통해서만 접근할 수 있다.

  • Top의 가장 제일 위에 있는 자료는 가장 최신에 들어온 자료이다.

▶️ 'push' : 삽입되는 연산
  'pop' : 삭제되는 연산
▶️ 가장 마지막에 삽입된 자료가 가장 먼저 삭제된다.
= 후입선출 (LIFO, Last-In-First-Out)
▶️ Stack Underflow : 비어있는 스택에서 데이터를 추출하려고 할 때
  Stack Overflow : 스택에 데이터가 넘쳐날 때

✔️Stack의 활용 예시

  • 웹브라우저(뒤로가기) : 가장 나중에 열린 페이지부터 보여준다.
  • 실행취소(undo) : 가장 나중에 실행된 것부터 실행취소 된다.
  • 후위표기법
  • 재귀함수
  • 역순 문자열

2. 🎞️Queue

Queue : (무엇을 기다리는 사람·자동차 등의) 줄

▶️ 가장 먼저 온 자료가 가장 먼저 삭제된다.
= 선입선출 (FIFO, First-In-First-Out)
▶️ 'Front' : 삭제 연산만 실행되는 곳
  'Rear' : 삽입 연산만 실행되는 곳

  • 즉, 들어올 때는 Rear로 들어오지만, 나갈 때는 Front부터 빠진다.
  • 큐의 리어(Rear)에서 이루어지는 삽입연산을 인큐(enQueue),
    큐의 프론트(Front)에서 이루어지는 삭제연산을 디큐(deQueue)라고 한다.

✔️Queue의 활용 예시

데이터가 입력된 시간 순서대로 처리해야할 필요가 있을 상황에 사용된다

  • 프린터의 인쇄대기열
  • 은행업무
  • 콜센터 고객 대기시간
  • 프로세스 관리(JS 콜백 큐)

주석

1) 후위표기법 :
ex)
<후위 표기법으로 표시한 352*+의 계산 방법>
= (3+5*2)

  • 피연산자(숫자)는 스택에 넣는다. 그럼, 스택의 상태는 [3, 5, 2]이다.
  • 연산자를 만나면 스택에서 피연산자 두 개를 꺼내서 계산한다.
  • 연산자 를 만났으므로 스택에서 2와 5를 꺼내서 곱한다. 5 2 = 10
  • 결괏값을 스택에 저장한다. 이제 스택의 상태는 [3, 10]다.
  • 그다음에 연산자 +가 있으므로 스택에서 10과 3을 꺼내서 더한다. 답은 13이다.

2) 재귀함수 :
자신의 로직을 내부적으로 반복하다가, 일정한 조건이 만족되면 함수를 이탈하여 결과를 도출하는 것

def function(입력):
    if 입력 > 일정값: # 입력이 일정 값 이상이면
        return function(입력 - 1) # 입력보다 작은 값
    else:
        return 일정값, 입력값, 또는 특정값 # 재귀 호출 종료

참고자료

1) https://devuna.tistory.com/22
2) 그림 : https://wikidocs.net/198491

0개의 댓글