#include<iostream>
#include<stdexcept>
using namespace std;
template <class T>
class QUEUE
{
struct node
{
T data;
node *next;
node(const T &x): data(x), next(NULL)
{
}
};
typedef node * pnode;
pnode head,tail;
public:
QUEUE();
bool empty()const // czy to jest też dobrze napisane ??
{
return head == NULL;
}
void put(T);
T get();
void wypisz()const;
~QUEUE();
};
template<class T>
QUEUE<T>::QUEUE()
{
head = NULL;
}
template <class T>
void QUEUE<T>::put (T x)
{
if (empty())
head = tail = new node(x);
else
{
pnode pom = tail;
tail = new node(x);
pom ->next =tail;
}
}
template<class T>
T QUEUE<T>::get()
{
if (empty())
throw out_of_range ("Kolejka pusta");
T temp = head -> data;
pnode stara = head;
head = head -> next;
delete stara;
return temp;
}
template <class T>
void QUEUE<T>::wypisz()const
{ pnode pomoc=head;
while(pomoc != NULL)
{
cout<<pomoc->data<<endl;
pomoc=pomoc->next;
}
}
template <class T> // Czy destruktor jest dobrze napisany ??
QUEUE<T>::~QUEUE()
{
while(head != NULL)
get();
}
int main()
{
QUEUE<int> kolejka;
cout<<endl;
cout<<"Czy kolejka pusta: "<<kolejka.empty()<<endl;
kolejka.put(5);
cout<<"Czy kolejka pusta: "<<kolejka.empty()<<endl;
kolejka.put(10);
kolejka.put(15);
kolejka.put(11);
kolejka.put(4);
kolejka.put(3);
kolejka.put(2);
kolejka.put(1);
kolejka.put(7);
kolejka.put(8);
kolejka.put(21);
cout<<endl;
kolejka.wypisz();
cout<<endl;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHN0ZGV4Y2VwdD4KIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBRVUVVRQp7CiAgICBzdHJ1Y3Qgbm9kZQogICAgewogICAgICAgIFQgZGF0YTsKICAgICAgICBub2RlICpuZXh0OwogICAgICAgIG5vZGUoY29uc3QgVCAmeCk6IGRhdGEoeCksIG5leHQoTlVMTCkKICAgICAgICB7CiAgICAgICAgfSAgICAgICAgCiAgICB9OwogCiAgICB0eXBlZGVmIG5vZGUgKiBwbm9kZTsKICAgIHBub2RlIGhlYWQsdGFpbDsKICAgIHB1YmxpYzoKICAgIFFVRVVFKCk7CiAgICBib29sIGVtcHR5KCljb25zdCAvLyBjenkgdG8gamVzdCB0ZcW8IGRvYnJ6ZSBuYXBpc2FuZSA/PyAKICAgIHsKICAgICAgICByZXR1cm4gaGVhZCA9PSBOVUxMOwogICAgfQogCiAgICB2b2lkIHB1dChUKTsKICAgIFQgZ2V0KCk7CiAgICB2b2lkIHd5cGlzeigpY29uc3Q7CiAgICB+UVVFVUUoKTsgCn07CiAKdGVtcGxhdGU8Y2xhc3MgVD4KIApRVUVVRTxUPjo6UVVFVUUoKQp7CiAgICBoZWFkID0gTlVMTDsKfQogCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkIFFVRVVFPFQ+OjpwdXQgKFQgeCkKewogICAgaWYgKGVtcHR5KCkpCiAgICBoZWFkID0gdGFpbCA9IG5ldyBub2RlKHgpOwogICAgZWxzZQogICAgewogICAgICAgIHBub2RlIHBvbSA9IHRhaWw7CiAgICAgICAgdGFpbCA9IG5ldyBub2RlKHgpOwogICAgICAgIHBvbSAtPm5leHQgPXRhaWw7IAogICAgfQp9CiAKdGVtcGxhdGU8Y2xhc3MgVD4KVCBRVUVVRTxUPjo6Z2V0KCkKewogICAgaWYgKGVtcHR5KCkpCiAgICB0aHJvdyBvdXRfb2ZfcmFuZ2UgKCJLb2xlamthIHB1c3RhIik7CiAgICBUIHRlbXAgPSBoZWFkIC0+IGRhdGE7CiAgICBwbm9kZSBzdGFyYSA9IGhlYWQ7CiAgICBoZWFkID0gaGVhZCAtPiBuZXh0OwogICAgZGVsZXRlIHN0YXJhOwogICAgcmV0dXJuIHRlbXA7Cn0KCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICAgICAgICAgdm9pZCBRVUVVRTxUPjo6d3lwaXN6KCljb25zdAogICAgIHsgcG5vZGUgcG9tb2M9aGVhZDsKICAgICAgICAgICAgIHdoaWxlKHBvbW9jICE9IE5VTEwpCiAgICAgICAgICAgICB7ICAgIAogICAgICAgICAgICAgY291dDw8cG9tb2MtPmRhdGE8PGVuZGw7CiAgICAgICAgICAgICBwb21vYz1wb21vYy0+bmV4dDsKIAogICAgICAgICAgICAgfQogICAgICAgICB9CgogCnRlbXBsYXRlIDxjbGFzcyBUPiAvLyBDenkgZGVzdHJ1a3RvciBqZXN0IGRvYnJ6ZSBuYXBpc2FueSA/PwpRVUVVRTxUPjo6flFVRVVFKCkKewogICAgd2hpbGUoaGVhZCAhPSBOVUxMKQogICAgZ2V0KCk7Cn0KCgppbnQgbWFpbigpCnsKICAgUVVFVUU8aW50PiBrb2xlamthOwogICBjb3V0PDxlbmRsOwogICBjb3V0PDwiQ3p5IGtvbGVqa2EgcHVzdGE6ICI8PGtvbGVqa2EuZW1wdHkoKTw8ZW5kbDsKICAga29sZWprYS5wdXQoNSk7CiAgY291dDw8IkN6eSBrb2xlamthIHB1c3RhOiAiPDxrb2xlamthLmVtcHR5KCk8PGVuZGw7CmtvbGVqa2EucHV0KDEwKTsKa29sZWprYS5wdXQoMTUpOwprb2xlamthLnB1dCgxMSk7CmtvbGVqa2EucHV0KDQpOwprb2xlamthLnB1dCgzKTsKa29sZWprYS5wdXQoMik7CmtvbGVqa2EucHV0KDEpOwprb2xlamthLnB1dCg3KTsKa29sZWprYS5wdXQoOCk7CmtvbGVqa2EucHV0KDIxKTsKY291dDw8ZW5kbDsKa29sZWprYS53eXBpc3ooKTsKY291dDw8ZW5kbDsKICAgIHJldHVybiAwOwp9Cgo=