You are on page 1of 3

//******************************************************************************

**********
//********** Implementation file CDLL.cpp for the classss CircularDoublyLinkedLi
st *******
//******************************************************************************
**********

#include<iostream>
#include<ctime>
#include"CDLL.h"
using namespace std;

CircularDoublyLinkedList::CircularDoublyLinkedList():size(0),list(&dummyHead)
{
}
void CircularDoublyLinkedList::createCircularDoublyLinkedList()
{
srand(time(NULL));
size=rand()%20+1;
list=&dummyHead;
dummyHead.next=list;
dummyHead.precede=list;
dummyHead.item=-1;
Node *cur=list;
int i=0;
do{
cur->next=new Node;
(cur->next)->precede=cur;
cur->item=rand()%100+1;
i++;
if(i==size)
{
list->precede=cur;
cur->next=list;
}
cur=cur->next;
}while(cur!=list);
}
void CircularDoublyLinkedList::displayCircularDoublyLinkedList(){
Node *cur=list->next;
cout<<"\n\t\t";
if(size==0)
cout<<"LiSTE BOSTUR!"<<endl;
else {
do{
cout<<cur->item<<" ";
cur=cur->next;
}while(cur!=list);
cout<<endl;
}
}
void CircularDoublyLinkedList::displayReverseCircularDoublyLinkedList(){
Node *cur=list->precede;
cout<<"\n\t\t";
if(size==0)
cout<<"LiSTE BOSTUR!"<<endl;
else {
do{
cout<<cur->item<<" ";
cur=cur->precede;
}while(cur!=list);
cout<<endl;
}
}
int CircularDoublyLinkedList::findMaxItem() const {
int max=(list->next)->item;
Node *cur=list->next;
Node *temp;
do{
if(cur->item>max)
{
max=cur->item;
temp=cur;
}
cur=cur->next;
} while(cur!=list);
return max;
}

void CircularDoublyLinkedList::deleteNode(){
int max=findMaxItem();
Node *cur=list->next;
Node *temp;
do{
if(cur->item==max)
temp=cur;
cur=cur->next;
} while(cur!=list);
do{
if(temp==cur)
{
(cur->precede)->next = cur->next;
(cur->next)->precede = cur->precede;
size-=2;
}
cur=cur->next;
}while(cur!=list);
if(max==findMaxItem()) deleteNode();
}
CircularDoublyLinkedList::~CircularDoublyLinkedList(){
Node *cur=list;
cur->next=list;
cur->precede=list;
delete cur;
cur=NULL;
}

You might also like