💜 코딩테스트/💜 자료구조

[💜 자료구조2] Queue 큐 (배열, linked)

eyes from es 2023. 7. 20. 12:14
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
반응형