Witam! Mam funkcję, która ma wstawiać podaną wartość w wybrame miejsce listy. Program się kompiluje i uruchamia, dodaję kilka przykładowych elementów za pomocą pierwszej funkcji a potem próbuję dodać jakiś w wybrane miejsce pomiędzy nimi za pomocą funkcji z tematu, ale za każdym razem dostaję komunikat że lista jest pusta. Dlaczego?
Kod tutaj: http://pastebin.com/mReQwxsh
Mi za to w ogóle nie dodaje. Nie mógłbyś tego zrobić tak:
while( it->nast!=NULL){
licznik++;
if(licznik==i){
it ->dana=x;
return;
}
it = it->nast;
}
Czyli po prostu w ten konkretny element wpisać nową wartość?
Chodzi o coś takiego: mam np lstę: 1,2,3 i dodaję do niej 4 w miejsce 2, 2 wskakuje w miejsce 3 a 3 w kolejne(puste) -> w rezultacie powinnam dostać : 1,4,2,3 a nie 1,4,3.
Coś takiego działa tak jak chcesz:
if(licznik== (i-1)){
ele *tmp = new ele;
tmp->dana=x;
tmp->nast=it->nast;
it->nast = tmp;
return;
}
Program jest napisany na potrzeby nauki do kolokwium, więc nie wszystko musi być idealnie sformułowane. "Podaj numer elementu listy, którym ma się stać podana wcześniej liczba" - chodziło tu tylko o numer pozycji(index) na którym ma się znaleźć nowa wartość a nie o to że stara ma zostać zastapiona
Powinno działać, ale ciągle nie widzi stworzonych wcześniej elementów
Spróbuj z takim swtitchem:
switch (inst){
case 1:
insert_poczatek(pocz, x);
break;
case 2:
insert_koniec(pocz, data);
break;
case 3:
insert_dowolne(pocz, x,i);
break;
case 7:
wypisz_wszystko(pocz);
break;
}
Już działa, dzięki. Teraz stworzył się jeszcze inny problem - mam funkcję, która ma usuwać wybrany element listy, ale kiedy próbuję jej użyć program się crashuje.
<code class="cpp">void delete_dowolny(ele *&pocz, int i){
cout<<"Podaj index pozycji, którą chcesz usunąć: ";
cin>>i;
ele *in;
int licznik = 0;
if(pocz == NULL){
cout<<"Lista jest pusta. Dodaj najpierw jakiś element. ";
return;
}
while(in->nast){
licznik++;
if(licznik==(i-1)){
in=pocz->nast;
pocz->nast=in->nast;
delete in;
return;
}
}
}
Zrób sobie rysunek, programowania przez bezmyślne sklejanie różnych fragmentów nie ma racji bytu.