- Get link
- X
- Other Apps
Featured Post
Posted by
Unknown
on
- Get link
- X
- Other Apps
Here's a simple implementation of doubly linked list using C++
//dll.hpp class dnode { public: dnode(); dnode *prev; int data; dnode *next; ~dnode(); }; class DLL { private: dnode *front; dnode *rear; dnode *newnode; public: DLL(); dnode* create_node(int data); void insertAtFront(int data); void insertAtRear(int data); void insertBefore(int data, dnode *node); void insertAfter(int data, dnode *node); void deleteFront(); void deleteLast(); void del(int data); dnode* search(int data); void display(); ~DLL(); };
//dll.cpp #include <iostream> #include "dll.hpp" using namespace std; dnode::dnode() { cout<<"dnode()"<<endl; } dnode::~dnode() { cout<<"~dnode()"<<endl; } DLL::DLL() { front = NULL; rear = NULL; cout<<"DLL()"<<endl; } dnode* DLL :: create_node(int data) { newnode = new dnode; newnode->data = data; newnode->prev = NULL; newnode->next = NULL; return newnode; } void DLL::insertAtFront(int data) { dnode* newnode = create_node(data); if(front == NULL) { front = newnode; rear = newnode; } else { newnode -> next = front; front -> prev = newnode; front = newnode; } } void DLL::insertAtRear(int data) { dnode *prev,*ptr; dnode* newnode = create_node(data); if(front == NULL) { front = newnode; rear = newnode; } else { for(prev = front, ptr = front -> next ; ptr ; prev = ptr, ptr = ptr -> next); if(ptr == NULL) { prev -> next = newnode; newnode -> prev = prev; rear = newnode; } } } void DLL::insertBefore(int data, dnode *node) { dnode *prev,*ptr; dnode* newnode = create_node(data); if(front == NULL) { front = newnode; rear = newnode; } else { node->prev->next = newnode; newnode -> prev = node -> prev; newnode -> next = node; } } void DLL::insertAfter(int data, dnode* node) { dnode *prev,*ptr; dnode* newnode = create_node(data); if(front == NULL) { front = newnode; rear = newnode; } else { newnode -> next = node -> next; node->next = newnode; newnode -> prev = node; } } void DLL::deleteFront() { dnode *temp; temp = front; front = front -> next; front -> prev = NULL; delete temp; } void DLL::deleteLast() { dnode *temp; temp = rear; rear -> prev -> next = NULL; rear = rear -> prev; delete temp; } void DLL::del(int data) { if(front == NULL) { cout<<"List is empty"<<endl; return; } dnode *searchNode; if((searchNode = search(data)) != NULL) { cout<<"SNData :"<<rear->data<<endl; if(front == searchNode) { cout<<"front"<<endl; deleteFront(); } else if(rear == searchNode) { cout<<"last"<<endl; deleteLast(); } else { dnode *temp; temp = searchNode; searchNode -> prev -> next = searchNode -> next; searchNode -> next -> prev = searchNode -> prev; delete temp; } } } dnode* DLL::search(int data) { dnode *prev,*ptr; for(ptr = front ; ptr ; ptr = ptr -> next) { if(ptr -> data == data) return ptr; } return NULL; } void DLL::display() { dnode *ptr; if(front == NULL) { cout<<"List is empty"<<endl; return; } for(ptr = front ; ptr ; ptr = ptr ->next) cout<<"->"<<ptr->data; cout<<endl; } DLL::~DLL() { while(front) { dnode* temp = front; front = front ->next; delete temp; } cout<<"~DLL()"<<endl; } int main() { DLL d1; d1.insertAtFront(4); d1.insertAtFront(2); d1.insertAtFront(23); d1.insertAtRear(12); d1.insertAtRear(27); d1.insertAtRear(42); d1.display(); d1.deleteFront(); d1.display(); d1.deleteLast(); d1.display(); d1.del(27); d1.display(); }
Comments
Post a Comment
Please post your valuable suggestions