원형 큐를 활용한 fibonacci

임승혁·2021년 2월 8일
0
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#define MAX_QUEUE_SIZE 4
typedef int element;
typedef struct {
	element data[MAX_QUEUE_SIZE];
	int front, rear;
}QueueType;

void error(char* message) {
	fprintf(stderr, "%s\n", message);
	exit(1);
}

void initQueue(QueueType* q) {
	q->front = q->rear = 0;
}

int isEmpty(QueueType* q) {
	return (q->front == q->rear);
}

int isFull(QueueType* q) {
	return ((q->rear + 1) % MAX_QUEUE_SIZE == q->front);
}

void queuePrint(QueueType* q) {
	printf("QUEUE(front=%d rear=%d) = ", q->front, q->rear);
	if (!isEmpty(q)) {
		int i = q->front;
		do {
			i = (i + 1) % (MAX_QUEUE_SIZE);
			printf("%d | ", q->data[i]);
			if (i == q->rear)
				break;
		} while (i != q->front);
	}
	printf("\n");
}

void enqueue(QueueType* q, element item) {
	if (isFull(q))
		error("큐가 포화상태입니다.");
	q->rear = (q->rear + 1) % MAX_QUEUE_SIZE;
	q->data[q->rear] = item;
}

element dequeue(QueueType* q) {
	if (isEmpty(q)) {
		error("큐가 공백상태입니다.");
	}
	q->front = (q->front + 1) % MAX_QUEUE_SIZE;

	return q->data[q->front];
}

element peek(QueueType* q) {
	if (isEmpty(q))
		error("큐가 공백상태입니다.");
	return q->data[(q->front) % MAX_QUEUE_SIZE];
}

int main(void) {
	QueueType q;
	int f0 = 0, f1 = 1, num = 0;

	initQueue(&q);
	enqueue(&q, f0);
	enqueue(&q, f1);

	while (1) {
		printf("원하는 피보나치 수열의 번호를 입력하세요>> ");
		scanf_s("%d", &num);
		if (num <= 0) {
			printf("없는 번호입니다. 다시 입력하세요\n\n");
		}
		else if (num == 1) {
			printf("%d번째의 결과 %d\n", num, dequeue(&q));
			break;
		}
		else if (num == 2) {
			int queue = dequeue(&q);
			queue = dequeue(&q);
			printf("%d번째의 결과 %d\n", num, queue);
			break;
		}
		else {
			int sum = 0;
			for (int i = 0;i < num - 2;i++) {
				sum = dequeue(&q) + q.data[q.rear];
				enqueue(&q, sum);
			}

			printf("%d번째의 결과 %d\n", num, q.data[q.rear]);
			break;
		}
	}
	return 0;
}

설명 : c언어를 활용해 작성한 원형 큐를 가지고 fibonacci생성 원하는 수의 인덱스를 입력하면 해당 인덱스의 숫자가 출력된다.

profile
한성공대생

0개의 댓글