#include<iostream>
using namespace std;
// fun prototype
void create();
void display();
void displayrev();
void insert();
void insertAtBeg();
void insertAfterPos();
void insertAtPos();
void del();
void delAtBeg();
void delAtLast();
void delAtPos();
void search();
void rev();
struct node
{
int data;
node*next;
node*prev;
};
struct node*head=NULL;
struct node*tail=NULL;
int lenOfList=0;
int main()
{
//main fun the program will start from here
int choice;
while(1)
{
cout<<"\n\n\n\t\t\t******MENU********";
cout<<"\n1 Create firstnode or Append\n2 for display the list\n3 for inserting a node\n4 for deletion of a node\n";
cout<<"5 for displaying in reverse\n6 for Reverse the list permenantly\n";
cout<<"7 for length \n8 for searching\n";
cin>>choice;
switch(choice)
{
case 1:create();
break;
case 2:display();
break;
case 3:insert();
break;
case 4:del();
break;
case 0:exit(1);
break;
case 5:displayrev();
break;
case 6:rev();
break;
case 7:cout<<lenOfList;
break;
case 8:search();
break;
default: cout<<" wrong choice\n:";
break;
}
}
return 0; // getch();
}
void create()
{
// it will create 1st node
int value;
struct node *newnode;
newnode=new node;
cout<<"enter data to insert in node\n";
cin>>value;
newnode->data=value;
newnode->next=NULL;
newnode->prev=NULL;
if (head == NULL)
{
head=newnode;
tail = newnode;
cout<<"1st node created successfully\n";
lenOfList++;
}
else
{
tail->next = newnode;
newnode->prev = tail;
tail = newnode;
cout<<"node created successfully\n";
lenOfList++;
}
}
void display()
{
struct node*temp2;
temp2=head;
if(head == NULL)
{
cout<<"empty list";
}
else
{
while(temp2!=NULL)
{
cout<<temp2->data<<"->";
temp2 = temp2->next;
}
cout<<"NULL";
}
}
void displayrev()
{
struct node*temp2;
temp2=tail;
if(head == NULL)
{
cout<<"empty list";
}
else
{
do
{
cout<<temp2->data<<"->";
if (temp2 == head)
break;
temp2 = temp2->prev;
}while(1);
cout<<"NULL";
}
}
void insert()
{
int choice;
cout<<"\n\n\n\t\t\t******MENU********";
cout<<"\n1 for insertion At Beg\n2 Insert on a specific Pos\n3 for Insert After the given Pos\n4 for insert at end\n";
cin>>choice;
switch(choice)
{
case 1:insertAtBeg();
break;
case 2:insertAtPos();
break;
case 3:insertAfterPos();
break;
case 4 :create();
break;
default: cout<<" wrong choice for inserting\n:";
break;
}
}
void insertAtBeg()
{
struct node*newnode;
int val;
newnode = new node;
cout<<"enter data";
cin>>val;
newnode->data=val;
if(head==NULL)
{
cout<<"empty list\n";
head = newnode;
newnode->prev = NULL;
newnode->next = NULL;
}
else
{
head->prev = newnode;
newnode->next = head;
head = newnode;
}
cout<<"node created succesfully at beg";
lenOfList++;
}
void insertAtPos()
{
int pos;
cout<<"enter the posistion";
cin>>pos;
int i=1;
if(pos<1 || pos>lenOfList)
{
cout<<"invalid pos";
}
else if(pos==1)
{
insertAtBeg();
}
else if(pos==lenOfList)
{
create();
}
else
{
struct node*newnode,*temp2;
temp2 = head;
int val;
newnode = new node;
cout<<"enter data";
cin>>val;
newnode->data=val;
while(i<pos-1)
{
temp2 = temp2->next;
i++;
}
// main concept of insertion at pos
newnode->prev = temp2;
newnode->next = temp2->next;
temp2->next = newnode;
newnode->next->prev = newnode;
cout<<"node successfully added at"<<pos<<"\n";
lenOfList++;
}
}
void insertAfterPos()
{
int pos;
cout<<"enter the posistion";
cin>>pos;
int i=1;
if( (pos<1) || (pos>lenOfList))
{
cout<<"invalid pos";
}
else if(pos==lenOfList)
{
create();
}
else
{
struct node*newnode,*temp2;
temp2 = head;
int val;
newnode = new node;
cout<<"enter data";
cin>>val;
newnode->data=val;
while(i<pos)
{
temp2 = temp2->next;
i++;
}
// main concept of insertion at pos
newnode->prev = temp2;
newnode->next = temp2->next;
temp2->next = newnode;
newnode->next->prev = newnode;
cout<<"node successfully added at"<<pos+1<<"\n";
lenOfList++;
}
}
void del()
{
int choice;
cout<<"\n\n\n\t\t\t******MENU********";
cout<<"\n1 for deletion 1st node \n2 for deletion last node\n3 for deletion at a given pos\n";
cin>>choice;
switch(choice)
{
case 1:delAtBeg();
break;
case 2:delAtLast();
break;
case 3:delAtPos();
break;
default: cout<<" wrong choice for inserting\n:";
break;
}
}
void delAtBeg()
{
struct node*temp;
temp = head;
if(head==NULL)
{
cout<<"empty list";
}
else if (head->next == NULL)
{
// only one node
head = NULL;
cout<<"empty list";
lenOfList=0;
}
else
{
head= head->next;
head->prev=NULL;
delete temp;
cout<<"deleted successully";
lenOfList--;
}
}
void delAtLast()
{
struct node*temp;
temp = tail;
if(head==NULL)
{
cout<<"empty list";
}
else if (head->next == NULL)
{
// only one node
head = NULL;
cout<<"empty list";
lenOfList=0;
}
else
{
tail= tail->prev;
tail->next=NULL;
delete temp;
cout<<"deleted successully";
lenOfList--;
}
}
void delAtPos()
{
int pos;
cout<<"enter position\n";
cin>>pos;
if (pos<1 || pos>lenOfList)
{
cout<<"invalid\n";
}
else if (pos == 1)
{
delAtBeg();
}
else if (pos == lenOfList)
{
delAtLast();
}
else
{
// main concept
struct node*temp;
temp=head;
int i=1;
while(i<pos)
{
temp=temp->next;
i++;
}
temp->prev->next = temp->next;
temp->next->prev = temp->prev;
delete temp;
cout<<"deleted successfully!!\n";
lenOfList--;
}
}
void search()
{
struct node*temp2;
temp2=head;
if(head == NULL)
{
cout<<"empty list";
}
else
{
int element;
int pos=0;
int flag=0;
cout<<"enter element to be searched\n";
cin>>element;
while(temp2!=NULL)
{
pos++;
if(temp2->data == element)
{
cout<<"element found at pos "<<pos<<"\n";
flag = 1;
break;
}
temp2 = temp2->next;
}
if (flag == 0)
{
cout<<"element not found\n";
}
}
}
void rev()
{
//just swap the pointers (head and tail) and (prev and next)
struct node*current , *nextnode;
if(head == NULL)
{
cout<<"empty";
}
else
{
cout<<"rev in progress\n";
current = head;
while(current!=NULL)
{
nextnode = current->next;
current->next = current->prev;
current->prev = nextnode;
current = nextnode;
}
// just swap the head and tail
current = head;
head = tail;
tail = current;
cout<<"rev complete\n";
display();
}
}
No comments:
Post a Comment