본문 바로가기

자료구조

연결리스트[큐]

반응형

큐를 연결리스트로 구현해보자 

기본문제를 통해 구현해봅시다~

 

 

연결리스트에 대한 강의를 듣고 구현해보는 것을 추천합니다

 

 

 

 

 

https://www.acmicpc.net/problem/10845

 

10845번: 큐

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

www.acmicpc.net

 

//리스트
//기본적인연산:삽입,삭제,검색 등
//리스트를 구현하는 방법:배열,연결
//배열단점: 크기가 고정, 중간에 데이터 삽입 및 삭제하려면 다수의 데이터를 옮겨얗ㅁ
//연결리스트:길이 제한 없음, 다른 데이터의 이동없이 중간에 삽입 및 삭제가능. 랜덤 액세스가 불가능
//배열은 시작주소를 통해 각 type에 의해 배열의 각 칸의 size가 동일하기때문에, 계산하여 임의의 데이터에 접근이 쉬움

//큐 연결리스트로 구현하기 
//불필요한 공간낭비를 줄일수있기때문에 배열 큐보단 연결이 더 유리한거같다.
//연결리스트에서 empty()구분법을 위한 구현법
#include<iostream>
#include<string>
using namespace std;

struct Node {
	int data;
	Node*next;//자기참조형 구조체
};
Node *head = 0, *tail = 0;
int _size = 0;
void push(int data)
{
	_size++;
	Node*temp = new Node();
	temp->data = data;
	if (head == 0)
	{
		head = tail = temp;
	}
	else
	{
		tail->next = temp;
		tail = temp;
	}
}
int front()
{
	if (_size == 0)return -1;
	else return head->data;
}
int back()
{
	if (_size == 0)return -1;
	else return tail->data;
}
void pop()
{
	if (_size == 0)return;
	_size--;
	Node *temp = head;
	head = head->next;

	delete temp;
}
int size()
{
	return _size;
}
int empty()
{
	if (_size == 0)return 1;
	else return 0;
}
void clear()
{
	while (_size)
	{
		Node *temp = head;
		head = head->next;
		_size--;
		delete temp;
	}
}
int main()
{
	int n = 0, data = 0;
	string input;
	cin >> n;
	while (n--)
	{
		cin >> input;
		if (input == "push")
		{
			cin >> data;
			push(data);
		}
		else if (input == "pop")
		{
			cout << front() << endl;
			pop();
		}
		else if (input == "size")
		{
			cout << size() << endl;
		}
		else if (input == "empty")
		{
			cout << empty() << endl;
		}
		else if (input == "front")
		{
			cout << front() << endl;
		}
		else if (input == "back")
		{
			cout << back() << endl;
		}
	}
}
반응형

'자료구조' 카테고리의 다른 글

트라이(Trie) 자료구조  (0) 2019.04.29
HASH(해쉬)  (0) 2019.04.26
정렬 총 정리  (0) 2019.04.24
Tree  (0) 2019.02.27
SORT종류2  (0) 2018.11.09