Lista na szablonach.

0

Witam. Czy ktoś mógłby przejrzeć kod i powiedzieć co jest nie tak ?? Problem mam ze stawianiem elementów do listy.

#include <iostream>

using namespace std;

template <class TD>
class Lista;

template <class TD>
class WezelListy
{
      friend class Lista<TD>;
      public:
             WezelListy(const TD &);
             TD WezDane();
             private:
                     TD dane;
                     WezelListy<TD> * nast;

      };

      template <class TD>
      WezelListy<TD>::WezelListy(const TD & d)
      {
                                       dane=d;
                                       nast=NULL;
                                       }
      template <class TD>
     TD WezelListy<TD>::WezDane()
      {
                               return dane;
                               }

       template <class TD>
       class Lista
       {
             public:
                    Lista();
                    ~Lista();
                    void WstawNaPoczatek(TD);
                    void WstawNakoniec(TD);
                    bool UsunPierwszy(TD&);
                    bool UsunOstatni(TD&);
                    bool Pusta()const;
                    private:
                            WezelListy<TD> *WskaznikNaPierwszy;
                            WezelListy<TD> *WskaznikNaOstatni;
                            WezelListy<TD> *NowyWezel(TD);
             };   
           template <class TD>
      Lista<TD>::Lista()
      {
                        WskaznikNaPierwszy = WskaznikNaOstatni =NULL ;
                        } 
      template <class TD>
      Lista<TD>::~Lista()
      {
                         TD d;
                         while(!Pusta())
                         UsunPierwszy(d);
                         }

            template <class TD>
     void Lista<TD>::WstawNaPoczatek(TD d)
     {
          WezelListy<TD> * nowywsk;
          nowywsk = NowyWezel(d);
          if (Pusta())
          WskaznikNaPierwszy = WskaznikNaOstatni = nowywsk;
          else
          {
              nowywsk->nast = WskaznikNaPierwszy;
              WskaznikNaPierwszy= nowywsk;
          }
     }
     template <class TD>
     void Lista<TD>::WstawNakoniec(TD d)
     {
          WezelListy<TD> * Nowywsk=NowyWezel(d);
          if (Pusta())
          WskaznikNaPierwszy=WskaznikNaOstatni=Nowywsk;
          else
          {
              WskaznikNaOstatni->nast=Nowywsk;
              WskaznikNaOstatni=Nowywsk;
          }
      }            

       template <class TD>
       bool Lista <TD>::UsunPierwszy(TD & d)
       {
            if (Pusta()) return false;
            WezelListy<TD> * robwsk =WskaznikNaPierwszy;
            d=robwsk->dane;
            WskaznikNaPierwszy=WskaznikNaPierwszy->nast;
            if (WskaznikNaPierwszy == NULL)
            WskaznikNaOstatni =NULL;
            delete robwsk;
            return true;
        }
         template <class TD>
         bool Lista<TD>::UsunOstatni(TD & d)
         {
              if (Pusta()) return false;
              WezelListy<TD> * robwsk = WskaznikNaOstatni;
              d=robwsk->dane;
              if (WskaznikNaPierwszy == WskaznikNaOstatni)
              WskaznikNaPierwszy=WskaznikNaOstatni=NULL;
              else
              {
                  WezelListy<TD> * rob2 = WskaznikNaPierwszy;
                  while(rob2->nast !=WskaznikNaOstatni)
                  rob2=rob2->nast;
                  rob2->nast=NULL;
                  WskaznikNaOstatni=rob2;
              }
              delete robwsk;
              return true;
              }

        template <class TD>
       bool Lista <TD>::Pusta()const
       {
        if ((WskaznikNaPierwszy == NULL) &&  (WskaznikNaOstatni == NULL))
        return true;
        return false;
       }

   int main()
   { 

     Lista <int> lista;
     lista.WstawNaPoczatek(5);
       system("pause");
       return 0;
   } 
0
nowywsk = NowyWezel(d);

Co to robi? Bo na pewno nie alokuje pamięci na nowy węzeł.

0

Sorry, nie zwróciłem uwagi że dodałeś komentarz do mojego poprzedniego postu.
Coś jeszcze w kodzie jest źle ??


#include <iostream>

using namespace std;

template <class TD>
class Lista;

template <class TD>
class WezelListy
{
    friend class Lista<TD>;

public:
    WezelListy(const TD&);
    TD WezDane();

private:
    TD dane;
    WezelListy<TD>* nast;
};

template <class TD>
WezelListy<TD>::WezelListy(const TD& d)
{
    dane = d;
    nast = NULL;
}

template <class TD>
TD WezelListy<TD>::WezDane()
{
    return dane;
}

template <class TD>
class Lista
{
public:
    Lista();
    ~Lista();
    void WstawNaPoczatek(TD);
    void WstawNakoniec(TD);
    bool UsunPierwszy(TD&);
    bool UsunOstatni(TD&);
    bool Pusta() const;

private:
    WezelListy<TD>* WskaznikNaPierwszy;
    WezelListy<TD>* WskaznikNaOstatni;
    WezelListy<TD>* NowyWezel(TD);
};

template <class TD>
Lista<TD>::Lista()
{
    WskaznikNaPierwszy = WskaznikNaOstatni = NULL;
}

template <class TD>
Lista<TD>::~Lista()
{
    TD d;
    while (!Pusta())
        UsunPierwszy(d);
}

template <class TD>
void Lista<TD>::WstawNaPoczatek(TD d)
{
    WezelListy<TD>* nowywsk = NowyWezel(d);
    if (Pusta())
        WskaznikNaPierwszy = WskaznikNaOstatni = nowywsk;
    else
    {
        nowywsk->nast = WskaznikNaPierwszy;
        WskaznikNaPierwszy = nowywsk;
    }
}

template <class TD>
void Lista<TD>::WstawNakoniec(TD d)
{
    WezelListy<TD>* Nowywsk = NowyWezel(d);
    if (Pusta())
        WskaznikNaPierwszy = WskaznikNaOstatni = Nowywsk;
    else
    {
        WskaznikNaOstatni->nast = Nowywsk;
        WskaznikNaOstatni = Nowywsk;
    }
}

template <class TD>
bool Lista<TD>::UsunPierwszy(TD& d)
{
    if (Pusta())
        return false;
    WezelListy<TD>* robwsk = WskaznikNaPierwszy;
    d = robwsk->dane;
    WskaznikNaPierwszy = WskaznikNaPierwszy->nast;
    if (WskaznikNaPierwszy == NULL)
        WskaznikNaOstatni = NULL;
    delete robwsk;
    return true;
}

template <class TD>
bool Lista<TD>::UsunOstatni(TD& d)
{
    if (Pusta())
        return false;
    WezelListy<TD>* robwsk = WskaznikNaOstatni;
    d = robwsk->dane;
    if (WskaznikNaPierwszy == WskaznikNaOstatni)
        WskaznikNaPierwszy = WskaznikNaOstatni = NULL;
    else
    {
        WezelListy<TD>* rob2 = WskaznikNaPierwszy;
        while (rob2->nast != WskaznikNaOstatni)
            rob2 = rob2->nast;
        rob2->nast = NULL;
        WskaznikNaOstatni = rob2;
    }
    delete robwsk;
    return true;
}

template <class TD>
bool Lista<TD>::Pusta() const
{
    if ((WskaznikNaPierwszy == NULL) && (WskaznikNaOstatni == NULL))
        return true;
    return false;
}

int main()
{

    Lista<int> lista;
    lista.WstawNaPoczatek(5);
    system("pause");
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0