Ahoj,
Napsal jsem tento seznam, který by měl být podle mých představ obousměrný ale šlape jen ve směru doprava :/ Tak se chci zeptat profíků proč nefunguje ve směru doleva. Děkuji mockrát.
Zdroják:
#include<stdio.h>
class Item{
public:
void TiskniHodnoty() {
printf("x:%i\n",x);
printf("y:%i\n",y);
}
//SETRY-GETRY
int GetX() { return x; } //TEMAHLE METODAMA JAKOBY ZISKAM PRISTUP K PRIVATNIM PROMENNYM
int GetY() { return y; }
void SetX(int NastaveneX) { x = NastaveneX;} //NASTAVIME PRIVATNI PROMENNE
void SetY(int NastaveneY) { y= NastaveneY;}
void SetDoprava(Item *NastaveneDoprava) { doprava= NastaveneDoprava;}
void SetDoleva(Item *NastaveneDoleva) { doprava= NastaveneDoleva;}
Item *GetItemDoprava() { return doprava;}
Item *GetItemDoleva() { return doleva;}
Item() {doprava = this; doleva = this; x=0; y=0; } //SLOVICKO THIS RIKA ZE UKAZUJU NA OBJEKT VE KTEREM PRAVE SEM
Item(int ax, int ay) {x = ax; y = ay; doprava = this; doleva = this; } //ARGUMENTY U METODY ZACINAJI S PISMENEM a jelikoz a jako argument
private:
Item *doprava;
Item *doleva;
int x;
int y;
};
class Seznam{
public:
Seznam() {p_first = NULL; p_last = NULL;}
void PridejItem(Item polozka) {
//NASTAVENI 1. POLOZKY V SEZNAMU
if(p_first==NULL) { // POKUD JE 1. polozka seznamu nulova tak ji tam pridame
Item *p_item = new Item; // VYTVORI NOVEJ ITEM V PAMETI
p_item->SetX(polozka.GetX()); //NASTAVIME PROMENNE
p_item->SetY(polozka.GetY());
p_first = p_item; //NASTAVIM UKAZATEL NA PRVNI POLOZKU SEZNAMU UKAZATALEM VE KTEREM JE NAHRANA POLOZKA
p_last = p_item; //NASTAVIM UKAZATEL NA POSLEDNI POLOZKU SEZNAMU JELIKOZ JE V SEZNAMU ZATIM POUZE 1 POLOZKA
} else {
Item *p_item = new Item; // VYTVORI NOVEJ ITEM V PAMETI
p_item->SetX(polozka.GetX()); //NASTAVIME PROMENNE
p_item->SetY(polozka.GetY());
Item *pomocny_ukazatel = p_last;
p_last = p_item; //NASTAVIME UKAZATEL NA POSLEDNI POLOZKU, UKAZATEL NA PRVNI NENASTAVUJEME JELIKOZ TEN MA ZUSTAT STEJNY JELIKOZ PRVNI POLOZKU UZ NEBUDEME MENIT TA JE PROSTE PRVNI A HOTOVO
//PROVAZANI POLOZEK
pomocny_ukazatel->SetDoprava(p_item);
p_item->SetDoleva(pomocny_ukazatel);
p_item->SetDoprava(pomocny_ukazatel);
pomocny_ukazatel->SetDoleva(p_item);
}
}
void GetFirst() { p_first->TiskniHodnoty(); }
void GetLast() { p_last->TiskniHodnoty(); }
void VypisSeznam() {
Item *dement = p_last;
for(; dement != p_first; dement = (dement->GetItemDoleva()))
{
dement->TiskniHodnoty();
}
dement->TiskniHodnoty();
}
private:
Item *p_first; //UKAZATEL NA PRVNI PRVEK
Item *p_last; //UKAZATEL NA POSLEDNI PRVEK
};
int main() {
Item polozka1(0,0);
Item polozka2(1,1);
Item polozka3(2,2);
Item polozka4(3,3);
Item polozka5(4,4);
Item polozka6(5,5);
Seznam Oseznam;
Oseznam.PridejItem(polozka1);
Oseznam.PridejItem(polozka2);
Oseznam.PridejItem(polozka3);
Oseznam.PridejItem(polozka4);
Oseznam.PridejItem(polozka5);
Oseznam.PridejItem(polozka6);
Oseznam.VypisSeznam();
printf("SADSASDAD\n");
Oseznam.GetFirst();
Oseznam.GetLast();
return 0;
}