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

[๐Ÿ’œ ์ž๋ฃŒ๊ตฌ์กฐ2] Queue ํ (๋ฐฐ์—ด, linked)

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

1. ๋ฐฐ์—ด ํ Code

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

typedef int element;
element queue[N];
int front=-1; //์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ๋น ์ง€๋ฉด ๋จ
int rear=-1; //๋ฐ›์„์ฐจ๋ก€

void qinsert(element value){
	if (rear>=N-1){ //4
		printf("queue overflow");
		exit(1);
	}
	rear++;
	queue[rear] = value;
} 

element qdelete(){
	if (front==rear){ //์—ฌ๊ธฐ๊นŒ์ง€ ๋„ฃ์Œ(front) == ์—ฌ๊ธฐ๊นŒ์ง€ ๋บŒ(rear) ์ฆ‰, ๋„ฃ์€๊ฑฐ ๋‹ค ๋บŒ = ๊ณต๋ฐฑ
		printf("ํ์— ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค");
	}
	front++;
	return queue[front];
}

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

 

2. ์—ฐ๊ฒฐ ํ Code

#include<stdio.h>
#include<stdlib.h>


typedef int element;
struct queue {
	element data;
	struct queue* link;
};

//๊ตฌ์กฐ์ฒด queue๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ํฌ์ธํ„ฐ
struct queue* front= NULL; // = typedef struct queue_pointer* qpointer;
struct queue* rear= NULL;


void qinsert(element value){

	//queue ์‚ฌ์ด์ฆˆ๋งŒํผ ๋™์  ํ• ๋‹น-> ๊ตฌ์กฐ์ฒด queue๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ํฌ์ธํ„ฐ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜
	struct queue* newq = (struct queue*)malloc(sizeof(struct queue)); //(qpointer)malloc(sizeof(struct queue))
	newq -> data = value;
	newq ->link = NULL;
	if (rear==NULL) //๋“ค์–ด์˜ฌ์• ๊ฐ€ NULL = queue๊ฐ€ ๋น„์–ด์žˆ์„ ๋•Œ
		front = newq; //๋บ„ ๋•Œ ์–˜๋ถ€ํ„ฐ ๋นผ๋ฉด ๋จ
	
	else
		//rear์˜ link๊ฐ€ ์ƒˆ๋กœ์šด newq์˜ ์ฃผ์†Œ๊ฐ’ ๊ฐ€๋ฅดํ‚ด
		rear ->link = newq; 
	
	//์—ฐ๊ฒฐ
	rear = newq;
} 

element qdelete(){
	if(front == NULL){
		printf("ํ์— ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค");
		exit(1); 
	}
	element tmp = front->data;
	struct queue* del = front;
	front = front->link;
	if(front==NULL) rear = NULL; 
	free(del);
	return tmp;
	}
	
int main(void){

	//์ฒ˜์Œ ๊ณต๋ฐฑ์ธ ์ƒํƒœ : front = null, rear = null (null)

	qinsert(2); //front: 0๋ฒˆ์ง€, rear: 0๋ฒˆ์ง€ (2)
	qinsert(9); //front: 0๋ฒˆ์ง€, rear: 1๋ฒˆ์ง€ (2->9)
	printf("%d\n",qdelete()); // front: 1๋ฒˆ์ง€, rear: 1๋ฒˆ์ง€ (0๋ฒˆ์ง€ free) (9)
	printf("%d\n",qdelete()); // front: null, rear: null   (1๋ฒˆ์ง€ free) (null)
	qinsert(3); //front: 0'๋ฒˆ์ง€, rear: 0'๋ฒˆ์ง€ (3)
	qinsert(6); //front: 0'๋ฒˆ์ง€, rear: 1'๋ฒˆ์ง€ (3->6)
	printf("%d\n",qdelete());//front: 1'๋ฒˆ์ง€, rear: 1'๋ฒˆ์ง€ (6)
}

 

 

 

 

 

 

#์ฝ”๋”ฉํ…Œ์ŠคํŠธ #์ฝ”๋”ฉ๊ณต๋ถ€

728x90
๋ฐ˜์‘ํ˜•