C++ Węzły i listy ciąg dalszy

0

Witam, jak w temacie mam do napisania kilka programów lecz mnie interesuje jeden z wielu i chciałbym go zrobić, otóż zadanie jest takie:
Program generuje wskazaną przez użytkownika parzystą ilość węzłów listy jednokierunkowej z polami danych wypełnionymi losowo liczbami z zakresu od 0 do 20. Wyświetla zawartość listy. Pobiera od użytkownika liczbę i zwraca informację, czy podana liczba jest na liście.
I teraz mam takie pytanko czy taka funkcja może być:
int LISTA::szukaj(int x)
{
ELEMENT *q=inf.glowa;
while (q != NULL)
{
if (q->wartosc==x) return SUKCES;
q=q->nastepny;
}
return PORAZKA;
}
oczywiście Typ wyliczeniowy jest wcześniej zadeklarowany;
Oczywiście można dorzucić funkcje srand(time(0)) a z nią rand()%21 żeby wyszukiwało te liczby od 0-20 ale to jest akurat w części int main(). Proszę o wyrozumiałość dla mnie gdyż nie jestem z zawodu programistą a tylko chce się nauczyć i zrozumieć.
Pozdrawiam i czekam na podpowiedzi.

0

Zobacz jak rozwiązałem to w tym temacie: Problem z lista

Dołączam kod tutaj. Tam słusznie ktoś zauważył, że rekurencja spowalnia czas usuwania i zajmuje zbyt dużo pamięci:

#include <iostream>
using namespace std;
 
//na początek typedef się przyda
typedef struct list List;
struct list
{
     int value;
     List* nxt;
};
 
List* AddNewElement(List* root, int value)
{
        List* temp = root;
        while(temp->nxt != NULL)
                 temp = temp->nxt;
 
         List* _new = (List*)malloc(sizeof(List));
         temp->nxt = _new;
     _new->value = value;
     _new->nxt = NULL;
 
     return root;     // zwracamy korzeń, bo to lista jednokierunkowa, nie mamy możliwości powrotu do korzenia w inny sposób jak właśnie przez zwrócenie korzenia w funkcji
}
 
List* SeekValue(List* root, List* temp, int x)
{
        if(temp == NULL)
                return root;
 
        if(temp->value == x)
                return temp;
        else
                SeekValue(root, temp->nxt, x);
}
 
void DeleteAllMembers(List* root)
{
        while(root != NULL)
		{
			List* next = root->nxt;
            free(root);
			root = next;
		}
}
 
int main(int argc, char* argv[])
{
        List* root = (List*)malloc(sizeof(List));
        root->nxt = NULL;
        root->value = 1;
        AddNewElement(root, 2);
        AddNewElement(root, 3);                                // opcjonalnie tak,
        root = AddNewElement(root, 4);                // lub tak. Daje to ten sam wynik
 
        cout << root->nxt->nxt->nxt->value << endl;
 
        List* find = SeekValue(root, root, 3);
 
        find == root ? cout << "Nie ma takiej wartosci" << endl : cout << "Ta wartosc to: " << find->value << endl;
        cout << "To wciaz ten sam korzen " << root->value << endl;
 
        DeleteAllMembers(root);

		getchar();
 
        return 0;
}
0

Wszystko fajnie funkcja szukaj jest niemalże identyczna jak moja tyle że program jest w C, a ja potrzebuje kodu w C++, lecz program i tak się nie kompiluje z zalecanym zestawem opcji tj: -ansi -pedantic -Wall -W -Wconversion -Wshadow -Wcast-qual -Wwrite-strings
Sam program nie nawiązuje całościowo co do mojej treści, pokazuje tylko liste i wyszukiwania wzorca.

0

Może być, ale ja osobiście zmieniłbym jej nazwę na zawiera lub czyZawiera i zwracał typ bool

0

To jest akurat najmniej istotny element w tym programie:) cout-a w każdej chwili można dorzucić z taką informacją:)

0

Czemu uważasz, że to nie jest w C++? Ja osobiście widzę tam cout a nie printf, poza tym jest <iostream> i using namespace std. Zupełnie nie widzę, żeby to było w C, choć fakt, był to kod dla osoby piszącej w C.

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