Saturday, 19 September 2020

Doubly Circular Linked List with all possible (CRUD) operation in C++

#include<iostream>

using namespace std;


//fun prototype 

void create();

void display();

void rev();

void insert();

void insertAtBeg();

void insertAtPos();

void insertAtEnd();

void del();

void delAtBeg();

void delAtEnd();

void delAtPos();

struct node

{

int data;

struct node*next;

struct node*prev;

};

struct node *head=NULL;

struct node *tail=NULL;

int len=0;



int main()

{

  int choice;

 while(1)

 {

  cout<<"\n\n\n\t\t\t\t******MENU********\n\n";

  cout<<"\n1 Create firstnode or Append\n2 display\n3 for inserting node\n";

  cout<<"4 for length \n5 for deletion \n6 for reversing the  list\n";

  cin>>choice;

  switch(choice)

  {

  case 1:create();

  break;

  case 2:display();

  break;

  case 3:insert();

  break;

  case 4:cout<<"length of list = "<<len<<"\n";

  break;

  case 5:del();

  break;

  case 6: rev();

  break;

  case 0:exit(1);

  break;

  default: cout<<" wrong  choice\n:";

  break;

  }

}


}



void insert()

{

int choice;

  cout<<"\n\n\n\t\t\t\t\t******MENU********\n";

  cout<<"\n1 for insertion At Beg\n2 Insert on a specific Pos\n3 for insert at end\n";

  cin>>choice;

  switch(choice)

  {

  case 1:insertAtBeg();

  break;

  case 2:insertAtPos();

  break;

  case 3:insertAtEnd();

  break;

  default: cout<<" wrong  choice for inserting\n:";

  break;

  }

}


void del()

{

int choice;

  cout<<"\n\n\n\t\t\t\t\t******MENU********\n\n";

  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:delAtEnd();

  break;

  case 3:delAtPos();

  break;

  default: cout<<" wrong  choice for inserting\n:";

  break;

  }

}


void create()

{

struct node*newnode;

newnode = new node;

int data;

cout<<"enter data  ";

cin>>data;

newnode->data=data;


if (head == NULL)

{

head = newnode;

tail = newnode;

head->next=head;

head->prev=head;

cout<<"\n first node created successfully\n";

len++;

}

else

{

tail->next = newnode;

newnode->prev = tail;

tail = newnode;

tail->next=head;

head->prev = tail;

cout<<"\n node created successfully\n";

len++;

}

}

void display()

{

//cout<<"in display\n";

struct node *temp;

if(head == NULL)

{

cout<<"empty";

}

else

{

temp=head;

cout<<"head->";

while(temp->next!=head)

{

cout<<temp->data<<"->";

temp=temp->next;

}

cout<<temp->data<<"->head";

// cout<<temp->next->data; // for checking it is circular or not

}

}


void insertAtBeg()

{

struct node*newnode;

newnode = new node;

int data;

if(head==NULL)

{

create();

}

else

{

cout<<"enter data  ";

cin>>data;

newnode->data=data;

newnode->next = NULL;

newnode->next = head;//address of 1st node 

head = newnode;

tail->next = head;

head->prev = tail;

}

cout<<"node added successfully";

len++;

}

void insertAtEnd()

{

struct node*newnode;

newnode = new node;

int data;


if(head==NULL)

{

cout<<"empty list";

create();

}

else

{

cout<<"enter data  ";

cin>>data;

newnode->data=data;

newnode->next = head;//address of 1st node 

newnode->prev = tail;// address of last node

tail->next = newnode;

tail = newnode;

head->prev = tail;

}

cout<<"node added successfully";

len++;

}

void insertAtPos()

{

int pos,i;

i=1;

cout<<"enter the pos\n" ;

cin>>pos;

if(pos==1)

{

insertAtBeg();

}

else if(pos == len)

{

insertAtEnd();

}

else if(pos<1 || pos>len)

{

cout<<"invalid pos";

}

else

{

struct node*newnode;

newnode = new node;

struct node*temp;

int data;

cout<<"enter data\n";

cin>>data;

newnode->data=data;

newnode->next = NULL;

temp = head; // point to 1st node

while(i<pos-1)

{

temp=temp->next;

i++;

}

newnode->next = temp->next;

newnode->prev = temp;

temp->next = newnode;

temp->next->prev = newnode;

len++;

}

}

