본문 바로가기
자료구조

by chaechaekim 2019. 5. 14.
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 10

//큐를 구조체로 선언 
typedef int element;
typedef struct {
	element queue[MAX_SIZE];
	int front, rear;
} QueueType;

//포화상태, 공백상테 error 처리
void error(char *message)  { // *은 문자열
	fprintf(stderr,"%s\n", message);
	exit(1);
}

//초기화 함수 
void init(QueueType *q) {
	q->front = q->rear =0;
}

//삽입 함수 
void enqueue(QueueType *q, element item) {
	if ((q->rear+1)%MAX_SIZE == q->front)
		error("큐가 포화 상태입니다");
	q->rear = (q->rear+1)%MAX_SIZE; //rear값 0-1-1
	q->queue[q->rear] = item;
}

//삭제 함수 
element dequeue(QueueType *q) {
	if (q->front == q->rear)
		error("큐가 공백 상태입니다");
	q->front = (q->front+1)%MAX_SIZE;
	return q->queue[q->front];
}

int main() {
	QueueType q;
	init(&q);
	printf("item=%d\n", q.queue[q.front]);
	printf("front=%d\n", q.front);
	printf("rear=%d\n", q.rear);
	enqueue(&q, 99);
	printf("\nitem=%d\n", q.queue[q.front+1]);
	printf("front=%d\n", q.front);
	printf("rear=%d\n", q.rear);
	enqueue(&q, 88);
	enqueue(&q, 77);
	enqueue(&q, 66);
	printf("\nitem=%d\n", q.queue[q.rear]);
	printf("front=%d\n", q.front);
	printf("rear=%d\n", q.rear);
	enqueue(&q, 55);
	enqueue(&q, 44);
	enqueue(&q, 33);
	enqueue(&q, 22);
	enqueue(&q, 11);
	printf("\nitem=%d\n", q.queue[q.rear]);
	printf("front=%d\n", q.front);
	printf("rear=%d\n", q.rear);
	dequeue(&q); 
	printf("\nitem=%d\n", q.queue[q.front]);
	printf("front=%d\n", q.front);
	printf("rear=%d\n", q.rear);
	enqueue(&q, 98);
	printf("\nitem=%d\n", q.queue[q.rear]);
	printf("front=%d\n", q.front);
	printf("rear=%d\n", q.rear);
	dequeue(&q);
	dequeue(&q);
	dequeue(&q);
	dequeue(&q);
	dequeue(&q);
	dequeue(&q);
	dequeue(&q);
	dequeue(&q);
	dequeue(&q);
	printf("\nitem=%d\n", q.queue[q.front]);
	printf("front=%d\n", q.front);
	printf("rear=%d\n", q.rear);
	dequeue(&q);
}

/*

item=1
front=0
rear=0

item=99
front=0
rear=1

item=66
front=0
rear=4

item=11
front=0
rear=9

item=99
front=1
rear=9

item=98
front=1
rear=0

item=98
front=0
rear=0
큐가 공백 상태입니다

--------------------------------
Process exited after 0.0127 seconds with return value 1
계속하려면 아무 키나 누르십시오 . . .

*/

'자료구조' 카테고리의 다른 글

포인터 실습 1  (0) 2019.05.17
리스트  (0) 2019.05.17
Stack push pop peek  (0) 2019.04.09
함수 사용  (0) 2019.04.08
ㅎㅎ  (0) 2019.03.26

댓글