#include<bits/stdc++.h>
using namespace std;
struct Node{
int reg;
float cg;
Node*next;
};
Node*InsertAtBegin(Node*root,int reg,float cg)
{
Node*newnode=new Node();
newnode->next=NULL;
newnode->reg=reg;
newnode->cg=cg;
if(root==NULL)
{
root=newnode;
return root;
}
else
{
newnode->next=root;
root=newnode;
return root;
}
}
Node*InsertAtPos(Node*root,int reg,float cg,int pos)
{
if(pos==0)
{
root=InsertAtBegin(root,reg,cg);
}
else
{
Node*newnode=new Node();
newnode->next=NULL;
newnode->reg=reg;
newnode->cg=cg;
Node*currnode;
currnode=root;
for(int i=1;i<pos;i++)
{
currnode=currnode->next;
}
newnode->next=currnode->next;
currnode->next=newnode;
}
return root;
}
Node*InsertAtEnd(Node*root,int reg,float cg)
{
Node*newnode=new Node();
newnode->next=NULL;
newnode->reg=reg;
newnode->cg=cg;
if(root==NULL)
{
root=newnode;
return root;
}
Node*currnode;
currnode=root;
while(currnode->next!=NULL)
{
currnode=currnode->next;
}
currnode->next=newnode;
return root;
}
Node*SortedInsert(Node*root,int reg,float cg)
{
Node*newnode=new Node();
newnode->reg=reg;
newnode->cg=cg;
newnode->next=NULL;
Node*currnode,*prevnode;
currnode=root;
prevnode=NULL;
if(root==NULL)
{
root=newnode;
return root;
}
if(reg<root->reg || cg<root->cg)
{
newnode->next=root;
root=newnode;
return root;
}
while(currnode!=NULL)
{
if(currnode->reg<reg || currnode->cg<cg)
{
prevnode=currnode;
currnode=currnode->next;
}
else
{
prevnode->next=newnode;
newnode->next=currnode;
return root;
}
}
prevnode->next=newnode;
newnode->next=NULL;
return root;
}
int Search(Node*root,int reg,float cg)
{
int pos=0;
Node*currnode;
currnode=root;
while(currnode!=NULL)
{
if(currnode->reg==reg || currnode->cg==cg)
{
return pos;
}
else
{
currnode=currnode->next;
pos++;
}
}
return -1;
}
void Print(Node*root)
{
Node*currnode;
currnode=root;
while(currnode!=NULL)
{
cout<<"reg:"<<currnode->reg<<"cg:"<<currnode->cg<<endl;
currnode=currnode->next;
}
cout<<endl;
}
int main()
{
Node*root=NULL;
root=InsertAtBegin(root,48,3.96);
root=InsertAtBegin(root,43,3.95);
root=InsertAtBegin(root,98,3.70);
Print(root);
root=InsertAtPos(root,67,3.91,0);
root=InsertAtPos(root,34,3.57,3);
Print(root);
root=InsertAtEnd(root,95,3.24);
root=InsertAtEnd(root,100,3.12);
Print(root);
root=SortedInsert(root,56,4.00);
root=SortedInsert(root,45,3.98);
root=SortedInsert(root,34,3.97);
Print(root);
cout<<"Positions of 56,4.00:"<<Search(root,56,4.00)<<endl;
cout<<"Positions of 102,3.98:"<<Search(root,102,3.98)<<endl;
}
CiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCBOb2RlewppbnQgcmVnOwpmbG9hdCBjZzsKTm9kZSpuZXh0Owp9OwpOb2RlKkluc2VydEF0QmVnaW4oTm9kZSpyb290LGludCByZWcsZmxvYXQgY2cpCnsKTm9kZSpuZXdub2RlPW5ldyBOb2RlKCk7Cm5ld25vZGUtPm5leHQ9TlVMTDsKbmV3bm9kZS0+cmVnPXJlZzsKbmV3bm9kZS0+Y2c9Y2c7CmlmKHJvb3Q9PU5VTEwpCnsKcm9vdD1uZXdub2RlOwpyZXR1cm4gcm9vdDsKfQplbHNlCnsKbmV3bm9kZS0+bmV4dD1yb290Owpyb290PW5ld25vZGU7CnJldHVybiByb290Owp9Cn0KTm9kZSpJbnNlcnRBdFBvcyhOb2RlKnJvb3QsaW50IHJlZyxmbG9hdCBjZyxpbnQgcG9zKQp7CmlmKHBvcz09MCkKewpyb290PUluc2VydEF0QmVnaW4ocm9vdCxyZWcsY2cpOwp9CmVsc2UKewpOb2RlKm5ld25vZGU9bmV3IE5vZGUoKTsKbmV3bm9kZS0+bmV4dD1OVUxMOwpuZXdub2RlLT5yZWc9cmVnOwpuZXdub2RlLT5jZz1jZzsKTm9kZSpjdXJybm9kZTsKY3Vycm5vZGU9cm9vdDsKZm9yKGludCBpPTE7aTxwb3M7aSsrKQp7CmN1cnJub2RlPWN1cnJub2RlLT5uZXh0Owp9Cm5ld25vZGUtPm5leHQ9Y3Vycm5vZGUtPm5leHQ7CmN1cnJub2RlLT5uZXh0PW5ld25vZGU7Cn0KcmV0dXJuIHJvb3Q7Cn0KTm9kZSpJbnNlcnRBdEVuZChOb2RlKnJvb3QsaW50IHJlZyxmbG9hdCBjZykKewpOb2RlKm5ld25vZGU9bmV3IE5vZGUoKTsKbmV3bm9kZS0+bmV4dD1OVUxMOwpuZXdub2RlLT5yZWc9cmVnOwpuZXdub2RlLT5jZz1jZzsKaWYocm9vdD09TlVMTCkKewpyb290PW5ld25vZGU7CnJldHVybiByb290Owp9Ck5vZGUqY3Vycm5vZGU7CmN1cnJub2RlPXJvb3Q7CndoaWxlKGN1cnJub2RlLT5uZXh0IT1OVUxMKQp7CmN1cnJub2RlPWN1cnJub2RlLT5uZXh0Owp9CmN1cnJub2RlLT5uZXh0PW5ld25vZGU7CnJldHVybiByb290Owp9CgpOb2RlKlNvcnRlZEluc2VydChOb2RlKnJvb3QsaW50IHJlZyxmbG9hdCBjZykKewpOb2RlKm5ld25vZGU9bmV3IE5vZGUoKTsKbmV3bm9kZS0+cmVnPXJlZzsKbmV3bm9kZS0+Y2c9Y2c7Cm5ld25vZGUtPm5leHQ9TlVMTDsKTm9kZSpjdXJybm9kZSwqcHJldm5vZGU7CmN1cnJub2RlPXJvb3Q7CnByZXZub2RlPU5VTEw7CmlmKHJvb3Q9PU5VTEwpCnsKcm9vdD1uZXdub2RlOwpyZXR1cm4gcm9vdDsKfQppZihyZWc8cm9vdC0+cmVnIHx8IGNnPHJvb3QtPmNnKQp7Cm5ld25vZGUtPm5leHQ9cm9vdDsKcm9vdD1uZXdub2RlOwpyZXR1cm4gcm9vdDsKfQp3aGlsZShjdXJybm9kZSE9TlVMTCkKewppZihjdXJybm9kZS0+cmVnPHJlZyB8fCBjdXJybm9kZS0+Y2c8Y2cpCnsKcHJldm5vZGU9Y3Vycm5vZGU7CmN1cnJub2RlPWN1cnJub2RlLT5uZXh0Owp9CmVsc2UKewpwcmV2bm9kZS0+bmV4dD1uZXdub2RlOwpuZXdub2RlLT5uZXh0PWN1cnJub2RlOwpyZXR1cm4gcm9vdDsKfQp9CnByZXZub2RlLT5uZXh0PW5ld25vZGU7Cm5ld25vZGUtPm5leHQ9TlVMTDsKcmV0dXJuIHJvb3Q7Cn0KaW50IFNlYXJjaChOb2RlKnJvb3QsaW50IHJlZyxmbG9hdCBjZykKewppbnQgcG9zPTA7Ck5vZGUqY3Vycm5vZGU7CmN1cnJub2RlPXJvb3Q7CndoaWxlKGN1cnJub2RlIT1OVUxMKQp7CmlmKGN1cnJub2RlLT5yZWc9PXJlZyB8fCBjdXJybm9kZS0+Y2c9PWNnKQp7CnJldHVybiBwb3M7Cn0KZWxzZQp7CmN1cnJub2RlPWN1cnJub2RlLT5uZXh0Owpwb3MrKzsKfQp9CnJldHVybiAtMTsKfQp2b2lkIFByaW50KE5vZGUqcm9vdCkKewpOb2RlKmN1cnJub2RlOwpjdXJybm9kZT1yb290Owp3aGlsZShjdXJybm9kZSE9TlVMTCkKewpjb3V0PDwicmVnOiI8PGN1cnJub2RlLT5yZWc8PCJjZzoiPDxjdXJybm9kZS0+Y2c8PGVuZGw7CmN1cnJub2RlPWN1cnJub2RlLT5uZXh0Owp9CmNvdXQ8PGVuZGw7Cn0KaW50IG1haW4oKQp7Ck5vZGUqcm9vdD1OVUxMOwoKcm9vdD1JbnNlcnRBdEJlZ2luKHJvb3QsNDgsMy45Nik7CnJvb3Q9SW5zZXJ0QXRCZWdpbihyb290LDQzLDMuOTUpOwpyb290PUluc2VydEF0QmVnaW4ocm9vdCw5OCwzLjcwKTsKUHJpbnQocm9vdCk7CnJvb3Q9SW5zZXJ0QXRQb3Mocm9vdCw2NywzLjkxLDApOwpyb290PUluc2VydEF0UG9zKHJvb3QsMzQsMy41NywzKTsKUHJpbnQocm9vdCk7CnJvb3Q9SW5zZXJ0QXRFbmQocm9vdCw5NSwzLjI0KTsKcm9vdD1JbnNlcnRBdEVuZChyb290LDEwMCwzLjEyKTsKUHJpbnQocm9vdCk7CnJvb3Q9U29ydGVkSW5zZXJ0KHJvb3QsNTYsNC4wMCk7CnJvb3Q9U29ydGVkSW5zZXJ0KHJvb3QsNDUsMy45OCk7CnJvb3Q9U29ydGVkSW5zZXJ0KHJvb3QsMzQsMy45Nyk7ClByaW50KHJvb3QpOwpjb3V0PDwiUG9zaXRpb25zIG9mIDU2LDQuMDA6Ijw8U2VhcmNoKHJvb3QsNTYsNC4wMCk8PGVuZGw7CmNvdXQ8PCJQb3NpdGlvbnMgb2YgMTAyLDMuOTg6Ijw8U2VhcmNoKHJvb3QsMTAyLDMuOTgpPDxlbmRsOwp9