Advertisement
Yeasir13

Doubly linked list

Feb 27th, 2020
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.57 KB | None | 0 0
  1. #include<iostream>
  2. #include<stdlib.h>
  3. #include<strings.h>
  4. using namespace std;
  5. struct node
  6. {
  7.     int roll;
  8.     char name[100];
  9.     node *next,*prev;
  10. };
  11. class doublylink
  12. {
  13.     node *head,*tail;
  14. public:
  15.     doublylink();
  16.     void insert1st();
  17.     void insertlast();
  18.     void insertbefore();
  19.     void insertafter();
  20.     void deletelist();
  21.     void deletefirst();
  22.     void deletelast();
  23.     void deleteinfo();
  24.     void traverse();
  25.     int findinfo();
  26.  
  27. };
  28. doublylink :: doublylink()
  29. {
  30.     head=tail=NULL;
  31. }
  32.  
  33. void doublylink::insert1st()
  34. {
  35.     node *newnode;
  36.     newnode=(node *)malloc(sizeof(node));
  37.     if(newnode==NULL)
  38.     {
  39.         cout<<"Allocation failed"<<endl;
  40.         exit(1);
  41.     }
  42.     cout<<"Enter name:";
  43.     cin>>newnode->name;
  44.     cout<<"Enter roll:";
  45.     cin>>newnode->roll;
  46.     if(head==NULL)
  47.     {
  48.         head=newnode;
  49.         tail=newnode;
  50.         newnode->next=NULL;
  51.         newnode->prev=NULL;
  52.     }
  53.     else
  54.     {
  55.         newnode->next=head;
  56.         newnode->prev=NULL;
  57.         head=newnode;
  58.     }
  59.  
  60.  
  61. }
  62. void doublylink::insertlast()
  63. {
  64.     node *newnode,*i;
  65.     newnode=(node *)malloc(sizeof(node));
  66.     cout<<"Enter name:";
  67.     cin>>newnode->name;
  68.     cout<<"Enter roll:";
  69.     cin>>newnode->roll;
  70.  
  71.     if(head==NULL)
  72.     {
  73.         head=newnode;
  74.         tail=newnode;
  75.         newnode->next=NULL;
  76.         newnode->prev=NULL;
  77.         return;
  78.     }
  79.     tail->next=newnode;
  80.     newnode->next=NULL;
  81.     newnode->prev=tail;
  82.     tail=newnode;
  83. }
  84. void doublylink::insertbefore()
  85. {
  86.     node *i;
  87.     i=head;
  88.     char n[100];
  89.     cout<<"Enter name before which you want to insert the data:";
  90.     cin>>n;
  91.     if(i==NULL)
  92.         cout<<"No record"<<endl;
  93.     if((strcmp(head->name,n)==0))
  94.     {
  95.         node *newnode;
  96.         newnode=(node *)malloc(sizeof(node));
  97.         cout<<"Enter name:";
  98.         cin>>newnode->name;
  99.         cout<<"\nEnter roll:";
  100.         cin>>newnode->roll;
  101.         newnode->next=head;
  102.         newnode->prev=NULL;
  103.         head=newnode;
  104.     }
  105.     else
  106.     {
  107.         int nodenumber=0,k;
  108.         for(i=head; i!=NULL; i=i->next)
  109.         {
  110.             nodenumber++;
  111.             if(strcmp(i->next->name,n)==0)
  112.                 break;
  113.         }
  114.         if(i==NULL)
  115.         {
  116.             cout<<"Not found";
  117.             return;
  118.         }
  119.         for(k=1,i=head; k<nodenumber; i=i->next,k++);
  120.         node *newnode;
  121.         newnode=(node *)malloc(sizeof(node));
  122.         cout<<"Enter name:";
  123.         cin>>newnode->name;
  124.         cout<<"\nEnter roll:";
  125.         cin>>newnode->roll;
  126.         (i->prev)->next=newnode;
  127.         newnode->prev=i->prev;
  128.         newnode->next=i;
  129.         i->prev=newnode;
  130.  
  131.     }
  132.  
  133. }
  134. void doublylink::insertafter()
  135. {
  136.     node *i;
  137.     i=head;
  138.     char n[100];
  139.     cout<<"Enter name after which you want to insert the data:";
  140.     cin>>n;
  141.     if(i==NULL)
  142.         cout<<"No record"<<endl;
  143.     if((strcmp(head->name,n)==0))
  144.     {
  145.         node *newnode;
  146.         newnode=(node *)malloc(sizeof(node));
  147.         cout<<"Enter name:";
  148.         cin>>newnode->name;
  149.         cout<<"\nEnter roll:";
  150.         cin>>newnode->roll;
  151.         newnode->next=head->next;
  152.         newnode->prev=head;
  153.     }
  154.     else
  155.     {
  156.         int nodenumber=0,k;
  157.         for(i=head; i!=NULL; i=i->next)
  158.         {
  159.             nodenumber++;
  160.             if(strcmp(i->next->name,n)==0)
  161.                 break;
  162.         }
  163.         if(i==NULL)
  164.         {
  165.             cout<<"Not found";
  166.             return;
  167.         }
  168.         for(k=1,i=head; k<nodenumber; i=i->next,k++);
  169.         node *newnode;
  170.         newnode=(node *)malloc(sizeof(node));
  171.         cout<<"Enter name:";
  172.         cin>>newnode->name;
  173.         cout<<"\nEnter roll:";
  174.         cin>>newnode->roll;
  175.         if(i->next==tail)
  176.         {
  177.             tail->next=newnode;
  178.             newnode->prev=tail;
  179.             newnode->next=NULL;
  180.             tail=newnode;
  181.         }
  182.         else
  183.         {
  184.             (i->next)->prev=newnode;
  185.             newnode->prev=i;
  186.             newnode->next=i->next;
  187.             i->next=newnode;
  188.         }
  189.  
  190.     }
  191.  
  192. }
  193. void doublylink::deletelist()
  194. {
  195.     node *i,*temp;
  196.     for(i=head; i!=NULL; )
  197.     {
  198.         temp=i->next;
  199.         free(i);
  200.         i=temp;
  201.     }
  202.     head=NULL;
  203.  
  204. }
  205. void doublylink::deletefirst()
  206. {
  207.     if(head==NULL)//No node
  208.         return;
  209.     else if(head==tail)//only one node
  210.     {
  211.         free(head);
  212.         head=tail=NULL;
  213.         return;
  214.     }
  215.     else
  216.     {
  217.         node *temp= head;
  218.         head=head->next;
  219.         free(temp);
  220.     }
  221.  
  222. }
  223. void doublylink::deletelast()
  224. {
  225.     node *temp;
  226.     if(head==NULL)//No node
  227.     {
  228.         cout<<"Nothing to delete"<<endl;;
  229.         return;
  230.     }
  231.     else if(head==tail)//only one node
  232.     {
  233.         free(head);
  234.         head=tail=NULL;
  235.         return;
  236.     }
  237.     else
  238.     {
  239.         temp=tail;
  240.         (tail->prev)->next=NULL;
  241.         tail=tail->prev;
  242.         free(temp);
  243.     }
  244.  
  245. }
  246. void doublylink::deleteinfo()
  247. {
  248.     node *temp,*i;
  249.     char n[100];
  250.     cout<<"Enter name you want to delete:";
  251.     cin>>n;
  252.  
  253.     if(head==NULL)
  254.     {
  255.         cout<<"Nothing to delete"<<endl;;
  256.         return;
  257.     }
  258.     //If name matches with first node
  259.     else if(head==tail)//only one node
  260.     {
  261.         free(head);
  262.         head=tail=NULL;
  263.         return;
  264.     }
  265.     else
  266.     {
  267.  
  268.  
  269.         //check other nodes
  270.         int k=0;
  271.         for(i=head; i!=NULL; i=i->next)
  272.         {
  273.             k++;
  274.             if(strcmp(i->name,n)==0)
  275.                 break;
  276.         }
  277.         if(i==NULL)
  278.         {
  279.             cout<<"Not found";
  280.             return;
  281.         }
  282.         else if(i==tail)
  283.         {
  284.             deletelast();
  285.         }
  286.         else if(i==head)
  287.         {
  288.             deletefirst();
  289.         }
  290.         else
  291.         {
  292.             temp=i;
  293.             (i->prev)->next=temp->next;
  294.             (i->next)->prev=temp->prev;
  295.             free(temp);
  296.  
  297.         }
  298.  
  299.     }
  300. }
  301. int doublylink::findinfo()
  302. {
  303.     char n[100];
  304.     int k=0;
  305.     node *i;
  306.     cout<<"Enter name you want to search:";
  307.     cin>>n;
  308.     for(i=head; i!=NULL; i=i->next)
  309.     {
  310.         k++;
  311.         if(strcmp(i->name,n)==0)
  312.         {
  313.             cout<<"Found at node:"<<k<<endl;
  314.             return k;
  315.         }
  316.     }
  317.     if(i==NULL)
  318.     {
  319.         cout<<"Not found"<<endl;
  320.         return 0;
  321.     }
  322.     system("PAUSE");
  323. }
  324. void doublylink::traverse()
  325. {
  326.     node *i;
  327.     int k=0;
  328.     for(i=head; i!=NULL; i=i->next)
  329.     {
  330.         k++;
  331.         cout<<k<<": "<<i->roll<<"\t"<<i->name<<endl;
  332.     }
  333.     system("PAUSE");
  334. }
  335. int main()
  336. {
  337.     int ch=0,j,n;
  338.     doublylink obj;
  339.     while(ch!=12)
  340.     {
  341.         cout<<"<<==MENU==>>"<<endl;
  342.         cout<<"1.Insert data"<<endl;
  343.         cout<<"2.Insert in first position"<<endl;
  344.         cout<<"3.Insert in last position"<<endl;
  345.         cout<<"4.Insert before a record"<<endl;
  346.         cout<<"5.Insert after a record"<<endl;
  347.         cout<<"6.Delete full list"<<endl;
  348.         cout<<"7.Delete first record"<<endl;
  349.         cout<<"8.Delete last record"<<endl;
  350.         cout<<"9.Delete a record"<<endl;
  351.         cout<<"10.Find position of a record"<<endl;
  352.         cout<<"11.Show full list"<<endl;
  353.         cout<<"12.Quit"<<endl;
  354.         cout<<"Enter your choice:";
  355.         cin>>ch;
  356.         switch(ch)
  357.         {
  358.         case 1:
  359.             cout<<"Enter how many records you want to enter:";
  360.             cin>>n;
  361.             for(j=0; j<n; j++)
  362.                 obj.insertlast();
  363.             system("CLS");
  364.             break;
  365.         case 2:
  366.             obj.insert1st();
  367.             system("CLS");
  368.             break;
  369.         case 3:
  370.             obj.insertlast();
  371.             system("CLS");
  372.             break;
  373.         case 4:
  374.             obj.insertbefore();
  375.             system("CLS");
  376.             break;
  377.  
  378.         case 5:
  379.             obj.insertafter();
  380.             system("CLS");
  381.             break;
  382.         case 6:
  383.             obj.deletelist();
  384.             system("CLS");
  385.             break;
  386.         case 7:
  387.             obj.deletefirst();
  388.             system("CLS");
  389.             break;
  390.         case 8:
  391.             obj.deletelast();
  392.             system("CLS");
  393.             break;
  394.         case 9:
  395.             obj.deleteinfo();
  396.             system("CLS");
  397.             break;
  398.         case 10:
  399.             obj.findinfo();
  400.             system("CLS");
  401.             break;
  402.         case 11:
  403.             obj.traverse();
  404.             system("CLS");
  405.             break;
  406.         case 12:
  407.             break;
  408.         default:
  409.             cout<<"Outside 1-11. Try again.\n";
  410.         }//End of switch
  411.     }//End of while
  412. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement