[C++] Dołączanie elementu do listy po elemencie o zadanie wartości
Ostatnio zmodyfikowano 2017-02-11 00:38
xorb89 Temat założony przez niniejszego użytkownika |
[C++] Dołączanie elementu do listy po elemencie o zadanie wartości » 2017-02-10 23:27:01 Witam, do podanego programu mam dołączyć możliwość dodania elementu do listy po elemencie o danej wartości i kompletnie nie wiem jak mam to zrobić. Byłbym wdzięczny za każdą pomoc. Program: #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
struct element_listy { int liczba; element_listy * nastepny; };
element_listy * usun_element( element_listy * glowa, int wartosc ) { element_listy * tmp = glowa; element_listy * poprzedni = glowa; while( tmp != NULL ) { if( tmp->liczba == wartosc ) if( tmp == glowa ) { glowa = glowa->nastepny; delete tmp; tmp = glowa; poprzedni = glowa; } else { poprzedni->nastepny = tmp->nastepny; delete tmp; tmp = poprzedni->nastepny; } else { poprzedni = tmp; tmp = tmp->nastepny; } } return glowa; }
int main() { element_listy * glowa = NULL; element_listy * ogon = NULL; element_listy * nowy; char odp; int d; cout << "Czy chcesz podac element listy? t/n: "; cin >> odp; while( odp != 'n' ) { cout << "Podaj dane: "; cin >> d; try { nowy = new element_listy; } catch( bad_alloc ) { cout << "Nie ma juz miejsca na nastepny element"; break; } nowy->nastepny = NULL; nowy->liczba = d; if( glowa == NULL ) { glowa = nowy; ogon = glowa; } else { ogon->nastepny = nowy; ogon = nowy; } cout << "Chcesz podac kolejny element listy? t/n: "; cin >> odp; } element_listy * tmp = glowa; cout << "Oto utworzona przez ciebie lista:\n"; while( tmp != NULL ) { cout << tmp->liczba << " "; tmp = tmp->nastepny; } cout << "Czy usunac elementy? t/n: "; cin >> odp; if( odp == 't' ) { cout << "Jakie dane usunac? "; cin >> d; glowa = usun_element( glowa, d ); } while( glowa != NULL ) { tmp = glowa; glowa = glowa->nastepny; delete tmp; } return 0; } |
|
pekfos |
» 2017-02-10 23:36:15 A umiesz wstawić element w środek listy? Od tego już prosto. |
|
xorb89 Temat założony przez niniejszego użytkownika |
» 2017-02-10 23:55:26 Na razie umiem wstawiać kolejne, do środka nie zabardzo |
|
Nazgul |
» 2017-02-11 00:38:08 Wstawienie elementu do środka listy masz sobie listę A->B->C->D->E->F->G (strzałeczka oznacza, że element trzyma wskaźnik na ten element na który wskazuje;D) do tego masz wskaźnik na element D. to możesz sobie wstawić element Y w taki sposób że uzyskasz: A->B->C->D->Y->E->F->G wystarczy że zrobisz: Y->nastepny = D->nastepny; D->nastepny = Y;
to masz algorytm do wstawiania do środka listy potem sobie robisz wyszukiwanie czyli zaczynasz od głowy: int wartosc; cin >> wartosc; element_listy * sprawdzany = glowa; while( sprawdzany != NULL ) { if( sprawdzany->liczba == wartosc ) { break; } sprawdzany = sprawdzany->nastepny; }
//EDIT (źle wpisałęm operator ("=", a powinno być "==")) jak coś to już poprawiłem;) |
|
« 1 » |