Chcę napisać program, który najpierw stworzy listę jednokierunkową składającą się z figur (nazwa, boki, pole), a następnie usunie z niej drugą w kolejności figurę dla której liczba boków jest większa od poprzedzającej figury na liście. (Dla przykładu - > 2 9 4 1 5 8 14 - usuwam 5)
Listę już stworzyłem. Macie może jakieś sugestie co do usunięcia tego jednego elementu?
Mój sposób crashuje konsole
#include <iostream>
#include <cstdlib>
using namespace std;
int const n = 4; // STAŁA
// STRUKTURA
struct figura
{
string nazwa; // nazwa figury
int boki; // liczba boków
int pp; // pole powierzchni
figura *next; // adres do nastepnej figury
};
// FUNKCJA - DRUKOWANIE LISTY
void drukowanie(figura *adres)
{
//while(adres!=NULL)
do{
cout << (*adres).nazwa << " " << (*adres).boki << " " << (*adres).pp << " " << endl;
adres = adres->next;
} while(adres!=NULL);
};
int main()
{
// ZMIENNE
figura *glowa, *aktualny, *poprzedni, *tmp;
int liczba, pole, ile, ilew;
string fig;
cout << "LISTA JEDNOKIERUNKOWA" << endl << endl;
// TWORZENIE LISTY
aktualny = NULL;
poprzedni = NULL;
glowa = poprzedni;
for(int i=0; i<n; i++){
poprzedni = aktualny;
cout << "Tworzymy figure nr " << i+1 << endl;
cout << "Podaj figure do wstawienia: ";
cin >> fig;
cout << "Podaj liczbe bokow: ";
cin >> liczba;
cout << "Podaj pole powierzchnii: ";
cin >> pole;
aktualny = new figura;
aktualny->nazwa = fig;
aktualny->boki = liczba;
aktualny->pp = pole;
aktualny->next = NULL;
if(poprzedni != NULL)
poprzedni->next = aktualny;
else
glowa = aktualny;
};
cout << "\nDrukowanie listy: \n";
drukowanie(glowa);
// USUWANIE ELEMENTU Z LISTY
aktualny = glowa;
poprzedni = NULL;
ile = 0;
while (aktualny != NULL)
{
if (aktualny->boki > poprzedni->boki )
ile++;
if (ile == 2){
poprzedni->next = aktualny->next;
tmp = aktualny;
aktualny = aktualny->next;
delete tmp;
} else {
poprzedni->next = aktualny;
aktualny = aktualny->next;
};
};
cout << ile;
cout << "\nDrukowanie listy: \n";
drukowanie(glowa);
return 0;
}