사이즈5인 큐에 1->2->3->4->5순으로 삽입후 6번째 요소를 넣을 때 오류메시지를 출력하고
1,2 원소 삭제 후 남아있는 모든원소를 출력하기
핵심
1. 큐 사이즈 만큼 입력받을 때
큐사이즈만큼 데이터를 입력받을 때 아래 코드에 나와있는 반복문처럼 원소를 삽입하면 됩니다.
2. 불필요한 코드 줄이기
모든 연산 함수의 return문을 보면 두번, 세번 쓸 코드를 한 코드로 표현할 수 있음을 알 수 있습니다.
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #pragma warning(disable:4996) #include<stdio.h> #include<stdlib.h> // 사이즈5인 큐에 1->2->3->4->5순으로 삽입후 // 6번째 요소를 넣을 때 오류메시지 출력하고 1,2 원소 삭제 후 남아있는 원소 출력 #define MAX_SIZE 5 typedef struct { int Queue[MAX_SIZE]; int front, rear; }QType; void init(QType* q) { q->front = q->rear = -1; } int is_full(QType* q) { return q->rear == MAX_SIZE - 1; } void enQueue(QType* q, int data) { if (is_full(q)) { fprintf(stderr, "꽉 차서 원소를 삽입할 수 없어요..\n"); return; } q->Queue[++(q->rear)] = data; } int is_empty(QType* q) { return q->front == q->rear; } int deQueue(QType* q) { if (is_empty(q)) { fprintf(stderr, "큐가 비어서 삭제할 수 없습니다..\n"); exit(1); } return q->Queue[++(q->front)]; } int main() { QType q; int data; init(&q); //5개 요소를 꽉차지않을 때 까지(5개)삽입하기 int i = 1; while (!is_full(&q)) { printf("%d번째 원소를 삽입합니다.\n", i++); scanf("%d", &data); enQueue(&q, data); } //6번째 원소삽입-> 오류 enQueue(&q, data);//-> 오류메시지출력 printf("삭제한 원소는 %d입니다.\n", deQueue(&q)); printf("삭제한 원소는 %d입니다.\n", deQueue(&q)); for (int i = q.front+1; i <= q.rear; i++) { printf("큐에 남아있는 원소는%d\n",q.Queue[i]); } return 0; } | cs |
결과