슬라이드 1

Similar documents
슬라이드 1

Microsoft PowerPoint - 08-chap06-Queue.ppt

Microsoft PowerPoint - 08-Queue.ppt

슬라이드 1

o 스택 (stack) ~ 쌓아놓은더미 1. 스택의개요 - 2 -

04장.큐

Contents v 학습목표 자료구조큐에대한개념을스택과비교하여이해한다. 큐의특징과연산방법에대해알아본다. 순차표현방법을이용한큐와연결표현방법을이용한큐를구현해본다. 큐의응용방법을알아본다. v 내용 큐 큐의구현 큐의응용 2/74

03_queue

Microsoft PowerPoint - ch08_큐 [호환 모드]

슬라이드 1

06장.리스트

Chapter 4. LISTS

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

리스트 (list), 선형리스트 (linear list): 순서를가진항목들의모임 집합 : 항목간의순서의개념이없음 L = n ( item0, item1,..., item -1) l 리스트의예 l 요일 : ( 일요일, 월요일,, 토요일 ) l 한글자음의모임 : ( ㄱ, ㄴ

1장. 리스트

2. QUEUE OPERATIONS Initialize the queue Insert to the rear of the queue (also called as Enqueue) Remove (Delete) from the front of the queue (also ca

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

슬라이드 1

<4D F736F F F696E74202D20C1A637C0E52DB0EDB1DEBFACB0E1B8AEBDBAC6AE2E >

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

11장 포인터

Algorithms

Microsoft PowerPoint - 제4장-스택과큐.pptx

Chapter 4. LISTS

슬라이드 1

슬라이드 1

chap 5: Trees

슬라이드 1

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

슬라이드 1

Microsoft PowerPoint - 07-chap05-Stack.ppt

슬라이드 1

슬라이드 1

슬라이드 1

슬라이드 1

4장

슬라이드 1

C 언어 강의노트

PowerPoint 프레젠테이션

Algorithms

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - 06-List.ppt

untitled

중간고사 (자료 구조)

<BCBCB9CCB3AA20C0DAB7E1202D20BDBAC5C3C5A52E687770>

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

<4D F736F F F696E74202D20C0DAB7E1B1B8C1B65FC3E2BCAEBCF6BEF7>

Microsoft PowerPoint - 자료구조2008Chap06

1. 리스트개념 리스트 (list) 고정된길이의자료 ( 원소 ) 들을순차적으로나열해놓은집합을가르키는자료구조의추상적인개념 순서를가진항목들의모임 집합 (set) : 항목간의순서의개념이없음 리스트의예 요일 : ( 일요일, 월요일,, 토요일 ) 한글자음의모임 : (ᄀ,ᄂ,,ᄒ

리스트구현방법 배열 (array) 을이용하는방법 구현이간단 삽입, 삭제동작에따른원소이동. 항목의개수제한, 정적기억공간할당. 메모리낭비, 오버플로우 연결리스트 (linked list) 를이용하는방법 구현이복잡 삽입, 삭제가효율적 크기가제한되지않음 Lecture 03_Li

Chapter 4. LISTS

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

리스트연산, 검색 + 삽입 + 삭제 새로운항목을리스트의처음, 중간, 끝에추가. 기존의항목을리스트의임의의위치에서삭제. 모든항목을삭제. 기존항목을대치 (replace). 리스트가특정항목을가지고있는지를검색 (search). 리스트의특정위치의항목을반환. 리스트안의항목의개수를센

슬라이드 1

Microsoft PowerPoint - chap4_list

Chap 6: Graphs

슬라이드 1

Lab 3. 실습문제 (Single linked list)_해답.hwp

4장

PowerPoint 프레젠테이션

<4D F736F F F696E74202D FBFACB0E120C0DAB7E1B1B8C1B6205BC8A3C8AF20B8F0B5E55D>

Data structure: Assignment 1 Seung-Hoon Na October 1, Assignment 1 Binary search 주어진 정렬된 입력 파일이 있다고 가정하자. 단, 파일내의 숫자는 공백으로 구 분, file내에 숫자들은

Microsoft PowerPoint - ch07 - 포인터 pm0415

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

슬라이드 1

chap x: G입력

슬라이드 1

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

PowerPoint 프레젠테이션

슬라이드 1

Microsoft PowerPoint - 제11장 포인터(강의)

03장.스택

Microsoft PowerPoint - chap11-포인터의활용.pptx

5.스택(강의자료).key

q 이장에서다룰내용 1 연결자료구조방식 2 단순연결리스트 3 원형연결리스트 4 이중연결리스트 3 다항식의연결자료구조표현 2

11장 포인터

슬라이드 1

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

01장.자료구조와 알고리즘

슬라이드 1

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

ABC 10장

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

03장.스택.key

02장.배열과 클래스

Microsoft PowerPoint - 제11장 포인터

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

PowerPoint 프레젠테이션

데이터구조 (Chapter 3: Stacks and Queues) 2011 년봄학기 숙명여자대학교이과대학멀티미디어과학과박영호

슬라이드 1

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

chap01_time_complexity.key

PowerPoint 프레젠테이션

08장.트리

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

7장

PowerPoint 프레젠테이션

슬라이드 1

chap 5: Trees

Transcription:

CHAP 6: 큐 yicho@gachon.ac.kr 1

큐 (QUEUE) 큐 : 먼저들어온데이터가먼저나가는자료구조 선입선출 (FIFO: First-In First-Out) ( 예 ) 매표소의대기열 Ticket Box 전단 () 후단 () 2

큐 ADT 삽입과삭제는 FIFO 순서를따른다. 삽입은큐의후단에서, 삭제는전단에서이루어진다. 객체 : n 개의 element 형으로구성된요소들의순서있는모임 연산 : create() ::= 큐를생성한다. init(q) ::= 큐를초기화한다. is_empty(q) ::= 큐가비어있는지를검사한다. is_full(q) ::= 큐가가득찼는가를검사한다. enqueue(q, e) ::= 큐의뒤에요소를추가한다. dequeue(q) ::= 큐의앞에있는요소를반환한다음삭제한다. peek(q) ::= 큐에서삭제하지않고앞에있는요소를반환한다. 3

큐의응용 직접적인응용 시뮬레이션의대기열 ( 공항에서의비행기들, 은행에서의대기열 ) 통신에서의데이터패킷들의모델링에이용 프린터와컴퓨터사이의버퍼링 간접적인응용 스택과마찬가지로프로그래머의도구 많은알고리즘에서사용됨 생산자버퍼소비자 data QUEUE 4

배열을이용한큐 선형큐 : 배열을선형으로사용하여큐를구현 ( 그림 6-5,6-6) 삽입을계속하기위해서는요소들을이동시켜야함 문제점이많아사용되지않음 [-1] [0] [1] [2] [3] [4] [5] [-1] [0] [1] [2] [3] [4] [5] 원형큐 : 배열을원형으로사용하여큐를구현 [3] [2] [1] 5 [0] [MAX_SIZE-2] [MAX_SIZE-1]

큐의구조 큐의전단과후단을관리하기위한 2 개의변수필요 : 첫번째요소하나앞의인덱스 : 마지막요소의인덱스 3 4 2 B 5 1 A 6 0 7 6

3 4 3 4 2 5 2 5 1 6 1 A 6 0 7 0 7 (a) 초기상태 (b) A 삽입 3 4 3 4 2 B 5 2 B 5 1 A 6 1 6 0 7 0 7 7 (c) B 삽입 (d) A 삭제

공백상태, 포화상태 공백상태 : == 포화상태 : % M==(+1) % M 공백상태와포화상태를구별하기위하여하나의공간은항상비워둔다. 3 4 3 4 3 4 2 5 2 B C D E 5 2 B C D E 5 1 6 1 A G F 6 1 A H G F 6 0 7 0 7 0 7 (a) 공백상태 (b) 포화상태 (c) 오류상태 8

큐의연산 나머지 (modulo) 연산을사용하여인덱스를원형으로회전시킨다. // 공백상태검출함수 int is_empty(queuetype *q) { } return (q-> == q->); // 포화상태검출함수 int is_full(queuetype *q) { } return ((q->+1)%max_queue_size == q->); 9

큐의연산 10 나머지 (modulo) 연산을사용하여인덱스를원형으로회전시킨다. (p226-227) // 삽입함수 void enqueue(queuetype *q, element item) { } if( is_full(q) ) error(" 큐가포화상태입니다 "); q-> = (q->+1) % MAX_QUEUE_SIZE; q->queue[q->] = item; // 삭제함수 element dequeue(queuetype *q) { } if( is_empty(q) ) error(" 큐가공백상태입니다 "); q-> = (q->+1) % MAX_QUEUE_SIZE; return q->queue[q->];

연결된큐 연결된큐 (linked queue): 연결리스트로구현된큐 포인터는삭제와관련되며 포인터는삽입 는연결리스트의맨앞에있는요소를가리키며, 포인터는맨뒤에있는요소를가리킨다 큐에요소가없는경우에는 와 는 NULL A B NULL C D NULL 11

연결된큐에서의삽입과삭제 temp 프로그램 6.2 A B C D NULL 삽입 Rear 에서 A B C D NULL 프로그램 6.3 삭제 Front 에서 A B C D temp NULL 12 A B C D NULL

덱 (deque) 덱 (deque) 은 double-ended queue 의줄임말로서큐의전단 () 와후단 () 에서모두삽입과삭제가가능한큐 add_ add_ delete_ delete_ get_ 전단 () 후단 () get_ 13

덱 ADT 객체 : n 개의 element 형으로구성된요소들의순서있는모임 연산 : create() ::= 덱을생성한다. init(dq) ::= 덱을초기화한다. is_empty(dq) ::= 덱이공백상태인지를검사한다. is_full(dq) ::= 덱이포화상태인지를검사한다. add_(dq, e) ::= 덱의앞에요소를추가한다. add_(dq, e) ::= 덱의뒤에요소를추가한다. delete_(dq) ::= 덱의앞에있는요소를반환한다음삭제한다 delete_(dq) ::= 덱의뒤에있는요소를반환한다음삭제한다. get_(q) ::= 덱의앞에서삭제하지않고앞에있는요소를반환한다. get_(q) ::= 덱의뒤에서삭제하지않고뒤에있는요소를반환한다. 14

덱의연산 A C A B D add_(dq, A) add_(dq, D) A B A B D add_(dq, B) delete_(dq) C A B A B add_(dq, C) delete_(dq) 15

덱의구현 양쪽에서삽입, 삭제가가능하여야하므로일반적으로이중연결리스트사용 typedef int element; // 요소의타입 typedef struct DlistNode { element data; struct DlistNode *llink; struct DlistNode *rlink; } DlistNode; // 노드의타입 typedef struct DequeType { DlistNode *head; DlistNode *tail; } DequeType; // 덱의타입 16

덱에서의삽입연산 연결리스트의연산과유사 헤드포인터대신 head 와 tail 포인터사용 17

덱에서의삽입연산 void add_(dequetype *dq, element item) { } DlistNode *new_node = create_node(dq->tail, item, NULL); if( is_empty(dq)) dq->head = new_node; else dq->tail->rlink = new_node; dq->tail = new_node; 18

덱에서의삽입연산 // void add_(dequetype *dq, element item) { DlistNode *new_node = create_node(null, item, dq->head); } if( is_empty(dq)) else dq->tail = new_node; dq->head->llink = new_node; dq->head = new_node; 19

20 덱에서의삭제연산

덱에서의삭제연산 // 전단에서의삭제 element delete_(dequetype *dq) { element item; DlistNode *removed_node; 21 } if (is_empty(dq)) error(" 공백덱에서삭제 "); else { } removed_node = dq->head; // 삭제할노드 item = removed_node->data; // 데이터추출 dq->head = dq->head->rlink; // 헤드포인터변경 free(removed_node); // 메모리공간반납 if (dq->head == NULL) // 공백상태이면 dq->tail = NULL; else return item; // 공백상태가아니면 dq->head->llink=null;

덱에서의삭제연산 // 전단에서의삭제 element delete_(dequetype *dq) { element item; DlistNode *removed_node; 22 } if (is_empty(dq)) error(" 공백덱에서삭제 "); else { } removed_node = dq->tail; // 삭제할노드 item = removed_node->data; // 데이터추출 dq->tail = dq->tail->llink; // 헤드포인터변경 free(removed_node); // 메모리공간반납 if (dq->tail == NULL) // 공백상태이면 dq->head = NULL; else return item; // 공백상태가아니면 dq->tail->rlink=null;

큐의응용 : 버퍼 큐는서로다른속도로실행되는두프로세스간의상호작용을조화시키는버퍼역할을담당 CPU 와프린터사이의프린팅버퍼, 또는 CPU 와키보드사이의키 보드버퍼 대개데이터를생산하는생산자프로세스가있고데이터를소비하는소비자프로세스가있으며이사이에큐로구성되는버퍼가존재 23

큐의응용 : 시뮬레이션 큐잉이론에따라시스템의특성을시뮬레이션하여분석하는데이용 큐잉모델은고객에대한서비스를수행하는서버와서비스를받는고객들로이루어진다 은행에서고객이들어와서서비스를받고나가는과정을시뮬레이션 고객들이기다리는평균시간을계산 24