void delAtBeg()

{

struct node*temp;

temp = head;

if(head == NULL)

cout<<"empty list";

else if(len==1)

{

head = NULL;

delete temp;

len--;

}

else

{

head=head->next;

tail->next = head;

head->prev=tail;

cout<<"deleted element is -> "<<temp->data;

delete temp;

len--;

}

}

void delAtEnd()

{

struct node*cur,*prev;

cur = head;

if(head == NULL)

cout<<"empty list";

else if(len==1)

{

head = NULL;

delete cur;

len--;

}

else

{

while(cur->next!=head)

{

prev=cur;

cur=cur->next;

}

//now cur is on last node and prev is on one before

prev->next = head;

tail=prev;

head->prev=tail;

cout<<"deleted element is -> "<<cur->data;

delete cur;

len--;

}

}

void delAtPos()

{

struct node*cur,*nextnode;

int i=1;

int pos;

cur=head;

cout<<"Enter the position ";

cin>>pos;

if(pos<1 || pos>len)

cout<<"invalid";

else if(pos==1)

delAtBeg();

else if(pos==len)

delAtEnd();

else

{

while(i<pos-1)

{

cur = cur->next;

i++;

}

nextnode = cur->next;

cur->next = nextnode->next;

nextnode->next->prev=cur;

cout<<"Deleted item is "<<nextnode->data;

delete nextnode;

len--;

}

}

void rev()

{

//now for reversing we need 3 pointers

struct node*cur,*prev,*next;

cur = head;

next = cur->next;

if(head == 0)

cout<<"empty\n";

else if(cur->next == cur)

cout<<"only one node";

else

{

while(cur!=tail)

{

prev = cur;

cur=next;

next = cur->next;

cur->next = prev;

cur->prev = next;

}

next->next = tail;

next->prev = tail->next;

tail = next;

head = tail->next;

cout<<"reverse succesfully\n";

}

display();

}


Circular Linked List with All possible operations in C++

#include<iostream>
using namespace std;

// fun prototype 
void create();
void display();
void rev();
void insert();
void insertAtBeg();
void insertAtPos();
void insertAtEnd();
void del();
void delAtBeg();
void delAtEnd();
void delAtPos();



struct node
{
int data;
struct node*next;
};
struct node *head=NULL;
struct node *tail=NULL;
int len=0;


int main()
{
  int choice;
 while(1)
 {
  cout<<"\n\n\n\t\t\t\t******MENU********\n\n";
  cout<<"\n1 Create firstnode or Append\n2 display\n3 for inserting node\n";
  cout<<"4 for length \n5 for deletion \n6 for reversing the  list\n";
  cin>>choice;
  switch(choice)
  {
  case 1:create();
  break;
  case 2:display();
  break;
  case 3:insert();
  break;
  case 4:cout<<"length of list = "<<len<<"\n";
  break;
  case 5:del();
  break;
  case 6: rev();
  break;
  case 0:exit(1);
  break;
  default: cout<<" wrong  choice\n:";
  break;
  }
}

}

void insert()
{
int choice;
  cout<<"\n\n\n\t\t\t\t\t******MENU********\n";
  cout<<"\n1 for insertion At Beg\n2 Insert on a specific Pos\n3 for insert at end\n";
  cin>>choice;
  switch(choice)
  {
  case 1:insertAtBeg();
  break;
  case 2:insertAtPos();
  break;
  case 3:insertAtEnd();
  break;
  default: cout<<" wrong  choice for inserting\n:";
  break;
  }
}

void del()
{
int choice;
  cout<<"\n\n\n\t\t\t\t\t******MENU********\n\n";
  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:delAtEnd();
  break;
  case 3:delAtPos();
  break;
  default: cout<<" wrong  choice for inserting\n:";
  break;
  }


}




