#include <iostream>
using namespace std;
struct pelement
{
pelement *nast;
int w;
};
struct kolejka
{
pelement *pierwszy;
pelement *ostatni;
};
void init(struct kolejka* k)
{
k->pierwszy=0;
k->ostatni=0;
}
bool empty(struct kolejka *k)
{
if(k->pierwszy == NULL)
return true;
return false;
}
void insert(struct kolejka* &k, int x)
{
struct pelement *nowy;
nowy = new pelement;
nowy->w=x;
nowy->nast=NULL;
if(empty(k))
{
k->ostatni=nowy;
k->pierwszy=nowy;
}
else
{
k->ostatni->nast=nowy;
k->ostatni=nowy;
}
}
int pop(struct kolejka* &k)
{
int x;
if(empty(k))
return 0;
pelement *old;
old = new pelement;
old=k->pierwszy;
x=old->w;
k->pierwszy=old->nast;
delete(old);
return x;
}
int main()
{
kolejka *k1= new kolejka;
init(k1);
insert(k1,3);
insert(k1,4);
insert(k1,5);
cout<<pop(k1);
cout<<endl;
cout<<pop(k1);
cout<<endl;
cout<<pop(k1);
cout<<endl;
cout<<pop(k1);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IHBlbGVtZW50CnsKICAgcGVsZW1lbnQgKm5hc3Q7CiAgIGludCB3Owp9OwoKc3RydWN0IGtvbGVqa2EKewogICBwZWxlbWVudCAqcGllcndzenk7CiAgIHBlbGVtZW50ICpvc3RhdG5pOwp9OwoKdm9pZCBpbml0KHN0cnVjdCBrb2xlamthKiBrKQp7CiAgIGstPnBpZXJ3c3p5PTA7CiAgIGstPm9zdGF0bmk9MDsKfQoKYm9vbCBlbXB0eShzdHJ1Y3Qga29sZWprYSAqaykKewogICBpZihrLT5waWVyd3N6eSA9PSBOVUxMKQogICAgICByZXR1cm4gdHJ1ZTsKICAgcmV0dXJuIGZhbHNlOwp9Cgp2b2lkIGluc2VydChzdHJ1Y3Qga29sZWprYSogJmssIGludCB4KQp7CiAgIHN0cnVjdCBwZWxlbWVudCAqbm93eTsKICAgbm93eSA9IG5ldyBwZWxlbWVudDsKICAgbm93eS0+dz14OwogICBub3d5LT5uYXN0PU5VTEw7CiAgIGlmKGVtcHR5KGspKQogICAgICB7CiAgICAgICAgIGstPm9zdGF0bmk9bm93eTsKICAgICAgICAgay0+cGllcndzenk9bm93eTsKICAgICAgfQogICBlbHNlCiAgIHsKICAgICAgay0+b3N0YXRuaS0+bmFzdD1ub3d5OwogICAgICBrLT5vc3RhdG5pPW5vd3k7CiAgIH0KCn0KaW50IHBvcChzdHJ1Y3Qga29sZWprYSogJmspCnsKICAgaW50IHg7CiAgIGlmKGVtcHR5KGspKQogICAgICByZXR1cm4gMDsKICAgcGVsZW1lbnQgKm9sZDsKICAgb2xkID0gbmV3IHBlbGVtZW50OwogICBvbGQ9ay0+cGllcndzenk7CiAgIHg9b2xkLT53OwogICBrLT5waWVyd3N6eT1vbGQtPm5hc3Q7CiAgIGRlbGV0ZShvbGQpOwogICByZXR1cm4geDsKfQoKaW50IG1haW4oKQp7CiAgIGtvbGVqa2EgKmsxPSBuZXcga29sZWprYTsKCiAgIGluaXQoazEpOwogICBpbnNlcnQoazEsMyk7CiAgIGluc2VydChrMSw0KTsKICAgaW5zZXJ0KGsxLDUpOwoKICAgY291dDw8cG9wKGsxKTsKICAgY291dDw8ZW5kbDsKICAgY291dDw8cG9wKGsxKTsKICAgY291dDw8ZW5kbDsKICAgY291dDw8cG9wKGsxKTsKICAgY291dDw8ZW5kbDsKICAgY291dDw8cG9wKGsxKTsKICAgcmV0dXJuIDA7Cn0K