All pastes #2053891 Raw Edit

Something

public text v1 · immutable
#2053891 ·published 2011-05-04 16:58 UTC
rendered paste body
//
//  DLL.cpp
//  SDI2Test
//
//  Created by Paul Parkin on 04/05/2011.
//  Copyright 2011 Nottingham Trent University. All rights reserved.
//

#include "DLL.h"
#include <iostream>
#include "VehicleClasses.h"

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(Vehicle data)
{
    newnode = new dnode;
    newnode->data = data;
    newnode->prev = NULL;
    newnode->next = NULL;
    return newnode;
}

void DLL::insertAtFront(Vehicle 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(Vehicle 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(Vehicle 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(Vehicle 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(Vehicle data)
{
    if(front == NULL)
    {
        cout<<"List is empty"<<endl;
        return;
    }
    
    dnode *searchNode;
    
    if((searchNode = search(data)) != NULL)
    {
        cout<<"SNData :"<<rear->data.getRegistration() <<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(Vehicle data)
{
    dnode *prev,*ptr;
    for(ptr = front ; ptr ; ptr = ptr -> next)
    {
        if(ptr -> data.getRegistration() == data.getRegistration())
            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;
}