Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Шаблон односвязного списка


Автор: daff 18.11.2008, 04:36
Доброго времени суток!!!

Пишу программу, реализующую шаблон односвязного списка, но возникла проблемма с добавлением элементов в список : при добавлении элемента сначало в начало списка, а потом в конец - вылетатет с ошибкой, если наоборот - то всё нормально!!!

Код

#ifndef CLASS_LIST_H_INCLUDED
#define CLASS_LIST_H_INCLUDED

template <class T> class List
{
    struct Element
    {
        T data;
        Element *next;        // указатель на следующий элемент списка
    };

    Element *pHead;           // указатель на первый элемент списка
    Element *pPrev;           // указатель на последний элемент списка
    int countElem;            // количество элементов в списке

  public :

    List()
    {
        pHead = NULL;
        countElem = 0;
    }

    ~List()
    {
        delAllList();
    }

    /*void add_front(T data)
    {
        Element *temp = new Element;

        if(pHead == NULL)
            pHead = temp;
        else
            temp->next = pHead;

        temp->data = data;
        pHead = temp;
        countElem++;
    }*/

    void add_front(T data)
    {
        Element *temp = new Element;

        if(pHead == NULL)
        {
            pHead = temp;
        }
        else
            temp->next = pHead;

        temp->data = data;
        pHead = temp;
        countElem++;
    }

    void add_back(T data)
    {
        Element *temp = new Element;

        if(pHead == NULL)
            pHead = temp;
        else
            pPrev->next = temp;

        temp->data = data;
        temp->next = NULL;
        pPrev = temp;
        countElem++;
    }

    void print()
    {
        Element *pTemp = pHead;

        while(pTemp != NULL)
        {
            cout << pTemp->data << endl;
            pTemp = pTemp->next;
        }
    }

    void delAllList()
    {
        while(pHead != NULL)
        {
            Element *pTemp = pHead;
            pHead = pHead->next;
            delete pTemp;
        }
    }

    bool IsEmpty()
    {
        if(countElem == 0)
            return true;
        else
            return false;
    }

};

#endif // CLASS_LIST_H_INCLUDED



Код

#include "list_realize.cpp"

int main()
{
    List <int> list;

list.add_front(1);
    list.add_back(4);


    //list.add_back(3);
    //list.add_back(2);
    //list.add_back(1);

    list.print();

    return 0;
}




В чем может быть проблема?

Автор: J0ker 20.11.2008, 00:19
Код

    List()
    {
        pHead = NULL;
        pPrev = NULL;
        countElem = 0;
    }
    

    void add_front(T data)
    {
        Element *temp = new Element;
        temp->next = pHead;
        pHead = temp;
        if(pPrev == NULL)
            pPrev = pHead;
        pHead->data = data;
        ++countElem;
    }

Автор: daff 20.11.2008, 10:33
Большое спасибо!!!

Автор: Radomir 6.12.2008, 21:57
Цитата(daff @ 18.11.2008,  04:36)
Доброго времени суток!!!

Пишу программу, реализующую шаблон односвязного списка

А если требуется организавать специализацию данного списка под тип 
Код

void(*)(const int&)
?? как быть?

Автор: J0ker 7.12.2008, 01:10
Цитата(Radomir @ 6.12.2008,  21:57)
Цитата(daff @ 18.11.2008,  04:36)
Доброго времени суток!!!

Пишу программу, реализующую шаблон односвязного списка

А если требуется организавать специализацию данного списка под тип 
Код

void(*)(const int&)
?? как быть?

специализировать шаблонный тип данным типом  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)