이 영역을 누르면 첫 페이지로 이동
codesche's blog 블로그의 첫 페이지로 이동

codesche's blog

페이지 맨 위로 올라가기

codesche's blog

[자료구조]스택(Stack), 큐(Queue)

  • 2022.12.23 22:49
  • 알고리즘 지식/자료구조

** 스택(Stack)

스택(stack)이란 데이터를 쌓아서 올려놓은 형태의 자료구조

ex) 책상에 쌓여있는 책, 싱크대의 접시

스택은 위의 그림과 같이 아래에서 위로 쌓는 형식이며 가장 최근에 들어온 자료를 top이라고 부른다. 뻥튀기를 꺼낼 때 가장 아래족의 뻥튀기를 꺼내려면 위에서부터 차례대로 뻥튀기를 꺼내야 하는 것처럼 가장 위쪽(최신)의 데이터부터 꺼낼 수 있으며 이러한 구조를 후입선출(LIFO, Last In First Out)의 구조라고 한다. 스택의 경우 자료의 삽입과 삭제는 한 곳(top)에서만 이루어진다.

만약 스택이 비어있을 때 자료를 꺼내려고 시도하면 스택 언더플로우(Stack Underflow)가 발생하고 반대로, 스택이 꽉 차있을 때 자료를 넣으려고 하면 스택 오버플로우(Stack Overflow)가 발생하게 된다.

스택의 활용 예시

  1. 웹 브라우저 뒤로가기 : 가장 나중에 열린 페이지부터 뒤로 가기 실행
  2. 문서작업에서 Ctrl + Z : 가장 나중에 수정한 내역부터 되돌림
  3. 역순 문자열 만들기 : 맨 끝의 문자열부터 차례대로 만들어짐
  4. 후위 표기법 계산
  5. 재귀적 알고리즘

 

** 큐(Queue)

큐(Queue)란 데이터들이 일렬로 줄 서서 기다리는 것을 연상하면 된다. 놀이기구를 기다리는 줄, 음식점 번호표 같은 것이 대표적인 예다. 정해진 곳(top)에서만 자료의 삽입과 삭제가 이루어지는 스택과는 다르게 큐는 Rear부분에서 자료의 삽입이, Front부분에서 자료의 삭제가 이루어진다. 비비탄 총의 탄창에 비비탄을 넣고 사격 시 가장 먼저 넣었던 비비탄이 먼저 나가는 것처럼 큐는 선입선출(FIFO, First In First Out)의 자료구조를 가진다.

 

 

큐의 활용 예시

  1. 은행창구 번호표 대기 : 빠른 번호표를 가진 사람이 먼저 업무를 본다.
  2. 프린터 출력 : 가장 먼저 대기열에 오른 프린트가 먼저 출력된다.
  3. 컴퓨터 운영체제의 테스크 스케쥴링 : 가장 간단한 형태의 선입선 처리 스케쥴링 저책
  4. 너비 우선 탐색(BFS) 알고리즘

'알고리즘 지식 > 자료구조' 카테고리의 다른 글

[자료구조]슬라이딩 윈도우 With 투 포인터  (0) 2022.12.26
[자료구조]브루트 포스  (2) 2022.12.25
[자료구조]투 포인터  (2) 2022.12.24
[자료구조] 배열(Array)  (0) 2022.12.23
소수(Prime Number) - 에라토스테네스의 체 (Java)  (0) 2022.12.18

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [자료구조]브루트 포스

    [자료구조]브루트 포스

    2022.12.25
  • [자료구조]투 포인터

    [자료구조]투 포인터

    2022.12.24
  • [자료구조] 배열(Array)

    [자료구조] 배열(Array)

    2022.12.23
  • 소수(Prime Number) - 에라토스테네스의 체 (Java)

    소수(Prime Number) - 에라토스테네스의 체 (Java)

    2022.12.18
다른 글 더 둘러보기

정보

codesche's blog 블로그의 첫 페이지로 이동

codesche's blog

  • codesche's blog의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (76)
    • Algorithm (15)
      • 백준 (3)
      • 프로그래머스 (10)
      • inflearn 알고리즘(Java) (2)
    • 블로그소개 (1)
    • Back-End (11)
      • Java (10)
      • SpringBoot (1)
    • Database (2)
      • MySQL (0)
      • MariaDB (1)
      • Redis (0)
      • 개념, 이론 (1)
    • Front-End (0)
      • html, css, javascript (0)
    • Git (2)
    • 알고리즘 지식 (11)
      • 자료구조 (11)
    • Study Cafe (21)
      • 기술면접 (6)
      • Clean Code 스터디 (14)
      • CS 스터디 (0)
      • 개발용어 (1)
    • 주간 에세이 (10)
    • DevOps (3)
      • 배포, Front&Back 연동 (1)
      • AWS (0)
      • Docker (1)
      • 이론 (1)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 자바 기초
  • 개발자 현실
  • java
  • 자료구조
  • 자바 변수
  • 주간에세이
  • 클린코드
  • git commit

나의 외부 링크

정보

The Code의 codesche's blog

codesche's blog

The Code

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © The Code. Designed by Fraccino.

티스토리툴바