75 artiklar, 15 användare, 187993 besök, 36412 unika

Startsida
WEBmaster
Guide
Sök blogg
Sök Bilder
Sök användare
Taggar
Slumpad blogg
Slumpad sida
Slumpad bild
Dagens Nyheter
Den Senaste
Chatt
Senaste bilderna
Mest visade
Topplista

Kategorier:
Filmer
Gambling
Musik
Skolarbeten
Spel
Skolarbeten/Datastrukturer
Admin /  Skapad: 23:22 - Tisdagen den 12 Februari 2008 / Bloggnummer: 498 / Visad 1819 gånger
Senast uppdaterad: 23:26 - Tisdagen den 12 Februari 2008
Taggar: cplusplus

List

#ifndef LIST_H
#define LIST_H
#include <cstdlib>
#include <iostream>
using namespace std;

template<class T>
class List
{
private :
    class Node
    {
    public:
        T value;
        Node *next;
        Node(T value){ this->value = value; this->next = NULL;}
        ~Node() {}
    };
   
    Node *first;
    int nrOfNodes;
public:
    List();
    List(const List<T>& list);
    virtual ~List();
    List operator=(const List& list);
    void insertLast(T value);
    void insertAt(int pos, T value);
    void insertFirst(T value);
    T elementAt(int pos);
    bool removeFirst();
    bool removeLast();
    bool removeAt(int pos);
    int size();
};
template<class T>
List<T>::List()
{
    cout << "Konstruktorn i List körs" << endl;
    this->nrOfNodes = 0;
    this->first = NULL;
}
template<class T>
List<T>::List(const List<T>& list)
{
    cout << "Copy-konstruktorn i List körs" << endl;
    nrOfNodes = 0;
    if(list.first != NULL)
    {
        first = new Node(list.first->value);
        Node * oldwalker = list.first;
        Node * newwalker = first;
        while(oldwalker->next != NULL)
        {   
            newwalker->next = new Node(oldwalker->next->value);
            newwalker = newwalker->next;
            oldwalker = oldwalker->next;
            nrOfNodes++;
        }
        newwalker = new Node(oldwalker->value);
        newwalker->next = NULL;
        nrOfNodes++;
    }
    else first = NULL;
}
template<class T>
List<T>::~List()
{
    cout << "Destruktorn i List körs" << endl;
    if(first != NULL)
    {
        Node * walker = first;
       
        while(walker->next != NULL)
        {       
            first = walker->next;
            delete walker;
            walker = first;
        }
    }
}
template<class T>
List<T> List<T>::operator=(const List& list)
{
    cout << "Tilldelnings operatorn i List körs" << endl;
    nrOfNodes = 0;
    if(list.first != NULL)
    {
        first = new Node(list.first->value);
        Node * oldwalker = list.first;
        Node * newwalker = first;
        while(oldwalker->next != NULL)
        {   
            newwalker->next = new Node(oldwalker->next->value);
            newwalker = newwalker->next;
            oldwalker = oldwalker->next;
            nrOfNodes++;
        }
        newwalker = new Node(oldwalker->value);
        newwalker->next = NULL;
        nrOfNodes++;
    }
    else first = NULL;
    return *this;
}
template<class T>
void List<T>::insertLast(T value)
{
    if(nrOfNodes == 0)
    {
        insertFirst(value);
    }
    else
    {
        Node * walker = first;
        while(walker->next != NULL)
        {
            walker = walker->next;
        }
        walker->next = new Node(value);
        walker->next->next = NULL;
        nrOfNodes++;
    }
}
template<class T>
void List<T>::insertAt(int pos, T value)
{
    if(pos == 0)
        insertFirst(value);
    else if(pos > nrOfNodes-1)
        insertLast(value);
    else
    {
        int temp = 0;
        Node * next = first;
        Node * previous = first;
        while(temp < pos)
        {
            temp++;
            previous = next;
            next = next->next;
        }
        previous->next = new Node(value);
        previous->next->next = next;
        nrOfNodes++;
    }
}
template<class T>
void List<T>::insertFirst(T value)
{
    Node *temp = new Node(value);
    temp->next = first;
    first = temp;
    nrOfNodes++;
}
template<class T>
T List<T>::elementAt(int pos)
{
    if(pos < nrOfNodes)
    {
        int temp = 0;
        Node * walker = first;
        while(temp < pos)
        {
            temp++;
            walker = walker->next;
        }
        return walker->value;
    }
}
template<class T>
bool List<T>::removeFirst()
{
    bool result = false;
    if(nrOfNodes > 0)
    {
        Node * temp = first;
        result = true;
        first = first->next;
        delete temp;
        nrOfNodes--;
    }
    return result;
}
template<class T>
bool List<T>::removeLast()
{
    bool result = false;
    if(nrOfNodes > 0)
    {
        if(nrOfNodes == 1)
        {
            delete first;
            first = NULL;
        }
        else
        {
            Node * walker = first;
            while(walker->next->next != NULL)
                walker = walker->next;
            result = true;
            delete walker->next;
            walker->next = NULL;
        }
        nrOfNodes--;
    }
    return result;
}
template<class T>
bool List<T>::removeAt(int pos)
{
    bool result = false;
    if(pos == 0)
        result = removeFirst();
    else if(pos > nrOfNodes-1)
        result = removeLast();
    else
    {
        int temp = 0;
        Node * next = first;
        Node * previous = first;
        while(temp < pos)
        {
            temp++;
            previous = next;
            next = next->next;
        }
        previous->next = next->next;
        result = true;
        delete next;
        nrOfNodes--;
    }
    return result;
}
template<class T>
int List<T>::size()
{
    return nrOfNodes;
}
#endif




Kommentera
 
     
Design/kodning/planering - Jonatan Jönsson