6 2 1 26 1 void insert Qchar

  • Slides: 28
Download presentation

6. 2. 1 배열을 이용한 큐의 구현방법(2/6) ※ 큐의 삽입 모듈 1. void insert.

6. 2. 1 배열을 이용한 큐의 구현방법(2/6) ※ 큐의 삽입 모듈 1. void insert. Q(char data) 2. { 3. if(overflow()) { 4. printf("%s", queue overflows. "); 5. exit(1); 6. } 7. else { 8. rear++; 9. queue[rear] = data; 10. } 11. }

6. 2. 1 배열을 이용한 큐의 구현방법(3/6) ※ 큐의 삭제(출력) 모듈 1. char delete.

6. 2. 1 배열을 이용한 큐의 구현방법(3/6) ※ 큐의 삭제(출력) 모듈 1. char delete. Q() 2. { 3. if(isempty()) { 4. printf("%s", queue empty. "); 5. exit(1); 6. } 7. else { 8. front++; 9. return(queue[front]); 10. } 11. }

6. 2. 1 배열을 이용한 큐의 구현방법(4/6) ※ 큐의 공백 유무 조사 모듈 1.

6. 2. 1 배열을 이용한 큐의 구현방법(4/6) ※ 큐의 공백 유무 조사 모듈 1. 2. 3. 4. 5. int isempty() { if(front == rear) return(1); else return(0); } ※ 큐 오버플로 유무 조사 모듈 1. 2. 3. 4. 5. int overflow() { if(rear == LIMIT) return(1); else return(0); }

6. 2. 2 환형 큐의 구현(2/3) ※ 환형 큐의 삭제 모듈 1. char delete.

6. 2. 2 환형 큐의 구현(2/3) ※ 환형 큐의 삭제 모듈 1. char delete. Q() 2. { 3. if(front == rear) { 4. printf("%s", queue empty. "); 5. exit(1); 6. } 7. else { 8. front = (front + 1) % SIZE; 9. return(queue[front]); 10. } 11. }

6. 2. 3 태그를 사용한 환형 큐의 구현(2/3) ※ 태그를 사용한 환형 큐의 생성

6. 2. 3 태그를 사용한 환형 큐의 구현(2/3) ※ 태그를 사용한 환형 큐의 생성 모듈 1. 2. 3. 4. #define SIZE 100 static char queue[SIZE]; int front = rear = 0; int tag = 0; ※ 태그를 이용한 환형 큐에서 자료를 삽입하는 모듈 1. void insert. Q(char data) 2. { 3. if(tag == 1) { 4. printf("%s", queue overflows. "); 5. exit(1); 6. } 7. rear = (rear + 1) % SIZE; 8. if(front == rear) tag = 1; 9. queue[rear] = data; 10. }

6. 2. 3 태그를 사용한 환형 큐의 구현(3/3) ※ 태그를 사용한 환형 큐에서 자료를

6. 2. 3 태그를 사용한 환형 큐의 구현(3/3) ※ 태그를 사용한 환형 큐에서 자료를 삭제하는 모듈 1. char delete. Q() 2. { 3. if(front == rear) && (tag = 0) { 4. printf("%s", queue empty. "); 5. exit(1); 6. } 7. if(front == rear) tag = 0; 8. front = (front + 1) % SIZE; 9. return(queue[front]); 10. }

6. 2. 4 연결 리스트 표현을 이용한 큐의 구현(3/5) ※ 연결 리스트형 큐에서 자료를

6. 2. 4 연결 리스트 표현을 이용한 큐의 구현(3/5) ※ 연결 리스트형 큐에서 자료를 삽입하는 모듈 1. void insert. Q(char data) 2. { 3. struct queue_node { 4. char data; 5. queue_node *link; 6. } *new; 7. new = malloc(sizeof(queue_node)); 8. if(new == NULL) { 9. printf("memory allocation errorn"); 10. exit(1); 11. } 12. new->data = data; 13. new->link = NULL; 14. if(isempty() 15. front = new; 16. Else 17. rear->link = new; 18. rear = new; 19. }

6. 2. 4 연결 리스트 표현을 이용한 큐의 구현(5/5) ※ 연결 리스트형 큐의 자료

6. 2. 4 연결 리스트 표현을 이용한 큐의 구현(5/5) ※ 연결 리스트형 큐의 자료 삭제 모듈 1. char delete. Q() 2. { 3. struct queue_node { 4. char data; 5. queue_node *link; 6. } *ptr; 7. char temp; 8. if(isempty()) { 9. printf("%s", queue empty. "); 10. exit(1); 11. } 12. else { 13. temp = front->data; 14. ptr = front; 15. front = front->link; 16. free(ptr); 17. if(isempty()) rear = NULL; 18. return(temp); 19. } 20. }

6. 3 데크(Deque)

6. 3 데크(Deque)