SlideShare a Scribd company logo
1 of 41
Download to read offline
자료구조 – 큐 (Queue)
yarn
Stack
• Last in First out (LIFO)
• 마지막에 삽인 된 원소가 가장 먼저 삭제 되는 후입 선출 구조.
큐 (Queue)
• 스택과 마찬가지로 삽입과 삭제의 위치 방법이 제한된 순서리스트
• First in First out
• 하지만 스택과 다르게 먼저 삽입된 원소가 먼저 삭제.
큐의 구조
front
rear
큐의 선입 선출 구조
Queue
front
저장된 원소 중 첫번째 원소
rear
저장된 원소 중 마지막 원소
삭제 삽입
스택과 큐 삽입/삭제 연산 비교
삽입 연삽 삭제 연산
연산자 삽입 위치 연산자 삭제 위치
스택 push top pop top
큐 enQueue rear deQueue front
추상 자료형 큐
데이터 개 이상의 원소를 가진 유한 순서 리스트
연산 ∈ ∈
큐의 생성과 삽입 삭제 #공백 큐 생성
• createQueue()
Queue
front = rear = -1
[0] [1] [2]
큐의 생성과 삽입 삭제 # 원소 A 삽입
• enQueue(Q,A)
A
Queue
front = -1
[0] [1] [2]
rear
큐의 생성과 삽입 삭제 # 원소 B 삽입
• enQueue(Q,B)
A B
Queue
front = -1
[0] [1] [2]
rear
큐의 생성과 삽입 삭제 #원소 삭제
• deQueue(Q)
B
Queue [0] [1] [2]
rearfront
삭제된 위치로
이동
A 삭제
큐의 생성과 삽입 삭제 # 원소 C 삽입
• enQueue(Q,C)
B C
Queue
front
[0] [1] [2]
rear
큐의 생성과 삽입 삭제 #원소 삭제
• deQueue(Q)
C
Queue [0] [1] [2]
rearfront
B 삭제
큐의 생성과 삽입 삭제 #원소 삭제
• deQueue(Q)
Queue [0] [1] [2]
rearfront
C 삭제
순차 자료구조를 이용한 큐 구현
• 배열의 크기는 큐의 크기
• 첫번째 원소의 index를 저장할 front 변수
• 마지막 원소의 index를 저장할 rear 변수
• 초기 공백 큐의 상태는 front = rear = -1
초기 공백 큐 생성 알고리즘
공백/포화 큐 검사 알고리즘
삽입 알고리즘
삭제 알고리즘
탐색 알고리즘
배열 구조의 큐 문제점
• 1차원 배열을 사용한 자료구조에서는 큐가 포화 상태가 아닐 경우 삽
입연산을 수행하도록 정의.
• 포화 상태를 확인하기 위해서 rear가 마지막 index인지 체크.
• 하지만 rear가 마지막 배열에 있어도 앞 index에 빈자리가 있어도
포화상태로 인식 하고 삽입연산을 수행하지 않음.
• 빈자리를 사용하려면 앞부분을 옮겨야 함.
• 이러한 문제를 해결하기 위해 원형 큐를 사용.
포화 상태로 잘못 인식하는 큐
Queue [0] [1] [2]
rearfront
Queue [0] [1] [2]
rearfront
원형 큐
공백 원형 큐 생성 알고리즘
원형 큐의 공백 상태 검사 알고리즘
원형 큐의 삽입 알고리즘
원형 큐의 삭제 알고리즘
원형 큐의 삽입/삭제 연산 과정 #생성
[1] [2]
[3][0]
rearfront
createQueue();
front <- 0
rear <- 0
원형 큐의 삽입/삭제 연산 과정 #삽입1
A
[1] [2]
[3][0]
rear
front
enQueue(cQ, A);
rear <-(0+1) mod 4
cQ[1] <- A
원형 큐의 삽입/삭제 연산 과정 #삽입2
BA
[1] [2]
[3][0]
rear
front
enQueue(cQ, B);
rear <-(0+1) mod 4
cQ[2] <- B
원형 큐의 삽입/삭제 연산 과정 #삭제
B
[1] [2]
[3][0]
rearfront
deQueue(cQ);
front(0+1) mod 4
return cQ(1);
원형 큐의 삽입/삭제 연산 과정 #삽입3
B
C
[1] [2]
[3][0]
rear
front
enQueue(cQ, C);
rear<-(2+1) mod 4
cQ[3] <- C;
원형 큐의 삽입/삭제 연산 과정 #삽입4
B
CD
[1] [2]
[3][0]
rear
front
enQueue(cQ, D);
rear<-(3+1) mod 4
cQ[4] <- D;
연결 큐 (Linked List Queue)
• 순차 자료 구조는 사용크기 제한과 원소가 없을 때도 그 크기를 유지해야
하는 단점.
• 그 부분을 극복하기 위해서 연결 자료구조를 이용.
A 200
100번지
B 300
200번지
c null
300번지
front rear
초기 공백 연결 큐 생성 알고리즘
공백 연결 큐 검사 알고리즘
연결 큐의 삽입 알고리즘
연결 큐의 삭제 알고리즘 #1
연결 큐의 삭제 알고리즘 #2
연결 큐의 검색 알고리즘
덱 (Deque)
• Deque , Double-ended queue
• 큐의 양쪽 끝에서 삽입과 삭제가 모두 발생 할 수 있는 큐
deque
front
저장된 원소 중 첫번째 원소
rear
저장된 원소 중 마지막 원소
삭제
삽입삽입
삭제

