Jumat, 11 November 2011

DOUBLE LINK LIST


#include <iostream.h>

class node
{
public:
int value;           //value stored in the node
node *next;          //pointer to next node
node *prev;          //pointer to previous node
};

class dlist
{
public:
node *front;       //pointer to front of list  
node *back;        //pointer to back of list 

dlist()
{
front=NULL;
back=NULL;
}

void insertFront(int value);            
void insertBack(int value);
void removeFront();
void removeBack();
void insertBefore(int value,node *nodeB);
void insertAfter(int value,node *nodeA);
void removeBefore(node *nodeB);
void removeAfter(node *nodeA);
void removeNode(node *newNode);
void printDListFront();
void printDListBack();
};

//insert a node before nodeB
void dlist::insertBefore(int value,node *nodeB)   
{
node *newNode;
newNode=new node();
newNode->prev=nodeB->prev;
newNode->next =nodeB;
newNode->value =value;
if(nodeB->prev==NULL)
{
this->front=newNode;
}
nodeB->prev=newNode;

}

//insert a node before the front node
void dlist::insertFront (int value)
{
node *newNode;
if(this->front==NULL)
{
newNode=new node();
this->front=newNode;
this->back =newNode;
newNode->prev=NULL;
newNode->next=NULL;
newNode->value=value;

}
else
{
insertBefore(value,this->front );
}
}

//insert a node after  nodeB
void dlist::insertAfter(int value,node *nodeB)
{
node *newNode;
newNode=new node();
newNode->next= nodeB->next ;
newNode->prev  =nodeB;
newNode->value =value;

if(nodeB->next==NULL)
{
cout<<"\n "<< endl;
this->back =newNode;
}
nodeB->next=newNode;
cout<<"2"<<endl;
}
//insert a node after the last node
void dlist::insertBack (int value)
{         
if(this->back==NULL)
{
cout<<"insert at back";
insertFront(value);
}
else
{
cout<<"insert at back";
insertAfter(value,this->back  );
}
}

//remove the front node
void dlist::removeFront ()
{
removeNode(this->front);
}

//remove a back node
void dlist::removeBack  ()
{
removeNode(this->back);

}

//remove before a node
void dlist::removeBefore(node *nodeB)
{

if(nodeB->prev==this->front)
{
this->front=nodeB;
this->front->prev=NULL;
}
else
{
removeNode(nodeB->prev);
}
}

//remove after a node
void dlist::removeAfter(node *nodeA)
{
if(nodeA->next==this->back)
{
this->back=nodeA;
this->back->next=NULL;
}
else
{
removeNode(nodeA->next);
}
}

//remove a perticular node
void dlist::removeNode(node *nodeToRemove)
{
if(nodeToRemove==this->front)
{
this->front=this->front->next;
this->front->prev=NULL;
}
else if (nodeToRemove==this->back)
{
this->back=this->back->prev;
this->back->next=NULL ;
}
else
{
nodeToRemove->prev->next=nodeToRemove->next;
nodeToRemove->next->prev=nodeToRemove->prev;
}
}

//Print the list from front
void dlist::printDListFront()
{
node* curr2;
curr2= this->front;
cout<<"\n-----\n";
cout<<"Queue\n";
cout<<"-----\n";
//cout<<"size:"<<getQueueSize()<<endl;
while(curr2!=NULL)
{
cout<<" |"<<curr2->value<<"|";
curr2=curr2->next;
}
cout<<endl;
}// print the Double Linked List from front


// print the Double Linked List from backwards
void dlist::printDListBack()
{
node* curr2;
curr2= this->back;
cout<<"\n-----\n";
cout<<"Queue\n";
cout<<"-----\n";
//cout<<"size:"<<getQueueSize()<<endl;
while(curr2!=NULL)
{
cout<<" |"<<curr2->value<<"|";
curr2=curr2->prev;
}
cout<<endl;
}// print the Double Linked List from back

void main()
{
dlist *st ;
st= new dlist();
st->insertBack(8);
st->printDListFront ();
st->insertBack(5);
st->printDListFront ();
st->insertBack(6);
st->printDListFront ();
st->insertFront(1) ;
st->printDListFront ();
st->insertFront(3) ;
st->printDListFront ();
st->insertBack(7);
st->printDListFront ();
st->removeFront();
st->printDListFront ();
st->removeBack();
st->printDListFront ();
}










#include
using namespace std;
class A
{
struct node
{
int data;
struct node *next,*prev;
}*start;
public: A()
{
start=NULL;
}
void insert(int n);
void show();
void del();
};
void A::insert(int n)
{
node *temp1,*temp2;
if(start==NULL)
{
start=new node;
start->data=n;
start->next=start->prev=NULL;
}
else
{
temp1=start;
while(temp1->next!=NULL)
temp1=temp1->next;
temp2=new node;
temp2->data=n;
temp2->next=NULL;
temp2->prev=temp1;
temp1->next=temp2;
}
}
void A::del()
{
node *temp;
temp=start;
start=start->next;
delete temp;
}
void A::show()
{
node *temp;
temp=start;
while(temp!=NULL)
{
cout<data<<" ";
temp=temp->next;
}
cout<<"\n\n";
}
int main()
{
int n,ch;
A a;
cout<<"Enter your choice "<>ch;
while(1)
{
switch(ch)
{
case 1: cout<<"Enter the element ";
cin>>n;
a.insert(n);
break;
case 2: cout<<"After delete the elements are ";
a.del();
a.show();
break;
case 3: cout<<"The elements are ";
a.show();
break;
case 4: return 0;
}
cout<<"\n1.Insert\n2.Delete\n3.Display\n4.Exit\n";
cin>>ch;
}
system("pause");
}

Tidak ada komentar:

Posting Komentar