/*Implementation of "queue" with basic operations using LINKED LIST */
#include<iostream>
using namespace std;
struct node{
int val;
node * next;
} * head= NULL , * tail= NULL ;
void ENQUE( int key) ; // ~insertion
int DEQUEUE( ) ; // ~deletion
void TRAVERSE( ) ;
bool isEmpty( ) ;
// a q implemented using linked list can never be full theoretically
int main( ) {
int ch,key;
do {
cout << "1. Insertion\n 2. Deletion\n 3. Traverse\n 4. Exit\n " ;
cout << "Enter your choice : " ;
cin >> ch;
switch ( ch) {
case 1 : cout << "Enter the value to be inserted :" ;
cin >> key;
ENQUE( key) ;
TRAVERSE( ) ;
break ;
case 2 : if ( ! isEmpty( ) ) {
cout << DEQUEUE( ) << " deleted successfully.\n " ;
TRAVERSE( ) ;
}
else
cout << "Empty Queue !!!\n " ;
break ;
case 3 : TRAVERSE( ) ;
break ;
case 4 : cout << "Exiting..." ;
break ;
default : cout << "Invalid choice. Please try again.." ;
}
} while ( ch! = 4 ) ;
return 0 ;
}
void ENQUE( int x) {
if ( tail== NULL ) {
tail = new node( ) ;
tail- > val = x;
tail- > next= NULL ;
head= tail;
}
else {
tail- > next = new node( ) ;
tail = tail- > next;
tail- > val = x;
tail- > next= NULL ;
}
}
int DEQUEUE( ) {
node * temp = head;
int item = head- > val;
head = head- > next;
delete ( temp) ;
if ( head== NULL )
tail= NULL ;
return item;
}
void TRAVERSE( ) {
if ( ! isEmpty( ) ) {
node * ptr = head;
cout << "\n head" ;
while ( ptr) {
cout << " -> " << ptr- > val;
ptr= ptr- > next;
}
cout << " <- tail\n " ;
cout << endl;
}
else
cout << "Empty Queue !!!\n " ;
}
bool isEmpty( ) {
if ( tail== NULL && head== NULL )
return true ;
else
return false ;
}
LypJbXBsZW1lbnRhdGlvbiBvZiAicXVldWUiIHdpdGggYmFzaWMgb3BlcmF0aW9ucyB1c2luZyBMSU5LRUQgTElTVCAqLwojaW5jbHVkZTxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBub2RlewogICAgaW50IHZhbDsKICAgIG5vZGUgKm5leHQ7Cn0qaGVhZD1OVUxMLCAqdGFpbD1OVUxMOwoKCnZvaWQgRU5RVUUoaW50IGtleSk7ICAgICAgICAvLyB+aW5zZXJ0aW9uCmludCAgREVRVUVVRSgpOyAgICAgICAgICAgIC8vIH5kZWxldGlvbgp2b2lkIFRSQVZFUlNFKCk7CmJvb2wgaXNFbXB0eSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgcSBpbXBsZW1lbnRlZCB1c2luZyBsaW5rZWQgbGlzdCBjYW4gbmV2ZXIgYmUgZnVsbCB0aGVvcmV0aWNhbGx5CmludCBtYWluKCl7CiAgICBpbnQgY2gsa2V5OwogICAgZG97CiAgICAgICAgY291dDw8IjEuIEluc2VydGlvblxuMi4gRGVsZXRpb25cbjMuIFRyYXZlcnNlXG40LiBFeGl0XG4iOwogICAgICAgIGNvdXQ8PCJFbnRlciB5b3VyIGNob2ljZSA6ICI7CiAgICAgICAgY2luPj5jaDsKICAgICAgICBzd2l0Y2goY2gpewogICAgICAgICAgICBjYXNlIDEgOiBjb3V0PDwiRW50ZXIgdGhlIHZhbHVlIHRvIGJlIGluc2VydGVkIDoiOwogICAgICAgICAgICAgICAgICAgIGNpbj4+a2V5OwogICAgICAgICAgICAgICAgICAgIEVOUVVFKGtleSk7CiAgICAgICAgICAgICAgICAgICAgVFJBVkVSU0UoKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAyIDogaWYoIWlzRW1wdHkoKSl7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQ8PERFUVVFVUUoKTw8IiBkZWxldGVkIHN1Y2Nlc3NmdWxseS5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIFRSQVZFUlNFKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY291dDw8IkVtcHR5IFF1ZXVlICEhIVxuIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAzIDogVFJBVkVSU0UoKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSA0IDpjb3V0PDwiRXhpdGluZy4uLiI7IAogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OiBjb3V0PDwiSW52YWxpZCBjaG9pY2UuIFBsZWFzZSB0cnkgYWdhaW4uLiI7CiAgICAgICAgfQogICAgfXdoaWxlKGNoIT00KTsKICAgIHJldHVybiAwOwp9Cgp2b2lkIEVOUVVFKGludCB4KXsKICAgIGlmKHRhaWw9PU5VTEwpewogICAgICAgIHRhaWwgPSBuZXcgbm9kZSgpOwogICAgICAgIHRhaWwtPnZhbCA9eDsKICAgICAgICB0YWlsLT5uZXh0PU5VTEw7CiAgICAgICAgaGVhZD10YWlsOwogICAgfQogICAgZWxzZXsKICAgICAgICB0YWlsLT5uZXh0ID0gbmV3IG5vZGUoKTsKICAgICAgICB0YWlsID0gdGFpbC0+bmV4dDsKICAgICAgICB0YWlsLT52YWwgPXg7CiAgICAgICAgdGFpbC0+bmV4dD1OVUxMOwogICAgfQp9CgppbnQgIERFUVVFVUUoKXsKICAgIG5vZGUgKnRlbXAgPSBoZWFkOwogICAgaW50IGl0ZW0gPWhlYWQtPnZhbDsKCiAgICBoZWFkID0gaGVhZC0+bmV4dDsKICAgIGRlbGV0ZSh0ZW1wKTsKCiAgICBpZihoZWFkPT1OVUxMKQogICAgICAgIHRhaWw9TlVMTDsKICAgIHJldHVybiBpdGVtOwp9Cgp2b2lkIFRSQVZFUlNFKCl7CiAgICBpZighaXNFbXB0eSgpKXsKICAgICAgICBub2RlICpwdHIgPSBoZWFkOwogICAgICAgIGNvdXQ8PCJcbmhlYWQiOwogICAgICAgIHdoaWxlKHB0cil7CgogICAgICAgICAgICBjb3V0PDwiIC0+ICI8PHB0ci0+dmFsOwogICAgICAgICAgICBwdHI9cHRyLT5uZXh0OwogICAgICAgIH0KICAgICAgICBjb3V0PDwiIDwtIHRhaWxcbiI7CiAgICAgICAgY291dDw8ZW5kbDsKICAgIH0KICAgIGVsc2UKICAgICAgICBjb3V0PDwiRW1wdHkgUXVldWUgISEhXG4iOwp9Cgpib29sIGlzRW1wdHkoKXsKICAgIGlmKHRhaWw9PU5VTEwgJiYgaGVhZD09TlVMTCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIGVsc2UKICAgICAgICByZXR1cm4gZmFsc2U7Cn0K