Początki implementacji listy.

0

Witam staram się zaimplementować listę i po chwili napisałem coś takiego :

`

 #include <iostream>


using namespace std;

struct list {
	string nazwa;
	list *next;
};

int main()
{
	int n;
	list *head = NULL;
	head = new list;

}
void ini(list*head)
{
	head->nazwa = "pierwszy wyraz";
	for (int j = 0; j < 3; ++j)
	{
		head->next->nazwa = j;// Przypisanie j-tej liczby;
		head->next->next = head->next;//Ustawienie wskaźnika na kolejny element.
		head->next = new list; // Przydzielenie miejsca
	}
}
void wypis(list*head)
{
	for (int j = 0; j < 3; ++j)
	{
		 cout << head->nazwa;
	}
}

Wydaje mi sie ze w mainie jest okej i te pierwsze 3 elementy sie przydzielą tak?
Ale w funkcji wypis jujz cout nie dziala ktos powie czemu?I dobrze to rozumiem?Tzn

 Head 

to jest wskaznik na tak jakby 1 czest listy czyli na jej 1 argument i pierwszy wskaznik na kolejny element
czyli

 
```head->next 
to w pierwszym wywolaniu pokazuje na adres 2 elementu listy?
tak samo jak head->nazwa pokazuje na wartosc glowy tak?
1

Pomijam już niewłaściwe miejsca definicji funkcji i brak ich wywołań w main().
Funkcja ini(): odwołujesz się w czasie przypisania head->next->nazwa = j;// Przypisanie j-tej liczby; do nieistniejącego elementu.
Poza tym do stringa nie możesz przypisać liczby. Skorzystaj z funkcji std::to_string().

1
head->next->nazwa = j;// Przypisanie j-tej liczby;
head->next->next = head->next;//Ustawienie wskaźnika na kolejny element.
head->next = new list; // Przydzielenie miejsca

Najpierw operujesz na elemencie, a dopiero potem przydzielasz mu pamięć? Poza tym ustawiasz next na siebie samego.


```cpp list *head = NULL; head = new list; ``` Jak się da to zawsze należy od razu zainicjalizować zmienną dobrą wartością: ```cpp list* head = new list; ```
1

No i funkcja wypisz. Cały czas wypisujesz jeden i ten sam element. Powinno to być tak:

list * item = head;
while(item != NULL)
{
  cout<<item->nazwa;
  item = item->next;
}

Oczywiście to zakłada, że poprawnie robisz przydział pamięci do next i koniec listy jest na NULL (tak, jak powinno być). Pamiętaj, że jeśli nie przypiszesz niczego do next, to wcale nie musi być NULL.

0

Tutaj jest fajnie i prosto wytłumaczone jak działa lista jednokierunkowa.

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