Witam, wiem że komuś może się to wydać proste ale ja właśnie mam z tym problem. Nie wiem jak zabrać się za zadanie z list jednokierunkowych. Przytaczam treść zadania i poniżej to co wykombinowałam sama. Bardzo proszę o w miarę szybką odpowiedź.
zad.8
Napisać funkcję, która do listy jednokierunkowej zawierającej pary (znak, liczba) i zaczynającej się pod jakimś adresem jako drugi dopisuje element o jakichś danych, gdy na liście są wyłącznie elementy zawierające małe litery w polu znakowym, po czym zwraca adres dopisanego elementu lub NULL, gdy niczego nie dopisano.
Funkcję poprzedzić definicją odpowiedniej struktury.
Uwaga: Słowo jakiś oznacza parametr funkcji.
Już na wstępie mam problem jak przekazać parametr struktury o więcej niż jednym polu. (oprócz wskaźnika)
Oto moje wypociny:
#include <cstdlib>
using namespace std;
struct element_listy
{
char znak;
int liczba;
element_listy *wsk_nastepnika;
};
//iteracyjna funkcja drukujaca zawartosc listy
void drukuj(element_listy *adres)
{
while(adres!=NULL)
{
cout<<adres->liczba<<" "<<adres->znak<<endl;
adres=adres->wsk_nastepnika;
}
}
element_listy funkcja8(element_listy* adres, element_listy* co)
{
element_listy* tmp;
tmp=adres->wsk_nastepnika;
adres->wsk_nastepnika=co;
co->wsk_nastepnika=tmp;
}
int main()
{
//zmienne do obslugi listy - wszystkie to wskazniki
element_listy *glowa, *aktualny, *poprzedni, *tmp;
//dodatkowe dane pomocnicze
int liczba, ile, ilew, i;
char znak;
//Tworzenie listy, zero konczy wpisywanie
aktualny=NULL;
poprzedni=NULL;
glowa=poprzedni;
cout<<"Podaj liczbe do wstawienia:";
cin>>liczba;
cout<<"Podaj znak do wstawienia: ";
cin>>znak;
while(liczba!=0)
{
//zapamietujemy dotychczasowy koniec listy
poprzedni=aktualny;
//tworzymy nowy element
aktualny=new element_listy;
//zapisujemy do niego odczytane dane
aktualny->liczba=liczba;
aktualny->znak=znak;
//teraz jest to ostatni element listy;
aktualny->wsk_nastepnika=NULL;
//poprzedni ostatni juz nie jest ostatnim
if(poprzedni!=NULL)
poprzedni->wsk_nastepnika=aktualny;
else glowa=aktualny;
//i odczytujemy nowe dane
cout<<"Podaj liczbe do wstawienia: ";
cin>>liczba;
cout<<"Podaj znak do wstawienia: ";
cin>>znak;
};
cout<<"Po wprowadzeniu wydruk listy:\n";
drukuj(glowa);
funkcja8(glowa,liczba,znak);
drukuj(glowa);
//zwalnianie pamieci
aktualny=glowa;
while(aktualny!=NULL)
{
poprzedni=aktualny;
aktualny=aktualny->wsk_nastepnika;
delete poprzedni;
}
cout<<"\n Pamiec zwolniona\n";
return 0;
}
Prosiłabym o podpowiedzi w c++ ale strukturalnym który obowiązuje mnie na egzaminie. (Nie obiektowym)
Z góy dziękuję za pomoc i pozdrawiam