C/C++ 큐
코드
#include <bits/stdc++.h>
#define ll long long
using namespace std;
#define X first
#define Y second
class node
{
public:
int data;
node* link;
node(int data = 0) : link(nullptr), data(data) {}
};
class que
{
public:
node* f;
node* b;
que()
{
f = new node();
b = f;
}
void push(int data)
{
node* new_node = new node(data);
if (f->link == nullptr)
{
f->link = new_node;
b = new_node;
return;
}
b->link = new_node;
b = new_node;
}
void pop()
{
if (f->link == nullptr)
{
cout << -1 << "\n";
return;
}
node* df = f->link;
cout << df->data << "\n";
f->link = f->link->link;
delete df;
}
void size()
{
node* tmp = f;
int size = 0;
while (tmp->link != nullptr)
{
size++;
tmp = tmp->link;
}
cout << size << "\n";
}
void empty()
{
if (f->link == nullptr)
cout << "1\n";
else
cout << "0\n";
}
void front()
{
if (f->link == nullptr)
{
cout << "-1\n";
return;
}
cout << f->link->data << "\n";
}
void back()
{
if (f->link == nullptr)
{
cout << "-1\n";
return;
}
cout << b->data << "\n";
}
};
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n; cin >> n;
que q;
for (int i = 0; i < n; i++)
{
string s; cin >> s;
if (s == "push")
{
int x; cin >> x;
q.push(x);
}
else if (s == "pop")
{
q.pop();
}
else if (s == "size")
{
q.size();
}
else if (s == "empty")
{
q.empty();
}
else if (s == "front")
q.front();
else if (s == "back")
{
q.back();
}
}
return 0;
}
사이즈 함수는 O(1)로도 구현이 가능하나 테스트를 위해 O(N)으로 구현했습니다.
연습문제 boj 카드 2
#include <bits/stdc++.h>
#define ll long long
using namespace std;
#define X first
#define Y second
class node
{
public:
int data;
node* link;
node(int data = 0) : link(nullptr), data(data) {}
};
class que
{
public:
node* f;
node* b;
int q_size;
que() : q_size(0)
{
f = new node();
b = f;
}
void push(int data)
{
node* new_node = new node(data);
if (f->link == nullptr)
{
f->link = new_node;
b = new_node;
}
else
{
b->link = new_node;
b = new_node;
}
q_size++;
}
void pop()
{
if (f->link == nullptr)
{
cout << -1 << "\n";
return;
}
node* df = f->link;
f->link = f->link->link;
delete df;
q_size--;
}
void size()
{
cout << q_size << "\n";
}
void empty()
{
if (f->link == nullptr)
cout << "1\n";
else
cout << "0\n";
}
void front()
{
if (f->link == nullptr)
{
cout << "-1\n";
return;
}
cout << f->link->data << "\n";
}
void back()
{
if (f->link == nullptr)
{
cout << "-1\n";
return;
}
cout << b->data << "\n";
}
void solve()
{
while (q_size > 1)
{
pop();
push(f->link->data);
pop();
}
cout << f->link->data;
}
};
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n; cin >> n;
que q;
for (int i = 1; i <= n; i++)
q.push(i);
q.solve();
return 0;
}
Leave a comment