Prezentacja listy dwukierunkowej.

0

Piszę docelowo listę dwukierunkową, na razie walczę z dodawaniem oraz prezentacją listy. Nie mam za bardzo pomysłu na metodę void Lista::pokaz. Wiem, że należałoby tam umieścić pętlę for, jednak w jaki sposób wypisywać kolejne wartości listy na ekran?

class Lista{
public:
	Lista();
	void add(double a, double b, double c);
	void show();
private:
	struct punkt3D {
		double x, y, z; //dane elementu
		punkt3D * next;
		punkt3D * prev;
	};
	punkt3D * first;
	punkt3D * last;
	int count;
};

Lista::Lista(){
	first = last = NULL;
	count = 0;
}

void Lista::add(double a, double b, double c){
	punkt3D * a = new punkt3D;
	a->x = a;
	a->y = b;
	a->z = c;
	a->next = NULL;
	count++;
	if (first == NULL)
		first = a;
	else
		last->next = a;
}

Z góry dziękuję za pomoc.

0

skoro masz zmienna count - to dlaczego z niej nie skorzystasz? zwykly for od i = 0 do count. a w dodawaniu ustawiasz wskaznik w a, a->next na obecny wskaznik first i w ten sposob to wszystko "wiazesz". najlepiej papier + dlugopis i rysowac wagoniki

first->prev = a;
a->next = first; 
0

Z pętlą się zgadza. Nie wiem jedynie jak w metodzie show() pobrać pierwszy element listy, a następnie poruszać się po kolejnych.

1

Nie pętlę for, a while, w pseudokodzie tak to by wyglądało:

Lista::wyswietlListe() {
	Lista current = this;
	
	do {
		current.wyswietl();
		current = current.next;
	} while (current != null);
}

Gdzie wyswietlListe odpalasz na głowie listy.

1

_
Przykład z artykułu:

for(list; list != NULL; list = list->next)
    printf("%d ", list->value);
0
Patryk27 napisał(a):

Nie pętlę for, a while, w pseudokodzie tak to by wyglądało:
Lista::wyswietlListe() {
Lista current = this;

do {
	current.wyswietl();
	current = current.next;
} while (current != null);

}

> Gdzie `wyswietlListe` odpalasz na głowie listy.


No niestety nie wiem co należałoby napisać w miejscu: "Lista current = this;" i w sumie od początku o to chodzi.
0

no lol co w tym trudnego?

for(punkt3d = first; punkt3d != NULL; punkt3d = punkt3d ->next)
    printf("%d ", punkt3d ->value); 

?

0
Craith napisał(a):

no lol co w tym trudnego?

for(punkt3d = first; punkt3d != NULL; punkt3d = punkt3d ->next)
    printf("%d ", punkt3d ->value); 

?

Niestety, ale sam warunek już zwraca błędy.

0

Bo to bardziej psedokod, weź popatrz na niego ze zrozumieniem. Tam jest przypadnie do typu, a później sprawdzenie czy typ jest różny od nulla. Nie można napisać int! =null. To nic nie znaczy, rozumiesz?

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