Początki implementacji listy.

Odpowiedz Nowy wątek
Skromny Krawiec
2016-12-15 23:01
Skromny Krawiec
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?

Pozostało 580 znaków

2016-12-16 00:06

Rejestracja: 4 lata temu

Ostatnio: 5 miesięcy temu

Lokalizacja: Pabianice

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().


edytowany 1x, ostatnio: carlosmay, 2016-12-16 00:08

Pozostało 580 znaków

2016-12-16 10:54

Rejestracja: 6 lat temu

Ostatnio: 1 tydzień temu

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.


list *head = NULL;
head = new list;

Jak się da to zawsze należy od razu zainicjalizować zmienną dobrą wartością:

list* head = new list;

Pozostało 580 znaków

2016-12-16 11:36

Rejestracja: 17 lat temu

Ostatnio: 3 dni temu

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.

Pozostało 580 znaków

2016-12-16 14:13

Rejestracja: 4 lata temu

Ostatnio: 5 miesięcy temu

Lokalizacja: Pabianice

0

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


Pozostało 580 znaków

Odpowiedz

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