Lista jednokierunkowa- dodawanie elementów wewnątrz listy

0

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

0

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ść?

0

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.

0

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;
}
1

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

0

Powinno działać, ale ciągle nie widzi stworzonych wcześniej elementów

0

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;
}
0

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;	
		}
		
	}
}
0

Zrób sobie rysunek, programowania przez bezmyślne sklejanie różnych fragmentów nie ma racji bytu.

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