//Nick
#include <cstddef>
#ifndef DOUBLY_LINKED_LIST
#define DOUBLY_LINKED_LIST
template <class T>
class IntDLLNode {
friend class IntDLList;
public:
IntDLLNode(){next = prev = NULL;}
IntDLLNode(const T& el, IntDLLNode *n = NULL, IntDLLNode *p = NULL){
info = el;
next = n;
prev = p;
}
// protected:
T info;
IntDLLNode<T> *next, *prev;
};
template<class T> class IntDLList {
public:
IntDLList(){head = tail = NULL;}
void addToDLLTail(const T& el);
void addToDLLHead(const T& el);
void deleteNode(const T& el);
bool isInList(const T& el) const;
T deleteFromDLLTail();
T deleteFromDLLHead();
void addSorted(int);
void printList();
private:
IntDLLNode<T> *head, *tail;
};
#endif // DOUBLY_LINKED_LIST
#include <cstddef>
#include <iostream>
using namespace std;
template<class T>
void IntDLList<T>::addToDLLHead(const T& el){
if(head!=NULL){
head = new IntDLLNode<T>(el,head,NULL);
head->prev=head;
}
else head = tail = new IntDLLNode<T>(el);
}
template<class T>
void IntDLList<T>::addToDLLTail(const T& el){
if(tail!=NULL){
tail = new IntDLLNode<T>(el,NULL,tail);
tail->prev->next = tail;
}
else head = tail = new IntDLLNode<T>(el);
}
template<class T>
T IntDLList<T>::deleteFromDLLTail(){
if(head!=NULL){
T el = tail->info;
if(head == tail) {
delete tail;
head = tail = NULL;
}
else {
tail = tail-> prev;
delete tail->next;
tail->next = NULL;
}
return el;
}
else throw(20);
}
template<class T>
T IntDLList<T>::deleteFromDLLHead(){
if(head!=NULL){
int el = head->info;
IntDLLNode<T> *tmp = head;
if(head == tail){
head = tail = NULL;
}
else{head = head->next;}
delete tmp;
return(el);
}
else throw(20);
}
template<class T>
void IntDLList<T>::deleteNode(const T& el){
if(head!=NULL){
if(head == tail && el == head->info){
delete head;
head = tail = NULL;
}
else if(el == head->info){
IntDLLNode<T> *tmp = head;
head = head->next;
delete tmp;
}
else{
IntDLLNode<T> *els, *tmp;
for(els = head, tmp = head->next;
tmp!=NULL && tmp-> info!= el;
els = els->next, tmp = tmp->next);
if(tmp!=NULL){
els->next = tmp->next;
if(tmp == tail)
tail = els;
delete tmp;
}
}
}
}
template<class T>
bool IntDLList<T>::isInList(const T& el) const{
IntDLLNode<T> *tmp;
for(tmp=head;tmp!=NULL && tmp->info!= el;
tmp = tmp->next);
return(tmp!=NULL);
}
template<class T>
void IntDLList<T>::addSorted(int i) {
IntDLLNode<T> *tmp;
if(head==NULL)
head = tail = new IntDLLNode<T>(i);
else if(head!=NULL){
for(tmp=head;tmp!=NULL && tmp->info <= i;){
if(tmp->next->info >= i){
new IntDLLNode<T>(i,tmp,tmp->next);
break;
}
else{ tmp = tmp->next;}
}
}
}
template<class T>
void IntDLList<T>::printList(){
IntDLLNode<T> *tmp;
if(head!=NULL){
for(tmp=head; tmp!=NULL; tmp = tmp->next){
cout << tmp->info;
}
}
}
void f(){
try{
//int val = list.deleteFromHead();
}
catch(int error_code)
{
cerr << "Error: " <<error_code << endl;
switch (error_code){
default: cout << "error!!" << endl;
}
}
}
#include <iostream>
#include <stdio.h>
#include <list>
using namespace std;
int main()
{
int choice, choice2, numero;
cout << "Select an option\n" << endl;
cout << "1. Create Simple List" << endl;
cout << "2. Create Sorted List" << endl;
cout << "3. Create FIFO Queue" <<endl;
cout << "4. Create LIFO Queue" <<endl;
cout << "5. Exit Program" << endl;
cin >> choice;
IntDLList<int> dll;
switch(choice){
case 1:
switch(choice2){
//add to head
case 1:
cin >> numero;
dll.addToDLLHead(numero);
//add to tail
case 2:
cin >> numero;
dll.addToDLLTail(numero);
//delete head
case 3:
//display integer at head of list
dll.deleteFromDLLHead();
//delete tail
case 4:
//display integer at tail of list
dll.deleteFromDLLTail();
//delete integer from list
case 5:
cin >> numero;
dll.deleteNode(numero);
case 6:
dll.printList();
case 7: break;
}
case 2:
switch(choice2){
//add integer in sorted order
case 1:
cin >> numero;
dll.addSorted(numero);
//delete integer node
case 2:
cin >> numero;
dll.deleteNode(numero);
//print list
case 3: dll.printList();
//end program
case 4: break;
}
case 3:
switch(choice2){
//enqueue
case 1:
cin >> numero;
dll.addToDLLTail(numero);
//dequeue
case 2:
cin >> numero;
dll.deleteFromDLLHead();
//print FIFO
case 3: dll.printList();
//end
case 4: break;
}
case 4:
switch(choice2){
//add to stack
case 1:
cin >> numero;
dll.addToDLLHead(numero);
//delete from stack
case 2:
dll.deleteFromDLLHead();
//print stack
case 3: dll.printList();
//end program
case 4: break;
}
case 5: break;
}
}
Ly9OaWNrCgojaW5jbHVkZSA8Y3N0ZGRlZj4KI2lmbmRlZiBET1VCTFlfTElOS0VEX0xJU1QKI2RlZmluZSBET1VCTFlfTElOS0VEX0xJU1QKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBJbnRETExOb2RlICAgIHsKCmZyaWVuZCBjbGFzcyBJbnRETExpc3Q7CgogICAgcHVibGljOgogICAgICAgIEludERMTE5vZGUoKXtuZXh0ID0gcHJldiA9IE5VTEw7fQoKICAgICAgICBJbnRETExOb2RlKGNvbnN0IFQmIGVsLCBJbnRETExOb2RlICpuID0gTlVMTCwgSW50RExMTm9kZSAqcCA9IE5VTEwpewogICAgICAgICAgICBpbmZvID0gZWw7CiAgICAgICAgICAgIG5leHQgPSBuOwogICAgICAgICAgICBwcmV2ID0gcDsKICAgICAgICB9CgogICAvLyBwcm90ZWN0ZWQ6CiAgICAgICAgVCBpbmZvOwogICAgICAgIEludERMTE5vZGU8VD4gKm5leHQsICpwcmV2Owp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgSW50RExMaXN0IHsKCiAgICBwdWJsaWM6CgogICAgICAgIEludERMTGlzdCgpe2hlYWQgPSB0YWlsID0gTlVMTDt9CgogICAgICAgIHZvaWQgYWRkVG9ETExUYWlsKGNvbnN0IFQmIGVsKTsKICAgICAgICB2b2lkIGFkZFRvRExMSGVhZChjb25zdCBUJiBlbCk7CiAgICAgICAgdm9pZCBkZWxldGVOb2RlKGNvbnN0IFQmIGVsKTsKICAgICAgICBib29sIGlzSW5MaXN0KGNvbnN0IFQmIGVsKSBjb25zdDsKICAgICAgICBUIGRlbGV0ZUZyb21ETExUYWlsKCk7CiAgICAgICAgVCBkZWxldGVGcm9tRExMSGVhZCgpOwogICAgICAgIHZvaWQgYWRkU29ydGVkKGludCk7CiAgICAgICAgdm9pZCBwcmludExpc3QoKTsKCiAgICBwcml2YXRlOgoKICAgICAgICBJbnRETExOb2RlPFQ+ICpoZWFkLCAqdGFpbDsKCn07CiNlbmRpZiAvLyBET1VCTFlfTElOS0VEX0xJU1QKCiNpbmNsdWRlIDxjc3RkZGVmPgojaW5jbHVkZSA8aW9zdHJlYW0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8Y2xhc3MgVD4Kdm9pZCBJbnRETExpc3Q8VD46OmFkZFRvRExMSGVhZChjb25zdCBUJiBlbCl7CiAgICBpZihoZWFkIT1OVUxMKXsKICAgICAgICBoZWFkID0gbmV3IEludERMTE5vZGU8VD4oZWwsaGVhZCxOVUxMKTsKICAgICAgICBoZWFkLT5wcmV2PWhlYWQ7CiAgICB9CiAgICBlbHNlIGhlYWQgPSB0YWlsID0gbmV3IEludERMTE5vZGU8VD4oZWwpOwogICAgfQoKdGVtcGxhdGU8Y2xhc3MgVD4Kdm9pZCBJbnRETExpc3Q8VD46OmFkZFRvRExMVGFpbChjb25zdCBUJiBlbCl7CiAgICBpZih0YWlsIT1OVUxMKXsKICAgICAgICB0YWlsID0gbmV3IEludERMTE5vZGU8VD4oZWwsTlVMTCx0YWlsKTsKICAgICAgICB0YWlsLT5wcmV2LT5uZXh0ID0gdGFpbDsKICAgIH0KICAgIGVsc2UgaGVhZCA9IHRhaWwgPSBuZXcgSW50RExMTm9kZTxUPihlbCk7CiAgICB9CnRlbXBsYXRlPGNsYXNzIFQ+ClQgSW50RExMaXN0PFQ+OjpkZWxldGVGcm9tRExMVGFpbCgpewogICAgICAgIGlmKGhlYWQhPU5VTEwpewogICAgICAgICAgICBUIGVsID0gdGFpbC0+aW5mbzsKICAgICAgICAgICAgaWYoaGVhZCA9PSB0YWlsKSAgICB7CiAgICAgICAgICAgICAgICBkZWxldGUgdGFpbDsKICAgICAgICAgICAgICAgIGhlYWQgPSB0YWlsID0gTlVMTDsKICAgICAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgdGFpbCA9IHRhaWwtPiBwcmV2OwogICAgICAgICAgICBkZWxldGUgdGFpbC0+bmV4dDsKICAgICAgICAgICAgdGFpbC0+bmV4dCA9IE5VTEw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZWw7CiAgICAgICAgfQogICAgICAgIGVsc2UgdGhyb3coMjApOwogICAgICAgICAgICB9Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpUIEludERMTGlzdDxUPjo6ZGVsZXRlRnJvbURMTEhlYWQoKXsKICAgIGlmKGhlYWQhPU5VTEwpewogICAgICAgIGludCBlbCA9IGhlYWQtPmluZm87CiAgICAgICAgSW50RExMTm9kZTxUPiAqdG1wID0gaGVhZDsKCiAgICAgICAgaWYoaGVhZCA9PSB0YWlsKXsKICAgICAgICAgICAgaGVhZCA9IHRhaWwgPSBOVUxMOwogICAgICAgIH0KCiAgICAgICAgZWxzZXtoZWFkID0gaGVhZC0+bmV4dDt9CiAgICAgICAgZGVsZXRlIHRtcDsKICAgICAgICByZXR1cm4oZWwpOwogICAgfQogICAgZWxzZSB0aHJvdygyMCk7Cn0KCnRlbXBsYXRlPGNsYXNzIFQ+CnZvaWQgSW50RExMaXN0PFQ+OjpkZWxldGVOb2RlKGNvbnN0IFQmIGVsKXsKICAgIGlmKGhlYWQhPU5VTEwpewoKICAgICAgICBpZihoZWFkID09IHRhaWwgJiYgZWwgPT0gaGVhZC0+aW5mbyl7CiAgICAgICAgICAgIGRlbGV0ZSBoZWFkOwogICAgICAgICAgICBoZWFkID0gdGFpbCA9IE5VTEw7CiAgICAgICAgfQoKICAgICAgICBlbHNlIGlmKGVsID09IGhlYWQtPmluZm8pewogICAgICAgICAgICBJbnRETExOb2RlPFQ+ICp0bXAgPSBoZWFkOwogICAgICAgICAgICBoZWFkID0gaGVhZC0+bmV4dDsKICAgICAgICAgICAgZGVsZXRlIHRtcDsKICAgICAgICB9CgogICAgICAgIGVsc2V7CiAgICAgICAgICAgIEludERMTE5vZGU8VD4gKmVscywgKnRtcDsKCiAgICAgICAgICAgIGZvcihlbHMgPSBoZWFkLCB0bXAgPSBoZWFkLT5uZXh0OwogICAgICAgICAgICAgICAgdG1wIT1OVUxMICYmIHRtcC0+IGluZm8hPSBlbDsKICAgICAgICAgICAgICAgIGVscyA9IGVscy0+bmV4dCwgdG1wID0gdG1wLT5uZXh0KTsKICAgICAgICAgICAgICAgIGlmKHRtcCE9TlVMTCl7CiAgICAgICAgICAgICAgICAgICAgZWxzLT5uZXh0ID0gdG1wLT5uZXh0OwoKICAgICAgICAgICAgICAgICAgICBpZih0bXAgPT0gdGFpbCkKICAgICAgICAgICAgICAgICAgICAgICAgdGFpbCA9IGVsczsKCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRtcDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCnRlbXBsYXRlPGNsYXNzIFQ+CmJvb2wgSW50RExMaXN0PFQ+Ojppc0luTGlzdChjb25zdCBUJiBlbCkgY29uc3R7CkludERMTE5vZGU8VD4gKnRtcDsKZm9yKHRtcD1oZWFkO3RtcCE9TlVMTCAmJiB0bXAtPmluZm8hPSBlbDsKICAgIHRtcCA9IHRtcC0+bmV4dCk7CnJldHVybih0bXAhPU5VTEwpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUPgp2b2lkIEludERMTGlzdDxUPjo6YWRkU29ydGVkKGludCBpKSB7CkludERMTE5vZGU8VD4gKnRtcDsKICAgIGlmKGhlYWQ9PU5VTEwpCiAgICAgICAgaGVhZCA9IHRhaWwgPSBuZXcgSW50RExMTm9kZTxUPihpKTsKICAgIGVsc2UgaWYoaGVhZCE9TlVMTCl7CiAgICAgICAgZm9yKHRtcD1oZWFkO3RtcCE9TlVMTCAmJiB0bXAtPmluZm8gPD0gaTspewogICAgICAgICAgICBpZih0bXAtPm5leHQtPmluZm8gPj0gaSl7CiAgICAgICAgICAgICAgICBuZXcgSW50RExMTm9kZTxUPihpLHRtcCx0bXAtPm5leHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZXsgdG1wID0gdG1wLT5uZXh0O30KICAgICAgICB9CiAgICB9Cn0KCnRlbXBsYXRlPGNsYXNzIFQ+CnZvaWQgSW50RExMaXN0PFQ+OjpwcmludExpc3QoKXsKSW50RExMTm9kZTxUPiAqdG1wOwogICAgaWYoaGVhZCE9TlVMTCl7CiAgICAgICAgZm9yKHRtcD1oZWFkOyB0bXAhPU5VTEw7IHRtcCA9IHRtcC0+bmV4dCl7CiAgICAgICAgICAgIGNvdXQgPDwgdG1wLT5pbmZvOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBmKCl7CiAgICB0cnl7CiAgICAvL2ludCB2YWwgPSBsaXN0LmRlbGV0ZUZyb21IZWFkKCk7CiAgICB9CiAgICBjYXRjaChpbnQgZXJyb3JfY29kZSkKCiAgICB7CiAgICAgICAgY2VyciA8PCAiRXJyb3I6ICIgPDxlcnJvcl9jb2RlIDw8IGVuZGw7CiAgICAgICAgc3dpdGNoIChlcnJvcl9jb2RlKXsKICAgICAgICBkZWZhdWx0OiBjb3V0IDw8ICJlcnJvciEhIiA8PCBlbmRsOwogICAgICAgIH0KICAgIH0KfQoKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPGxpc3Q+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKQp7CgppbnQgY2hvaWNlLCBjaG9pY2UyLCBudW1lcm87CmNvdXQgPDwgIlNlbGVjdCBhbiBvcHRpb25cbiIgPDwgZW5kbDsKY291dCA8PCAiMS4gQ3JlYXRlIFNpbXBsZSBMaXN0IiA8PCBlbmRsOwpjb3V0IDw8ICIyLiBDcmVhdGUgU29ydGVkIExpc3QiIDw8IGVuZGw7CmNvdXQgPDwgIjMuIENyZWF0ZSBGSUZPIFF1ZXVlIiA8PGVuZGw7CmNvdXQgPDwgIjQuIENyZWF0ZSBMSUZPIFF1ZXVlIiA8PGVuZGw7CmNvdXQgPDwgIjUuIEV4aXQgUHJvZ3JhbSIgPDwgZW5kbDsKY2luID4+IGNob2ljZTsKCkludERMTGlzdDxpbnQ+IGRsbDsKCnN3aXRjaChjaG9pY2UpewoKY2FzZSAxOgogICAgc3dpdGNoKGNob2ljZTIpewogICAgICAgIC8vYWRkIHRvIGhlYWQKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIGNpbiA+PiBudW1lcm87CiAgICAgICAgICAgIGRsbC5hZGRUb0RMTEhlYWQobnVtZXJvKTsKICAgICAgICAvL2FkZCB0byB0YWlsCiAgICAgICAgY2FzZSAyOgogICAgICAgICAgICBjaW4gPj4gbnVtZXJvOwogICAgICAgICAgICBkbGwuYWRkVG9ETExUYWlsKG51bWVybyk7CiAgICAgICAgLy9kZWxldGUgaGVhZAogICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgLy9kaXNwbGF5IGludGVnZXIgYXQgaGVhZCBvZiBsaXN0CiAgICAgICAgICAgIGRsbC5kZWxldGVGcm9tRExMSGVhZCgpOwogICAgICAgIC8vZGVsZXRlIHRhaWwKICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgIC8vZGlzcGxheSBpbnRlZ2VyIGF0IHRhaWwgb2YgbGlzdAogICAgICAgICAgICBkbGwuZGVsZXRlRnJvbURMTFRhaWwoKTsKICAgICAgICAvL2RlbGV0ZSBpbnRlZ2VyIGZyb20gbGlzdAogICAgICAgIGNhc2UgNToKICAgICAgICAgICAgY2luID4+IG51bWVybzsKICAgICAgICAgICAgZGxsLmRlbGV0ZU5vZGUobnVtZXJvKTsKICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgIGRsbC5wcmludExpc3QoKTsKICAgICAgICBjYXNlIDc6IGJyZWFrOwogICAgfQoKY2FzZSAyOgogICAgc3dpdGNoKGNob2ljZTIpewogICAgICAgIC8vYWRkIGludGVnZXIgaW4gc29ydGVkIG9yZGVyCiAgICAgICAgY2FzZSAxOgogICAgICAgICAgICBjaW4gPj4gbnVtZXJvOwogICAgICAgICAgICBkbGwuYWRkU29ydGVkKG51bWVybyk7CiAgICAgICAgLy9kZWxldGUgaW50ZWdlciBub2RlCiAgICAgICAgY2FzZSAyOgogICAgICAgICAgICBjaW4gPj4gbnVtZXJvOwogICAgICAgICAgICBkbGwuZGVsZXRlTm9kZShudW1lcm8pOwogICAgICAgIC8vcHJpbnQgbGlzdAogICAgICAgIGNhc2UgMzogZGxsLnByaW50TGlzdCgpOwogICAgICAgIC8vZW5kIHByb2dyYW0KICAgICAgICBjYXNlIDQ6IGJyZWFrOwogICAgfQoKY2FzZSAzOgogICAgc3dpdGNoKGNob2ljZTIpewogICAgICAgIC8vZW5xdWV1ZQogICAgICAgIGNhc2UgMToKICAgICAgICAgICAgY2luID4+IG51bWVybzsKICAgICAgICAgICAgZGxsLmFkZFRvRExMVGFpbChudW1lcm8pOwogICAgICAgIC8vZGVxdWV1ZQogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgY2luID4+IG51bWVybzsKICAgICAgICAgICAgZGxsLmRlbGV0ZUZyb21ETExIZWFkKCk7CiAgICAgICAgLy9wcmludCBGSUZPCiAgICAgICAgY2FzZSAzOiBkbGwucHJpbnRMaXN0KCk7CiAgICAgICAgLy9lbmQKICAgICAgICBjYXNlIDQ6IGJyZWFrOwogICAgfQoKY2FzZSA0OgogICAgc3dpdGNoKGNob2ljZTIpewogICAgICAgIC8vYWRkIHRvIHN0YWNrCiAgICAgICAgY2FzZSAxOgogICAgICAgICAgICBjaW4gPj4gbnVtZXJvOwogICAgICAgICAgICBkbGwuYWRkVG9ETExIZWFkKG51bWVybyk7CiAgICAgICAgLy9kZWxldGUgZnJvbSBzdGFjawogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgZGxsLmRlbGV0ZUZyb21ETExIZWFkKCk7CiAgICAgICAgLy9wcmludCBzdGFjawogICAgICAgIGNhc2UgMzogZGxsLnByaW50TGlzdCgpOwogICAgICAgIC8vZW5kIHByb2dyYW0KICAgICAgICBjYXNlIDQ6IGJyZWFrOwogICAgfQoKY2FzZSA1OiBicmVhazsKCn0KfQo=