728x90
728x170
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | // 원형 큐 예 #include <stdio.h> #include <stdlib.h> typedef int element; typedef struct { element *queue; int front, rear; int size; } QueueType; void init(QueueType *q) { q->front = q->rear = 0; q->size = 2; // 원형 큐의 특징 때문에 q->queue = (element *)malloc(sizeof(element)*q->size); } int is_full(QueueType *q) { return ((q->rear + 1) % q->size == q->front); } void queueFull(QueueType *q) { // 포화 상태일 경우, 크기 2배 증가 element *data = (element *)malloc(sizeof(element)*q->size); int start = (q->front + 1) % q->size; int end = (q->rear + 1) % q->size; int i, j; if (start < end) { for (i = start, j = 1; i < end; i++, j++) { data[j] = q->queue[i]; } } else { for (i = start, j = 1; i < q->size; i++, j++) { data[j] = q->queue[i]; } for (i = 0; i < end; i++, j++) { data[j] = q->queue[i]; } } q->front = 0; q->rear = g->size - 1; free(q->queue); q->queue = (element *)malloc(sizeof(element)*q->size * 2); for (i = 0; i <= q->rear; i++) { q->queue[i] = data[i]; } q->size *= 2; free(data); } void enqueue(QueueType *q, element item) { if (is_full(q)) { printf("큐가 포화상태입니다. \n"); queueFull(q); } q->rear = (q->rear + 1) % q->size; q->queue[q->rear] = item; } element dequeue(QueueType *q) { if (is_empty(q)) { error("큐가 공백상태입니다."); } q->front = (q->front + 1) % q->size; return q->queue[q->front]; } void printQ(QueueType *q) { // 큐의 내용을 출력하는 연산 int i, first, last; first = (q->front + 1) % q->size; last = (q->rear + 1) % q->size; printf(" Circular Queue : ["); if (first > last) { for (i = 0; i < last; i++) { printf("%3d", q->queue[i]); } for (i = last; i < first; i++) { printf("%3c", '#'); } for (i = first; i < q->size; i++) { printf("%3d", q->queue[i]); } } else if (first < last) { for (i = 0; i < first; i++) { printf("%3c", '#'); } for (i = first i < last; i++) { printf("%3d", q->queue[i]); } for (i = last; i < q->size; i++) { printf("%3c", '#'); } } else { // first == last for (i = 0; i < q->size; i++) { printf("%3c", '#'); } } printf(" ] \n"); printf("Front: %d, Rear: %d\n", q->front, q->rear); } | cs |
728x90
그리드형(광고전용)
'Source Code > C' 카테고리의 다른 글
숫자 출력 시 앞에 0을 붙여 자리수 채우기 (0) | 2020.09.11 |
---|---|
C언어 2차원 배열 동적 할당 예제 (0) | 2020.08.14 |
이진 탐색 트리 프로그램 (Binary Search Tree Program) (0) | 2020.05.15 |
배열 내에서 같은 수의 개수 찾기 (Finding the number of the same number in an array) (0) | 2017.09.14 |
중위 표기 수식을 전위 표기 수식으로 변환하는 프로그램 (0) | 2017.05.31 |
중위 표기 수식을 후위 표기 수식으로 변환하는 프로그램 (0) | 2017.05.16 |
후위 표기식 계산 프로그램 (5) | 2017.05.16 |
괄호 검사 프로그램 (0) | 2017.05.11 |