1 분 소요

Queue

이번 목표는 자료구조중 하나인 Deque를 c 언어로 구현하는 것 이다. Deque의 경우 흔히 덱 이라고 부르는데, 이는 기존 큐랑 다르게 앞, 뒤에서 다 출력이 가능하다.

기능

큐에 기본 기능들은 init, push, pop, size, empty, front, back이다.

init -> 덱 초기화

push front -> 데이터를 가장 앞에 삽입

push back -> 데이터를 가장 뒤에 삽입

pop front-> 가장 앞 데이터 추출

pop back -> 가장 뒤 데이터 추출

size -> 큐 크기 확인

empty -> 큐가 비어있는지 유무 확인

front -> 가장 앞에 데이터 확인

back -> 가장 뒤에 있는 데이터 확인

구현

#include <stdio.h>
#include <string.h>
#define SIZE 10000

typedef struct{
	int arr[SIZE];
	int front;
	int back;
}Deque;

void init(Deque *d)
{
	d->front = 0;
	d->back = 0;
	return;
}

int empty(Deque *d)
{
	return(d->front == d->back);
}


void push_front(Deque *d, int num)
{
	d->arr[d->front] = num;
	d->front = (d->front + SIZE -1) % SIZE;
	return;
}

void push_back(Deque *d, int num)
{
	d->back = (d->back +1) %SIZE;
	d->arr[d->back] = num;
	return;
}

int pop_front(Deque *d)
{
	if(empty (d))
	{
		return -1;
	}
	d->front = (d->front+1) %SIZE;
	int temp = d->arr[d->front];
	return temp;
}

int pop_back(Deque *d)
{
	if(empty (d))
	{
		return -1;
	}
	int temp = d->arr[d->back];
	d->back = (d->back + SIZE -1) %SIZE;
	
	return temp;
}

int size(Deque *d)
{
	return (d->back - d->front + SIZE )%SIZE;
}

int front(Deque *d)
{
	if(empty (d))
	{
		return -1;
	}
	int temp = (d->front+1)%SIZE;
	return d->arr[temp];
}

int back(Deque *d)
{
	if(empty (d))
	{
		return -1;
	}
	return d->arr[d->back];
}

int main()
{
	int Tc;
	int num;
	char input[12];
	Deque d;
	init(&d);
	
	scanf("%d",&Tc);
	
	for(int i = 0; i<Tc; i++)
	{
		scanf("%s",&input);
		if(strcmp(input,"push_front")==0)
		{
			scanf("%d",&num);
			push_front(&d,num);
		}
		else if(strcmp(input,"push_back")==0)
		{
			scanf("%d",&num);
			push_back(&d,num);
		}
		else if(strcmp(input,"pop_front")==0)
		{
			printf("%d\n",pop_front(&d));
		}
		else if(strcmp(input,"pop_back")==0)
		{
			printf("%d\n",pop_back(&d));
		}
		else if(strcmp(input,"size")==0)
		{
			printf("%d\n",size(&d));
		}
		else if(strcmp(input,"empty")==0)
		{
			printf("%d\n",empty(&d));
		}
		else if(strcmp(input,"front")==0)
		{
			printf("%d\n",front(&d));
		}
		else if(strcmp(input,"back")==0)
		{
			printf("%d\n",back(&d));
		}
	}
	return 0;
}

댓글남기기