Lista dynamiczna - proszę o wytłumaczenie mi tego przy

0

Czesć. Proszę Was o wytłumaczenie mi jak najbardziej szczegółowo tego przykładu. Nie byłem na wykładzie z tego i wydaje mi się to magią... Przykład jest sprawdzony i się kompiluje. Drobne uwagi dopisywałem sam.

#pragma hdrstop
#include <stdio.h>
#include <conio.h>
//---------------------------------------------------------------------------
template <class Typ> class List;
//---------------------------------------------------------------------------
template <class Typ>
class Node {
friend class List<Typ>;
private:
  Typ element;
  Node *next;
};
//---------------------------------------------------------------------------
template <class Typ>
class List {
private:
  Node<Typ> *first;
  Node<Typ> *current;
  Node<Typ> *last;
public:
  int Length;
  void AddElement(Typ element);
  Typ GetElement(void);
  List(Typ element);
  ~List();
};
//---------------------------------------------------------------------------
template <class Typ>    //konstruktor
List<Typ>::List(Typ element){
  Node<Typ> *n = new Node<Typ>();
  n->element=element;
  n->next=NULL;
  this->first=n;
  this->current=n;
  this->last=n;
  Length=1;
}
//---------------------------------------------------------------------------
template <class Typ> //destruktor, zwalniajacy pamiec
List<Typ>::~List(){
  Node<Typ> *a = new Node<Typ>();
  while(first->next!=NULL){
    a=first->next;
    delete(first);
    first=a;
  }
  delete(a);
}
//---------------------------------------------------------------------------
template <class Typ>  //dodanie elementu na koniec listy
void List<Typ>::AddElement(Typ element){
  Node<Typ> *a = new Node<Typ>();
  a->element=element;
  a->next=NULL;
  this->last->next=a;
  last=a;
  this->Length++;
}
//---------------------------------------------------------------------------
template <class Typ>  //wziecie elementu z listy
Typ List<Typ>::GetElement(void){
  Typ retElement;
  retElement=this->current->element;
  this->current=this->current->next;
  return retElement;
}
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{

  List<int> *st2 = new List<int>(10);
  List<char> *st1 = new List<char>('0');
  st2->AddElement(20);
  st2->AddElement(30);
  st2->AddElement(40);
  st1->AddElement('a');
  st1->AddElement('b');
  st1->AddElement('c');
  for(int i=0;i<st2->Length;i++){
    printf("%d\n",st2->GetElement());
  }
  for(int i=0;i<st1->Length;i++){
    printf("%c\n",st1->GetElement());
  }
  getch();

  return 0;
}

Pozdrowienia,
Krzysiek

0

jesli chodzi o listy to tutaj masz troche o tym http://www.chem.univ.gda.pl/~piotao/Programowanie/dynamsd.htm

0

Dziękuję, ciekawy link :) Czy ktoś miałby jeszcze coś do dodania?

0

Ja moge dodac tylko tyle, ze w kodzie nie ma nic nadzwyczajnego! Wystarczy abys chwile sie zastanowil i sam dojdziesz co i jak - to jest naprawde proste. Jesli do tej pory nie znasz c++, to znaczy ze sie chyba minales z powolaniem idac na te studia, ot co!

0

Jesli do tej pory nie znasz c++, to znaczy ze sie chyba minales z powolaniem idac na te studia, ot co!

Na pewno masz wiele racji, tylko, że studia informatyczne nie składają się ze samego c++ i kogoś ten przedmiot ma prawo nie bawić. Z innych przemiotów nie jest wcale źle...

0

Nie chcialem byc niemily, ale wiedziales co Cie czeka, jesli chcesz wszystko zrozumiec zaopatrz sie w "Pasję C++" J.Grębosza. Wtedy zadne listy, stosy, kolejki, mapy, slowniki nie beda dla ciebie zadna tajemnica :)

0

"Pasji" jeszcze nie mam i nie ma sensu jej na razie kupować, skoro jeszcze bardzo dużo brakuje mi do opanowania "Symfonii".
Pozdrowienia

0

mozna by to 1000 razy prosciej napisac

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