More Related Content

Similar to 자료구조 큐

데이터 분석 3 - Java Collection Framework와 ArrayList
데이터 분석 3 - Java Collection Framework와 ArrayList데이터 분석 3 - Java Collection Framework와 ArrayList
데이터 분석 3 - Java Collection Framework와 ArrayListJaewook Byun
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율S.O.P.T - Shout Our Passion Together
 
데이터 분석 6 - 나만의 배열 기반 LIST, MyLinkedList를 만들어보자
데이터 분석 6 - 나만의 배열 기반 LIST, MyLinkedList를 만들어보자데이터 분석 6 - 나만의 배열 기반 LIST, MyLinkedList를 만들어보자
데이터 분석 6 - 나만의 배열 기반 LIST, MyLinkedList를 만들어보자Jaewook Byun
 
[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search TreeBill Kim
 
[Swift] Data Structure - Stack
[Swift] Data Structure - Stack[Swift] Data Structure - Stack
[Swift] Data Structure - StackBill Kim
 
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기Jaewook Byun
 
데이터 분석 4 - 나만의 배열 기반 LIST, MyArrayList를 만들어보자
데이터 분석 4 - 나만의 배열 기반 LIST, MyArrayList를 만들어보자데이터 분석 4 - 나만의 배열 기반 LIST, MyArrayList를 만들어보자
데이터 분석 4 - 나만의 배열 기반 LIST, MyArrayList를 만들어보자Jaewook Byun
 
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용 [GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용 Sehyeon Nam
 

Similar to 자료구조 큐 (11)

데이터 분석 3 - Java Collection Framework와 ArrayList
데이터 분석 3 - Java Collection Framework와 ArrayList데이터 분석 3 - Java Collection Framework와 ArrayList
데이터 분석 3 - Java Collection Framework와 ArrayList
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
 
데이터 분석 6 - 나만의 배열 기반 LIST, MyLinkedList를 만들어보자
데이터 분석 6 - 나만의 배열 기반 LIST, MyLinkedList를 만들어보자데이터 분석 6 - 나만의 배열 기반 LIST, MyLinkedList를 만들어보자
데이터 분석 6 - 나만의 배열 기반 LIST, MyLinkedList를 만들어보자
 
[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree
 
2012 Ds 02
2012 Ds 022012 Ds 02
2012 Ds 02
 
[Swift] Data Structure - Stack
[Swift] Data Structure - Stack[Swift] Data Structure - Stack
[Swift] Data Structure - Stack
 
Blocking queue
Blocking queueBlocking queue
Blocking queue
 
자료구조02
자료구조02자료구조02
자료구조02
 
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기
 
데이터 분석 4 - 나만의 배열 기반 LIST, MyArrayList를 만들어보자
데이터 분석 4 - 나만의 배열 기반 LIST, MyArrayList를 만들어보자데이터 분석 4 - 나만의 배열 기반 LIST, MyArrayList를 만들어보자
데이터 분석 4 - 나만의 배열 기반 LIST, MyArrayList를 만들어보자
 
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용 [GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
 

More from Choonghyun Yang

Maven build for 멀티프로젝트 in jenkins
Maven build for 멀티프로젝트 in jenkins Maven build for 멀티프로젝트 in jenkins
Maven build for 멀티프로젝트 in jenkins Choonghyun Yang
 
데이터 모델링
데이터 모델링데이터 모델링
데이터 모델링Choonghyun Yang
 
Spring boot 5장 cli
Spring boot 5장 cliSpring boot 5장 cli
Spring boot 5장 cliChoonghyun Yang
 
Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Choonghyun Yang
 
자료구조 – 트리 (Tree)
자료구조 – 트리 (Tree)자료구조 – 트리 (Tree)
자료구조 – 트리 (Tree)Choonghyun Yang
 
자바병렬프로그래밍 9.gui 애플리케이션
자바병렬프로그래밍 9.gui 애플리케이션자바병렬프로그래밍 9.gui 애플리케이션
자바병렬프로그래밍 9.gui 애플리케이션Choonghyun Yang
 
그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조Choonghyun Yang
 
Http 완벽가이드(3장 http 메시지)
Http 완벽가이드(3장 http 메시지)Http 완벽가이드(3장 http 메시지)
Http 완벽가이드(3장 http 메시지)Choonghyun Yang
 
Http 완벽 가이드(2장 url과 리소스)
Http 완벽 가이드(2장 url과 리소스)Http 완벽 가이드(2장 url과 리소스)
Http 완벽 가이드(2장 url과 리소스)Choonghyun Yang
 
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 aChoonghyun Yang
 
다중성 확보, 시스템 안정화
다중성 확보, 시스템 안정화다중성 확보, 시스템 안정화
다중성 확보, 시스템 안정화Choonghyun Yang
 

More from Choonghyun Yang (20)

Git
GitGit
Git
 
Maven build for 멀티프로젝트 in jenkins
Maven build for 멀티프로젝트 in jenkins Maven build for 멀티프로젝트 in jenkins
Maven build for 멀티프로젝트 in jenkins
 
데이터 모델링
데이터 모델링데이터 모델링
데이터 모델링
 
Spring boot actuator
Spring boot   actuatorSpring boot   actuator
Spring boot actuator
 
Spring boot 5장 cli
Spring boot 5장 cliSpring boot 5장 cli
Spring boot 5장 cli
 
Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)
 
자료구조 – 트리 (Tree)
자료구조 – 트리 (Tree)자료구조 – 트리 (Tree)
자료구조 – 트리 (Tree)
 
연결 자료구조
연결 자료구조연결 자료구조
연결 자료구조
 
자바병렬프로그래밍 9.gui 애플리케이션
자바병렬프로그래밍 9.gui 애플리케이션자바병렬프로그래밍 9.gui 애플리케이션
자바병렬프로그래밍 9.gui 애플리케이션
 
그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조
 
Http 완벽가이드(3장 http 메시지)
Http 완벽가이드(3장 http 메시지)Http 완벽가이드(3장 http 메시지)
Http 완벽가이드(3장 http 메시지)
 
Http 완벽 가이드(2장 url과 리소스)
Http 완벽 가이드(2장 url과 리소스)Http 완벽 가이드(2장 url과 리소스)
Http 완벽 가이드(2장 url과 리소스)
 
게이트단의 보안
게이트단의 보안게이트단의 보안
게이트단의 보안
 
Express 프레임워크
Express 프레임워크Express 프레임워크
Express 프레임워크
 
Bootstrap
BootstrapBootstrap
Bootstrap
 
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a
 
하둡관리
하둡관리하둡관리
하둡관리
 
Hadoop io part2
Hadoop io part2Hadoop io part2
Hadoop io part2
 
Atom
AtomAtom
Atom
 
다중성 확보, 시스템 안정화
다중성 확보, 시스템 안정화다중성 확보, 시스템 안정화
다중성 확보, 시스템 안정화
 

자료구조 큐