void create()
{
struct node*newnode;
newnode = new node;
int data;
cout<<"enter data  ";
cin>>data;
newnode->data=data;
newnode->next = NULL;
if (head == NULL)
{
head = newnode;
tail = newnode;
//tail->next = head;
cout<<"\n first node created successfully\n";
len++;
}
else
{
tail->next = newnode;
tail = newnode;
//tail->next = head;
cout<<"\n node created successfully\n";
len++;
}
// now for linking tail to head
tail->next = head;
}
void display()
{
//cout<<"in display\n";
struct node *temp;
if(head == NULL)
{
cout<<"empty";
}
else
{
temp=head;
cout<<"head->";
while(temp->next!=head)
{
cout<<temp->data<<"->";
temp=temp->next;
}
cout<<temp->data<<"->head";
//cout<<temp->data;
}
}

void insertAtBeg()
{
struct node*newnode;
newnode = new node;
int data;
cout<<"enter data  ";
cin>>data;
newnode->data=data;
newnode->next = NULL;
if(head==NULL)
{
head = newnode;
tail = newnode;
head->next=head;
}
else
{
newnode->next = head;//address of 1st node 
head = newnode;
tail->next = head;
}
cout<<"node added successfully";
len++;
}
void insertAtEnd()
{
struct node*newnode;
newnode = new node;
int data;
cout<<"enter data  ";
cin>>data;
newnode->data=data;
newnode->next = NULL;
if(head==NULL)
{
cout<<"empty list";
head = newnode;
tail = newnode;
head->next=head;
}
else
{
newnode->next = tail->next;//address of 1st node 
tail->next = newnode;
tail = newnode;
}
cout<<"node added successfully";
len++;
}
void insertAtPos()
{
int pos,i;
i=1;
cout<<"enter the pos\n" ;
cin>>pos;
if(pos==1)
{
insertAtBeg();
}
else if(pos == len)
{
insertAtEnd();
}
else if(pos<1 || pos>len)
{
cout<<"invalid pos";
}
else
{
struct node*newnode;
newnode = new node;
struct node*temp;
int data;
cout<<"enter data\n";
cin>>data;
newnode->data=data;
newnode->next = NULL;
temp = tail->next; // point to 1st node
while(i<pos-1)
{
temp=temp->next;
i++;
}
newnode->next = temp->next;
temp->next = newnode;
len++;
}
}
void delAtBeg()
{
struct node*temp;
temp = head;
if(head == NULL)
cout<<"empty list";
else if(len==1)
{
head = NULL;
cout<<"deleted element is -> "<<temp->data;
delete temp;
len--;
}
else
{
head=head->next;
tail->next = head;
cout<<"deleted element is -> "<<temp->data;
delete temp;
len--;
}
}
void delAtEnd()
{
struct node*cur,*prev;
cur = head;
if(head == NULL)
cout<<"empty list";
else if(len==1)
{
head = NULL;
delete cur;
len--;
}
else
{
while(cur->next!=head)
{
prev=cur;
cur=cur->next;
}
//now cur is on last node and prev is on one before
prev->next = head;
tail=prev;
cout<<"deleted element is -> "<<cur->data;
delete cur;
len--;
}
}
void delAtPos()
{
struct node*cur,*nextnode;
int i=1;
int pos;
cur=head;
cout<<"Enter the position ";
cin>>pos;
if(pos<1 || pos>len)
cout<<"invalid";
else if(pos==1)
delAtBeg();
else if(pos==len)
delAtEnd();
else
{
while(i<pos-1)
{
cur = cur->next;
i++;
}
nextnode = cur->next;
cur->next = nextnode->next;
cout<<"Deleted item is "<<nextnode->data;
delete nextnode;
len--;
}
}
void rev()
{
//now for reversing we need 3 pointers
struct node*cur,*prev,*next;
cur = head;
next = cur->next;
if(head == 0)
cout<<"empty\n";
else if(cur->next == cur)
cout<<"only one node\n";
else
{
while(cur!=tail)
{
prev = cur;
cur=next;
next = cur->next;
cur->next = prev;
}
next->next = tail;
tail = next;
head = tail->next;
cout<<"reverse succesfully\n";
}
display();
}



Thursday, 17 September 2020

Doubly Linked List with All possible operations in C++

 #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();

}

}