03_queue

Similar documents
슬라이드 1

슬라이드 1

슬라이드 1

Chapter 4. LISTS

Microsoft PowerPoint - 08-Queue.ppt

Microsoft PowerPoint - 08-chap06-Queue.ppt

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

01_List

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

06장.리스트

04장.큐

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

chap01_time_complexity.key

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

1장. 리스트

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

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

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

chap 5: Trees

Microsoft PowerPoint - ch08_큐 [호환 모드]

Chapter 4. LISTS

03장.스택.key

ABC 10장

untitled

Chapter 06. 스택(Stack)

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

Algorithms

슬라이드 1

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

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

chap x: G입력

Chap 6: Graphs

05_tree

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

PowerPoint 프레젠테이션

Microsoft PowerPoint - 자료구조2008Chap06

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

중간고사 (자료 구조)

Chapter 4. LISTS

Algorithms

11장 포인터

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

C 언어 강의노트

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

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

K&R2 Reference Manual 번역본

CompareAndSet(CAS) 함수는 address 주소의값이 oldvalue 인지비교해서같으면 newvalue 로 바꾼다. 소프트웨어 lock 을사용하는것이아니고, 하드웨어에서제공하는기능이므로더빠르고 간편하다. X86 에서는 _InterlockedCompareEx

슬라이드 1

PowerPoint 프레젠테이션

02장.배열과 클래스

PowerPoint Template

<4D F736F F F696E74202D20C1A637C0E52DB0EDB1DEBFACB0E1B8AEBDBAC6AE2E >

<BCBCB9CCB3AA20C0DAB7E1202D20BDBAC5C3C5A52E687770>

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

Lab 5. 실습문제 (Double linked list)-1_해답.hwp

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

PowerPoint 프레젠테이션

Microsoft PowerPoint - 07-chap05-Stack.ppt

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

PowerPoint 프레젠테이션

슬라이드 1

7장

4장

PowerPoint 프레젠테이션

슬라이드 1

윤성우의 열혈 TCP/IP 소켓 프로그래밍

슬라이드 1

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

슬라이드 1

슬라이드 1

Chap 6: Graphs

슬라이드 1

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - chap-11.pptx

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

슬라이드 1

슬라이드 1

Chapter 08. 트리(Tree)

슬라이드 1

chap x: G입력


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

슬라이드 1

untitled

08장.트리

<4D F736F F F696E74202D FBFACB0E120C0DAB7E1B1B8C1B6205BC8A3C8AF20B8F0B5E55D>

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

슬라이드 1

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

Microsoft PowerPoint - chap4_list

Chap 6: Graphs

09_hash

Microsoft PowerPoint - 06-List.ppt

슬라이드 1

슬라이드 1

11장 포인터

Microsoft PowerPoint - 05-chap03-ArrayAndPointer.ppt

설계란 무엇인가?

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

Transcription:

Queue Data Structures and Algorithms

목차 큐의이해와 ADT 정의 큐의배열기반구현 큐의연결리스트기반구현 큐의활용 덱 (Deque) 의이해와구현 Data Structures and Algorithms 2

큐의이해와 ADT 정의 Data Structures and Algorithms 3

큐 (Stack) 의이해와 ADT 정의 큐는 LIFO(Last-in, First-out) 구조 의자료구조 먼저들어간것이먼저나오는구조 큐의기본연산 Enqueue: 큐에데이터를넣는연산 Dequeu: 큐에서데이터를꺼내는연산 Data Structures and Algorithms 4

큐의 ADT 정의 배열또는연결리스트기반큐 enqueue 연산 dequeue 연산 peek 연산 Data Structures and Algorithms 5

큐의배열기반구현 Data Structures and Algorithms 6

큐의동작 enqueue 연산 큐의꼬리 (R) 을한칸이동후새데이터저장 dequeue 연산 큐의머리 (F) 가가리키는데이터반환후 F 를한칸이동 Data Structures and Algorithms 7

배열기반큐의문제점 Dequeue 동작으로배열이비더라도인덱스이상증가불가 데이터추가를위해 R 을인덱스 0 위치로이동해야함 Data Structures and Algorithms 8

원형큐 배열의머리와끝을연결한구조 Data Structures and Algorithms 9

원형큐의단순한연산 R 이이동한다음에데이터저장 F 가가리키는데이터반환후 F 이동 Data Structures and Algorithms 10

원형큐의단순한연산의문제점 full empty Data Structures and Algorithms 11

원형큐의문제점해결 초기화 : F 와 R 이같은위치를가리킴 R 이 F 를가리키려고하면 Full Data Structures and Algorithms 12

원형큐의구현 : 헤더파일 #define QUE_LEN 100 typedef int Data; typedef struct _cqueue int front; int rear; Data quearr[que_len]; } CQueue; quearr typedef CQueue Queue; void QueueInit(Queue * pq); int QIsEmpty(Queue * pq); void Enqueue(Queue * pq, Data data); Data Dequeue(Queue * pq); Data QPeek(Queue * pq); Data Structures and Algorithms 13

원형큐의구현 : Helper Function 큐의연산에의해서 F(front) 와 R(rear) 이이동할때이동해야할위치를알려주는함수 int NextPosIdx(int pos) if(pos == QUE_LEN-1) return 0; else return pos+1; } Data Structures and Algorithms 14

