๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ/๐Ÿ’œ ์ž๋ฃŒ๊ตฌ์กฐ

[๐Ÿ’œ ์ž๋ฃŒ๊ตฌ์กฐ3] Circular Queue ์›ํ˜• ํ (๋ฐฐ์—ด)

by eyes from es 2023. 7. 21.
728x90
๋ฐ˜์‘ํ˜•

1. ์›ํ˜• ๋ฐฐ์—ด ํ Code

#include<stdio.h>
#include<stdlib.h>
#define N 5 

typedef int element;
element queue[N];

//์ฒ˜์Œ ๊ณต๋ฐฑ์ผ๋•Œ 0๋ฒˆ์ง€
int front=0;
int rear=0;

//์‚ฝ์ž…
void qinsert(element value){

	//ํฌํ™” ์ƒํƒœ ํ™•์ธ
	//front :0 , rear: 8 => ํ์— insert๋งŒ ํ•ด์„œ ๊ฝ‰ ์ฐธ. 0->1->----8->0->1, ์—ฌ๊ธฐ์„œ front์ธ 0๋ฒˆ์ง€๋Š” ๋น„์–ด์žˆ๋Š” ์ƒํƒœ 
	if (front==(rear+1)%N){//front (ํ•œ์นธ)๋น„์›Œ๋†“์Œ 
		printf("queue overflow");
		exit(1);
	}
	
	//++rear%N
	//=> rear = (rear + 1) % N
		// (8+1) % 9 = 0 
		//๋งŒ์•ฝ +1์„ ์•ˆํ•˜๊ณ  rear = rear % N ์ด๋ฉด, 8 % 9 = 8, ํ˜„์žฌ rear ์œ„์น˜์— ์‚ฝ์ž…ํ•˜๊ฒŒ ๋จ.
	queue[++rear%N] = value;
} 

element qdelete(){

	//ํ ๊ณต๋ฐฑ ๊ฒ€์‚ฌ
	if (front==rear){
		printf("ํ์— ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค");
	}

	//++front%N
	//=> front = (front + 1) % N
		// (3+1) % 9 = 4๋ฒˆ์ง€๋กœ front ์ด๋™ 
		//๋งŒ์•ฝ +1์„ ์•ˆํ•˜๊ณ  front = front % N ์ด๋ฉด, 3 % 9 = 3, ํ˜„์žฌ front ์œ„์น˜ ๊ทธ๋Œ€๋กœ์ž„.
	return queue[++front%N];
}

int main(void){
	//front: 0, rear:0

	qinsert(2); 					// front: 0, rear:1		(2) 
	qinsert(5); 					// front: 0, rear:2		(2 5)
	qinsert(1); 					// front: 0, rear:3		(2 5 1)
	printf("%d\n",qdelete()); 		// front: 1, rear:3		(5 1)
	qinsert(3); 					// front: 1, rear:4		(5 1 3)
	printf("%d\n",qdelete()); 		// front: 2, rear:4		(1 3)
	printf("%d\n",qdelete()); 		// front: 3, rear:4    	(3)
	qinsert(4);						// front: 3, rear:5   	(3 4)
	qinsert(7);						// front: 3, rear:6   	(3 4 7)
}

 

 

2. ์›ํ˜• ๋ฐฐ์—ด ํ (๋ฌธ์ž์—ด) Code 

#include <stdio.h>
#include <stdlib.h>
#define N 5

typedef struct {
    char name[50]; //์ด๋ฆ„
    int student_no; //ํ•™๋ฒˆ
} element;

element queue[N];
int front = 0;
int rear = 0;

int isFull() {
    //rear๋กœ ๋„ฃ์„ ๊ทธ ๋‹ค์Œ ์œ„์น˜๊ฐ€ front์™€ ๊ฐ™์œผ๋ฉด ํฌํ™”
    if ((front == (rear + 1)%N)) //ํ•œ์นธ ๋„์›€
        return 1;
    else
        return 0;
}

int isEmpty() {
    if (front == rear)
        return 1;
    else
        return 0;
}

void qinsert(element value) {
    if (isFull()) {
        printf("queue overflow\n");
    } else {
        queue[++rear%N] = value;
        printf("Enqueued: %s\n", value.name);
    }
}

element qdelete() {
    element value;
    if (isEmpty()) {
        printf("Queue is empty. Cannot qdelete element.\n");
        return value;
    } else {
        value = queue[++front%N];
        printf("Dequeued: %s\n", value.name);
        return value;
    }
}

int main() {
    element e1 = {"John", 123};
    element e2 = {"Alice", 456};
    element e3 = {"Bob", 789};

    qinsert(e1);
    qinsert(e2);
    qinsert(e3);

    element dequeuedElement = qdelete();

    return 0;
}
728x90
๋ฐ˜์‘ํ˜•