본문 바로가기

알고리즘문제풀이

[백준 10845]큐-연결리스트로 구현하기

반응형

www.acmicpc.net/problem/10845

 

10845번: 큐

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

#include<iostream>
#include<string>
#include <stdlib.h>
using namespace std;

typedef struct node
{
	int value;
	node *next;
}node;

typedef struct Que
{
	node *front = 0;
    node *end=0; 
	int cnt;
}Que;
void init(Que *que)
{
	que->front=que->end=NULL; //front:꺼내, end:새로넣어
	que->cnt = 0;
}
int isEmpty(Que *que)
{
	if (que->cnt == 0)return 1;
	else return 0;
	
}
void push(Que *que, int data)
{
	node *now = (node *)malloc(sizeof(node)); //새로운 노드 
	now->value = data;
	now->next = NULL;

	if (isEmpty(que))
	{
		que->front= now;
	}
	else
	{
		que->end->next= now;
	}
	que->end= now;
	que->cnt += 1;
}
int pop(Que *que)
{
	if (isEmpty(que))return -1;

	if (que->front == que->end) {
		que->end = NULL;
	}
	node *cur=NULL;
	cur = que->front;
	que->front = cur->next;
	que->cnt -= 1;

	free(cur);
	return 0;
}
int Size(Que *que)
{
	return que->cnt;
}
int front(Que *que)
{
	if (isEmpty(que))return -1;
	else return que->front->value;
}
int back(Que *que)
{
	if (isEmpty(que))return -1;
	else return que->end->value;
}
int main()
{
	Que que;
	init(&que);
	int n = 0, data = 0;
	string input;
	cin >> n;
	while (n--)
	{
		cin >> input;
		if (input == "push")
		{
			cin >> data;
			push(&que,data);
		}
		else if (input == "pop")
		{
			cout << front(&que) << endl;
			pop(&que);
		}
		else if (input == "size")
		{
			cout << Size(&que) << endl;
		}
		else if (input == "empty")
		{
			cout << isEmpty(&que) << endl;
		}
		else if (input == "front")
		{
			cout << front(&que) << endl;
		}
		else if (input == "back")
		{
			cout << back(&que) << endl;
		}
	}
}
반응형