원형큐의구현 : 함수정의 1 void QueueInit(Queue * pq) pq->front = 0; pq->rear = 0; } int QIsEmpty(Queue * pq) if(pq->front == pq->rear) return TRUE; else return FALSE; } Data Structures and Algorithms 15

원형큐의구현 : 함수정의 2 void Enqueue(Queue * pq, Data data) // rear 이동후데이터저장 if(nextposidx(pq->rear) == pq->front) printf("queue Memory Error!"); exit(-1); } } pq->rear = NextPosIdx(pq->rear); pq->quearr[pq->rear] = data; Data Dequeue(Queue * pq) if(qisempty(pq)) printf("queue Memory Error!"); exit(-1); } // front 이동후데이터반환 pq->front = NextPosIdx(pq->front); return pq->quearr[pq->front]; } Data Structures and Algorithms 16

큐의연결리스트기반구현 Data Structures and Algorithms 17

연결리스트기반큐의헤더파일 연결리스트기반스택의응용 typedef int Data; typedef struct _node Data data; struct _node * next; } Node; void QueueInit(Queue * pq); int QIsEmpty(Queue * pq); void Enqueue(Queue * pq, Data data); Data Dequeue(Queue * pq); Data QPeek(Queue * pq); typedef struct _lqueue Node * front; Node * rear; } LQueue; typedef LQueue Queue; Data Structures and Algorithms 18

연결리스트기반큐의구현 : 초기화 void QueueInit(Queue * pq) pq->front = NULL; pq->rear = NULL; } int. QIsEmpty(Queue * pq) if(pq->front == NULL) return TRUE; else return FALSE; } Data Structures and Algorithms 19

연결리스트기반큐의구현 : enqueue void Enqueue(Queue * pq, Data data) Node * newnode = (Node*)malloc(sizeof(Node)); newnode->next = NULL; newnode->data = data; } if(qisempty(pq)) pq->front = newnode; pq->rear = newnode; } else pq->rear->next = newnode; pq->rear = newnode; } F 와 R 변경 R 만변경 enqueue enqueue Data Structures and Algorithms 20

연결리스트기반큐의구현 : dequeue F 가다음노드를가리킴, 이전노드삭제 F 가다음노드를가리킴, 이전노드삭제 R 은 no-operation Data Structures and Algorithms 21

연결리스트기반큐의구현 : dequeue 정의 Data Dequeue(Queue * pq) Node * delnode; Data retdata; if(qisempty(pq)) printf("queue Memory Error!"); exit(-1); } enqueue delnode = pq->front; retdata = delnode->data; // F 가다음노드를가리킴 pq->front = pq->front->next; } free(delnode); // 노드삭제 return retdata; Data Structures and Algorithms 22

큐의활용 Data Structures and Algorithms 23

주제 점심시간 1 시간동안에고객이 15 초당 1 명씩주문 종류별햄버거를만드는데걸리는시간 치즈버거 -12 초 불고기버거 -15 초 더블버거 -24 초 시뮬레이션 : 대기의길이를결정하는데필요한정보확보 시뮬레이션을통해서추출된정보의형태! 수용인원이 30 명인공간안정적으로고객을수용할확률 50% 수용인원이 50 명인공간안정적으로고객을수용할확률 70% 수용인원이 100 명인공간안정적으로고객을수용할확률 90% 수용인원이 200 명인공간안정적으로고객을수용할확률 100% Data Structures and Algorithms 24

시뮬레이션예제 점심시간은 1 시간이고그동안고객은 15 초에 1 명씩주문 한명의고객은하나의버거만을주문 주문하는메뉴에는가중치없음 모든고객은무작위로메뉴선택 햄버거를만드는사람은 1 명이다. 그리고동시에둘이상의버거가만들지않음 주문한메뉴를받을다음고객은대기실에서나와서대기 실행결과 1 실행결과 2 Data Structures and Algorithms 25

덱 (Deque) 의이해와구현 Data Structures and Algorithms 26

덱 (Deque, double ended queue) 덱은양방향으로 enqueue 와 dequeue 가되는자료구조 스택과큐의특성을모두갖음 덱을스택과큐로활용 덱의 4 가지연산 앞으로넣기 앞에서빼기 뒤에서빼기 뒤에서넣기 Data Structures and Algorithms 27

덱의 ADT Data Structures and Algorithms 28

덱의구현 : 헤더파일정의 Dequeu.h typedef int Data; typedef struct _node // 양방향리스트 Data data; struct _node * next; struct _node * prev; } Node; typedef struct _dldeque // 앞뒤연산 Node * head; Node * tail; } DLDeque; typedef DLDeque Deque; void DequeInit(Deque * pdeq); int DQIsEmpty(Deque * pdeq); void DQAddFirst(Deque * pdeq, Data data); void DQAddLast(Deque * pdeq, Data data); Data DQRemoveFirst(Deque * pdeq); Data DQRemoveLast(Deque * pdeq); Data DQGetFirst(Deque * pdeq); Data DQGetLast(Deque * pdeq); Data Structures and Algorithms 29

덱의구현 : 함수의정의 양방향연결리스트의구조 이전에구현한양방향연결리스트의구조 Data Structures and Algorithms 30