Listy jednokierunkowe - wyszukiwanie elementu [C++]

0

Witam. Obecnie próbuję zrozumieć listy jednokierunkowe i utknąłem w zadaniu w którym trzeba zaimplementować funkcję wyszukującą zadaną wartość. Funkcja ma zwracać wskaźnik na znaleziony element. Funkcję napisałem jednak zawsze zwraca adres zerowy (czyli, że chyba nie znalazł elementu). Mógłby ktoś pomóc / podpowiedzieć co tu jest źle?

 #include "Header.h"

struct Liczby_zmiennoprzecinkowe{
	double liczby;
	Liczby_zmiennoprzecinkowe * first; 
	Liczby_zmiennoprzecinkowe * next; 
	Liczby_zmiennoprzecinkowe(); 

	void add_to_list(double nowa_liczba);
	void print_list();
	void delete_from_list_pozycja(int pozycja_liczby);
	bool delete_from_list_wartosc(double wartosc_liczby);
	void count();
	Liczby_zmiennoprzecinkowe * Liczby_zmiennoprzecinkowe::find(double zadana_wartosc);
};

Liczby_zmiennoprzecinkowe::Liczby_zmiennoprzecinkowe(){ 
	first = 0;
	next = 0;
}

void Liczby_zmiennoprzecinkowe::add_to_list(double nowa_liczba)
{
	Liczby_zmiennoprzecinkowe * nowa = new Liczby_zmiennoprzecinkowe; 

	nowa->liczby = nowa_liczba;

	if (first == 0)    
		first = nowa; 
	else
	{
		Liczby_zmiennoprzecinkowe * temp = first; 

		while (temp->next)		
			temp = temp->next;	
		
		temp->next = nowa;	
		nowa->next = 0;		
	}
}

void Liczby_zmiennoprzecinkowe::print_list()
{
	Liczby_zmiennoprzecinkowe * temp = first;
	int i = 1;

	while (temp){
		cout << i << ". " << temp->liczby << endl;	
		temp = temp->next;	
		++i;
	}	
}

void Liczby_zmiennoprzecinkowe::delete_from_list_pozycja(int pozycja_liczby)
{

	if (pozycja_liczby == 1)	
	{
		Liczby_zmiennoprzecinkowe * temp = first;
		first = temp->next;		
	}

	if (pozycja_liczby >= 2)
	{
		int j = 1;
		Liczby_zmiennoprzecinkowe * temp = first;

		while (temp)
		{
			if ((j + 1) == pozycja_liczby) break;		
			temp = temp->next;	
			j++;
		}

		if (temp->next->next == 0) 
			temp->next = 0; 
		else
			temp->next = temp->next->next;
	}
}

bool Liczby_zmiennoprzecinkowe::delete_from_list_wartosc(double wartosc_liczby)
{
	Liczby_zmiennoprzecinkowe * temp = first;	
	Liczby_zmiennoprzecinkowe * temp1 = NULL;

	if (first == NULL)	
		return false;

	while (temp != NULL && (temp->liczby) != (wartosc_liczby))	
	{
		temp1 = temp;			
		temp = temp->next;	
	}

	if (temp == NULL)	
		return false;
	
	else if (temp == first)	
	{
		first = first->next;
		delete temp;
	}

	else
	{
		temp1->next = temp->next;		
		delete temp;
	}
	return true;
}

void Liczby_zmiennoprzecinkowe::count()
{
	Liczby_zmiennoprzecinkowe * temp = first;
	int i = 0;

	while (temp){
		temp = temp->next;
		i++;
	}
	cout << "\nLiczba elementow listy: " << i << endl;
}

Liczby_zmiennoprzecinkowe * Liczby_zmiennoprzecinkowe::find(double zadana_wartosc)
{
	Liczby_zmiennoprzecinkowe * temp = first;
	while (temp && temp->liczby != zadana_wartosc) temp = temp->next;
	return temp;
}

void MAIN_01()
{
	cout << "\n\n" << setw(45) << "Zadanie 1";
	double nowa_liczba;
	int n;
	char i;
	Liczby_zmiennoprzecinkowe zmienna;

	do{
		cout << "\n1. Dodanie elementu do listy \n2. Wypisanie listy \n3. Usuniecie z listy \n4. Zliczanie elementow listy \n5. Wyszukiwanie na liscie zadanej wartosci \n6. Wyjscie do menu \n\nPodaj opcje: ";
		cin >> i;

		switch (i){
			case '1':
			{
				cout << "\nPodaj ilosc liczb: ";
				cin >> n;

				for (int i = 0; i < n; i++){
					cout << "Podaj nowa liczbe: ";
					cin >> nowa_liczba;
					zmienna.add_to_list(nowa_liczba);
				}
			}break;

			case '2':
			{
				cout << "--------------------------------------------------------------------------------";
				zmienna.print_list();
			}break;

			case '3':
			{
				char h;
				cout << "\nPodaj w jaki sposob chcesz usunac liczbe z listy \n1. Przez pozycje liczby \n2. Przez wartosc liczby \n Podaj opcje: ";
				cin >> h;
				if (h == '1')
				{ 
					int pozycja_liczby;
					cout << "\nPodaj pozycje liczby ktora chcesz usunac: ";
					cin >> pozycja_liczby;
					zmienna.delete_from_list_pozycja(pozycja_liczby);
				}
				else
				{
					double wartosc_liczby;
					cout << "\nPodaj wartosc liczby ktora chcesz usunac: ";
					cin >> wartosc_liczby;
					zmienna.delete_from_list_wartosc(wartosc_liczby);
				}
			}break;

			case '4':
			{
				zmienna.count();
			}break;

			case '5':
			{
				Liczby_zmiennoprzecinkowe pozycja;
				Liczby_zmiennoprzecinkowe * wskaznik;
				double zadana_wartosc;
				cout << "\nPodaj szukana wartosc: ";
				cin >> zadana_wartosc;
				wskaznik = pozycja.find(zadana_wartosc);
				cout << "\nSzukana wartosc znajduje sie na pozycji: " << wskaznik << "\n";
			}break;

			case '6':
				break;

			default:
			{
				"\nPodano bledna opcje. Prosze sprobowac ponownie.";
			}break;
		}
	} while (i != '6');
}
0
                Liczby_zmiennoprzecinkowe pozycja;
                Liczby_zmiennoprzecinkowe * wskaznik;
                double zadana_wartosc;
                cout << "\nPodaj szukana wartosc: ";
                cin >> zadana_wartosc;
                wskaznik = pozycja.find(zadana_wartosc);
                cout << "\nSzukana wartosc znajduje sie na pozycji: " << wskaznik << "\n";

Szukasz element na pustej liscie zamiast na tej co dodawales elementy

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